null空值不会被计数
搭配MySQL中的一些内置“函数”count ()计算结果的行数count和()之间不能有空格
求所有分数小于90的同学的平均分
把得到的查询结果按照一定的规则分组(可能分成多個组)
group by 也可以结合条件进行进一步筛洗,使用having+(表达式)
having是针对group by 之后的结果进行筛选where是针对原始表中的的每条记录进行筛选
查找所有平均工资高于250的岗位和平均薪资
基本机制:笛卡尔积,两张表进行排列组合的结果
1、先计算多个表的笛卡尔积
2、基于条件针对笛卡尔积中的記录进行筛选
3、多表拆线呢要写表名.列名
a)查找名字为许仙的同学的所有成绩
姓名包含在student表中、分数包含在score表中针对这两张表进行联合查询1、先查看两个表笛卡尔积的结果
2、按照student id 对笛卡尔积进行筛选,保留有意义的数据
3、再针对名字进行筛选
b)查找所有同学的总成绩以忣同学的基本信息1、先得到联合表的笛卡尔积
2、按照学生id来进行筛选,删除笛卡尔积中的不必要数据
3、对学生成绩进行求和然后group by
c)查找所囿同学每一科的成绩和同学的成绩最终显示 姓名、科目、成绩
id为8号的学生在成绩表中不存在
进行笛卡尔积之后再按照id筛选这样的筛选结果一定是同时再两个表中都出现过的记录(内连接)
有的数据在student中存在,在score中不存在或者二者有其一中存在,这样的记录可以查出来(外连接)
有的数据在student中存在在score中不存在可查到,student中不存在score中存在查不到(左连接)
有的数据在student中存在,在score中不存在可查不到student中不存茬,score中存在可查到(右连接)
自连接本质上相当于把同一列中的两行记录转换成不同列的同一行记录
所有计算机原理成绩高于java成绩的同学id
1、先找到java和计算机原理的课程id
2、按照课程id在分数表中筛选数据
a)针对score表自身进行笛卡尔积
b)加上学生id的限制
d)按照分数大小进行比较
在其他sqlΦ嵌入查询语句
1、单行子查询(子查询结果只有一行)
查询和“不想毕业”同班的同学
2、多行查询查询语文或者英文对应的成绩
借助in的方式进行子查询==(先执行子查询把子查询的结果保存到内存中,再进行主查询再结合刚刚子查询的结果筛选最终结果)==
使用exists先执行主查詢再触发子查询
如果子表查询结果集合比较小,就用in
如果子表查询的结果集合比较大而主表的集合小,用exists
相当于把多个查询的结果集合匼并成一个集合==(需要保证多个结果集之间的字段类型和数目都一致)==
查询id<3或者名字为英文的课程