查询
聚合查询
聚合函数
null空值不会被计数
搭配MySQL中的一些内置“函数”
count ()计算结果的行数,count和()之间不能有空格
count是不计算null值
求所有分数小于90的同学的平均分
GROUP BY子句
把得到的查询结果按照一定的规则分组(可能分成多个组)
HAVING关键字
group by 也可以结合条件进行进一步筛洗,使用having+(表达式)
having是针对group by 之后的结果进行筛选,where是针对原始表中的的每条记录进行筛选
查找所有平均工资高于250的岗位和平均薪资
联合查询
MySQL中的各种连接
基本机制:笛卡尔积,两张表进行排列组合的结果
多表查询:
1、先计算多个表的笛卡尔积
2、基于条件针对笛卡尔积中的记录进行筛选
3、多表拆线呢要写表名.列名
内连接
select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
a)查找名字为许仙的同学的所有成绩
姓名包含在student表中、分数包含在score表中,针对这两张表进行联合查询
1、先查看两个表笛卡尔积的结果
2、按照student id 对笛卡尔积进行筛选,保留有意义的数据
3、再针对名字进行筛选
最后一步的第二种写法
b)查找所有同学的总成绩,以及同学的基本信息
1、先得到联合表的笛卡尔积
2、按照学生id来进行筛选,删除笛卡尔积中的不必要数据
3、对学生成绩进行求和然后group by
c)查找所有同学每一科的成绩和同学的成绩
最终显示 姓名、科目、成绩
学生表中有8个
id为8号的学生在成绩表中不存在
进行笛卡尔积之后再按照id筛选,这样的筛选结果一定是同时再两个表中都出现过的记录(内连接)
有的数据在student中存在,在score中不存在,或者二者有其一中存在,这样的记录可以查出来(外连接)
有的数据在student中存在,在score中不存在可查到,student中不存在,score中存在查不到(左连接)
有的数据在student中存在,在score中不存在可查不到,student中不存在,score中存在可查到(右连接)
外连接
自连接
自连接本质上相当于把同一列中的两行记录转换成不同列的同一行记录
所有计算机原理成绩高于java成绩的同学id
1、先找到java和计算机原理的课程id
2、按照课程id在分数表中筛选数据
a)针对score表自身进行笛卡尔积
b)加上学生id的限制
c)加上课程id限制
d)按照分数大小进行比较
e)查询学生id
子查询
在其他sql中嵌入查询语句
1、单行子查询(子查询结果只有一行)
查询和“不想毕业”同班的同学
2、多行查询
查询语文或者英文对应的成绩
借助in的方式进行子查询==(先执行子查询,把子查询的结果保存到内存中,再进行主查询,再结合刚刚子查询的结果筛选最终结果)==
使用exists先执行主查询再触发子查询
如果子表查询结果集合比较小,就用in
如果子表查询的结果集合比较大,而主表的集合小,用exists
合并查询
相当于把多个查询的结果集合合并成一个集合==(需要保证多个结果集之间的字段类型和数目都一致)==
union关键字
查询id<3或者名字为英文的课程
如果不去重使用union all
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/152983.html