查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题

一、简单查询

like的用法

查询姓“猴”的学生名单

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第1张图片

查询姓名中最后一个字是“猴”的学生名单

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第2张图片

查询姓名中带“猴”的学生名单

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第3张图片

二、汇总分析

聚合函数与分组

查询课程编号为“0002”的总成绩

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第4张图片

查询选了课程的学生人数

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第5张图片

查询各科成绩最高和最低的分

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第6张图片

查询每门课程被选修的学生数

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第7张图片

查询男、女人数

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第8张图片

查询平均成绩大于60分的学生学号和平均成绩

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第9张图片

查询至少选修两门课的学生学号

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第10张图片

查询同名同姓学生名单并统计同名人数

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第11张图片

查询不及格的课程并按课程号从大到小排列

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第12张图片

查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第13张图片

检索课程编号为0004且分数小于60的学生学号,结果按分数降序排列

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第14张图片

统计每门课程的学生选修人数(选修人数大于2才统计),要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第15张图片

查询两门以上不及格课程的同学的学号,以及不及格课程及平均成绩

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第16张图片

三、复杂查询

子查询

查询所有课程成绩小于60分的学生学号、姓名

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第17张图片

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第18张图片

查询没有学全所有课的学生学号、姓名

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第19张图片

查询只选修了两门课的全部学生学号和姓名

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第20张图片
日期函数

查询1990年出生的学生名单

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第21张图片
topN问题

按课程号分组取成绩最大值所在行的数据

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第22张图片

按课程号分组取成绩最小值所在行的数据

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第23张图片

查询各科成绩前两名的记录

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第24张图片
四、各类函数总结
字符函数 含义 语法 举例
concat 拼接字符 concat('字符串1','字符串2',...,'字符串n') select concat('hello',' ','world')查询结果为hello world
length 获取字节长度 length('字符串') select length('你好')
一个汉字为3个字节,故查询结果为6
char_length 获取字符长度 char_length('字符串') select char_length('你好')
一个字符占一个字节,故查询结果为2
substr 截取字符 substr(str,起始索引,截取的字符长度) select substr('hello world',7,5)查询结果为world
left/right 向左/右截取字符 left(str,截取字符长度) select left('hello world',5)查询结果为hello
strcmp 比较两个字符的大小 strcmp('字符1','字符2') select strcmp('hello','world') 查询结果为-1
trim 去前后指定的字符,默认去空格 trim(具体某个字符from字符串) select trim('a'from'aorangeaa')查询结果为orange
instr 获取字符第一次出现的索引 instr(字符串,具体某个字符) select instr('hello','l')查询结果为3
lpad/rpad 左填充/右填充 lpad(字符串,列宽,需要填充的内容) select lpad('left',5,'a')查询结果为aleft
upper/lower 变大写/变小写 upper(字符串) select upper('first_name')查询结果为FIRST_NAME
数学函数 含义 语法 举例
abs 绝对值 abs(数值) select abs(-2) 查询结果为2
round 四舍五入 round(数值,保留小数位数) select round(2.1345,2)查询结果2.13
mod 取余 mod(数值a,数值b) select mod(10,3)查询结果为1
ceil 向上取整 ceil(数值) select ceil(2.478)查询结果为3
floor 向下取整 floor(数值) select floor(2.986)查询结果为2
日期函数 含义 语法 举例
now 当前时间 now() select now()
curdate 当前日期,精确到日 curdate() select curdate()
curtime 当前日期,精确到秒 curtime() select curtime()
datediff 比较两日期的时间差 datediff('日期','日期') select datediff('1991-12-31','1989-01-01')查询结果为1094
date_format 将日期转化为字符 date_format('日期','%y年%m月%d日%h时%i分%s秒) select date_format('1989/01/01','%Y年%m月%d日' )查询结果为1989年01月01日
str_to_date 将字符转化为日期 str_to_date('给定格式的字符串','%m%d%Y') select str_to_date('01/01/1989','%m/%d/%Y')查询结果为1989-01-01

五、多表查询

join,left join,right join

下面是学生的名单,表名为“学生表”;近视学生名单,表名为“近视学生表”,查询不是近视的学生名单

学生表
学号 姓名
0001 周周
0002 李李
0003 王王
0004 张张
0003 王王
近视学生表
序号 学生号
1 0001
2 0002
3 0004
select 学号,姓名
from 学生表 as a
left join 近视学生表 as b
on a.学号 = b.学生号
where b.学生号 is null;

下面两个表分别是顾客姓名表(表名customers)和购买记录表(表名orders)找出所有从不订购任何东西的客户

customers
ID Name
1 Joe
2 Henry
3 Sam
4 Max
orders
ID customerId
1 3
2 1
#左连接
select name
from customers as c
left join orders as o
on c.id = o.customerid
where o.customerid is not null
#右连接
select name
from customers as c
right join orders as o
on c.id = o.customerid

查询所有学生的学号、姓名、选课数、总成绩

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第25张图片

查询平均成绩大于85的所有学生的学号、姓名和平均成绩

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第26张图片

查询学生的选课情况:学号、姓名、课程号、课程名

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第27张图片

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第28张图片
case语句

查询每门课程的及格人数和不及格人数

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第29张图片

使用分段【100-85】,【85-70】,【70-60】,【<60】来统计各科成绩,分别统计:各分段人数,课程号,课程名

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第30张图片

查询课程编号为0003且课程成绩在80分以上的学生学号和姓名

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第31张图片

行列互换

查询所有张姓同学学号6_SQL基础查询知识汇总-求职面试题_第32张图片

六、如何提高查询效率

  • select 子句中尽量避免使用*
    • select * from 表名,选取的是表中的全部数据
    • select *用于多表连接时,会造成更大的时间成本开销
    • 解决:需要哪些列的数据,提取哪些列的数据
  • where 子句比较符号左侧避免使用函数
    • where 条件子句中,比较符号的左侧若使用表达式、函数,会导致数据库引擎进行全表扫描,从而增加运行时间
    • 解决:将where子句中遇到的函数或运算都移到比较符号的右侧
  • 尽量避免使用in 和 not in
    • 会导致数据库进行全表搜索,增加运行时间
    • 解决:子查询的数据量大时用exists,数量小时二者区别不大
  • 尽量避免使用or
    • 会导致数据库进行全表搜索
    • 解决:把需要or连接的条件拆分成多个语句,再用union连接多个语句
  • 使用limit子句限制返回的数据行数

你可能感兴趣的:(查询所有张姓同学学号6)