1. 聚合查询
1.1 COUNT 函数(返回查询到的数据的条数。)
统计班级共有多少同学:
SELECT COUNT(*) FROM student;
1.2
SUM 函数 (
返回查询到的数据的总和,不是数字没有意义。)
统计数学成绩总分:
SELECT SUM(math) FROM exam_result;
1.3 AVG 函数 (返回查询到的数据的平均值,不是数字没有意义。)
统计平均总分:
SELECT AVG(chinese + math + english) 平均总分 FROM exam_result;
1.4 MAX 函数 (返回查询到的数据的最⼤值,不是数字没有意义。 )
返回英语最⾼分:
SELECT MAX(english) FROM exam_result;
1.5 MIN 函数 (返回查询到的数据的最⼩值,不是数字没有意义。)
返回 > 70 分以上的数学最低分:
SELECT MIN(math) FROM exam_result WHERE math > 70;
1.6 ifnull 函数 (
它接受两个参数,如果不是 NULL,则返回第⼀个参数,否
则 IFNULL 函数返回第⼆个参数
)
SELECT IFNULL(NULL,'Hello,Null'); -- returns Hello,Null
2.分组查询 GROUP BY
2.1 分组条件查询 HAVING
SQL 查询执⾏先后顺序: group by > having > order by > limit
GROUP BY ⼦句进⾏分组以后,需要对分组结果再进⾏条件过滤时,不能使⽤ WHERE 语句,⽽
需要⽤ HAVING
显示平均⼯资低于 1500 的⻆⾊和它的平均⼯资:
select role,max(salary),min(salary),avg(salary) from emp group by role having avg(salary)>1500;
3.联合查询(多表查询)
3.
1 前置知识—笛卡尔积
笛卡尔积⼜称直积,表示为 X*Y,⽐如 A 表中的数据为 m ⾏,B 表中的数据有 n ⾏,那么 A 和 B
做笛卡尔积,结果为 m*n ⾏。
3.
2 内连接
内连接侧重于两个表之间的共性,它的作⽤是使⽤联接,⽐较两个(或多个)表之间的共有数据,
然后进⾏返回。
![](https://img-blog.csdnimg.cn/f3b7c8297a8048b18b04abff25d54d28.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5paw6Z2S5bm0fg==,size_15,color_FFFFFF,t_70,g_se,x_16)
3.
2
.
1 内连接语法
内连接的实现语法:
select * from t1 [inner|cross] join t2 [on 过滤条件] [where 过滤条件]
3.
2
.
2 示例
查询“张三”的成绩:
select st.score from score_table st join student s on s.id=st.student_id
and s.username='张三';
3.
2
.
3 内连接查询的“问题”
一个表里有一条数据而另外一个关联表里没有关于这条的数据,那么使用内连接就可能出现遗漏,
例如一个学生刚转班进来没有参加过考试,那么使用学生表和成绩表内连接查询,这个学生就查询
不到。
3.
3 外连接
左(外)连接:
![](https://img-blog.csdnimg.cn/e8138c5194f341ab9d4f194bb546e7ac.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5paw6Z2S5bm0fg==,size_19,color_FFFFFF,t_70,g_se,x_16)
右(外)连接:
![](https://img-blog.csdnimg.cn/ee1bdbf9f90f4661bae4094d4477b80d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5paw6Z2S5bm0fg==,size_17,color_FFFFFF,t_70,g_se,x_16)
3.3.1 语法连接
左连接语法如下:
select * from t1 left join t2 [on 连接条件];
右连接语法如下:
select * from t1 right join t2 [on 连接条件];
3.3.2 使⽤左连接查询所有⼈的成绩:
select s.sn,s.username,s.mail,st.score from student s
left join score_table st on s.id=st.student_id;
3.4 ⾃连接(
⾃连接是指在同⼀张表连接⾃身进⾏查询。
)
查询英语成绩>计算机成绩的数据:
select st1.score 英语,st2.score 计算机 from score_table st1,score_table st2
where st1.student_id=st2.student_id and st1.score>st2.score;
3.5 ⼦查询(
⼦查询是指嵌⼊在其他 sql 语句中的 select 语句,也叫嵌套查询。
)
查询张三的同班同学:
select * from student where class_id=(select class_id from student where
username='张三');
3.6 合并查询(合并查询⽤于合并结果集相同的两张(多张)表)
3.6.1 union 使⽤
查询 id ⼩于
3
和名字为“英语”的课程:
select * from course where id<3 union select * from course where name='英语';
3.6.2 union all 使⽤
查询 id ⼩于 3,或者名字为“英语”的课程
select * from course where id<3 union all select * from course where name='英语';