快速入门之MySQL(四)---⾼级SQL查询

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 内连接
内连接侧重于两个表之间的共性,它的作⽤是使⽤联接,⽐较两个(或多个)表之间的共有数据,
然后进⾏返回。

 

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 外连接
左(外)连接:

 

右(外)连接:

 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='英语';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值