where后。如果想保留重复的内容,则需要在union后面加上 all
表与表之间因为特定的列产生联结(join)
sql多表关联查询用where、
交叉联结
aspwhere多条件、123行分别与ab行结合形成3*2行数据
内联结
用 as 把表重命名增加运行效率 用on的列联结两张表
左联结
左联结会将左侧的表当成主表,将它全部读取出来,将右侧的表中只选出相同条件的行然后进行交叉联结
如果想把公共部分去除,则加一条where子句如下图
右联结
右联结会将右侧的表当成主表,将它全部读取出来,将左侧的表中只选出相同条件的行然后进行交叉联结
如果想把公共部分去除,则加一条where子句如下图
全联结
全联结返回两行的所有行,匹配的行会互相合并,如果没有匹配的行则会空值填充
sql连接总结图
sql运行顺序
问题1:查询出所有学生的学号,姓名,每个学生的选课数目,每个学生的总成绩
1.翻译成大白话
查出所有学生的学号姓名(都在学生表中)
每个学生的选课数目(按照学号分组,用count函数汇总成绩表中的课程号)
每个学生的总成绩(按照学号分组,用sum函数汇总成绩表中的成绩)
2.分析思路
select 输出 学号姓名 选课数目 总成绩
from 学生表 成绩表 因为需要所有学生的信息所以需要将学生表当做主表
where 查询条件 无
group by 需要用学号进行分组
having 无
order by 无
limit 无
3.sql 语句
这里需要注意将各个列名加入各个表的别名
问题2:查询平均成绩大于85的所有学生的学号,姓名,和平均成绩
学号姓名都在学生表中
所有学生的平均成绩需要用学号分组然后用avg函数汇总
输出条件则是分组之后avg函数结果大于85的数据
2.分析思路
select 输出 学号 姓名 平均成绩
from 学生表 成绩表 因为是所有学生所以用学生表作主表
where 无
group by 需要用学号进行分组
having avg成绩 大于85
order by 无
limit 无
3.sql语句
问题3:查询学生的选课情况:学号,姓名,课程号,课程名称
这里需要用到学生表和课程表,但是其中必须加入成绩表才能将其联结
相当于循环条件,从上而下当满足条件输出这一行的结果,没有满足则继续运行第二条when直到else结束 case表达式适合用在一个列中需要输出两种条件的情况
查询每门课程的及格人数和不及格人数
注意事项:
1.else 可以不写 默认空值 但是最好写上
2.end必须写
3.case表达式可以写在任意子句
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态