sql server中查询列名无效_SQL中的多表查询应用

一.表的加法:

6803563233820a21042a9f6907f5d2ef.png

注意事项:

1.将两个表按照行合并在一起,列名需要相同

2.加法时,会将重复数据自动删除

3.若想保留全部行,union all 即可

二. 表的联结 join

联结:将2张表通过某一列关联起来,将2张表合并进行操作

1. 交叉联结 cross join 也叫笛卡尔积

是将表1中每一行都与表2中每一行合并在一起,交叉联结后,新表行数是两张表行数的乘积,例如扑克牌就是交叉联结产生结果

交叉联结是基础,其他联结相当于是在交叉联结上添加了过滤条件

2. 内联结 inner join

查找出同时存在于两张表的数据

9c7cefaed0969a3c25867dde717ebdd2.png

3. 左联结 left join

(1)将两个表相同数据取出来同时,将左侧表中的数据全部取出来,进行合并即交叉联结,没有相同部分的数据,对应的数据为空值

9056b899044a9726f977da9e21e4fb35.png

(2)如果想要去掉两张表中交叉部分,只取左表剩余部分,如下图:

85071b6a230b4a5bbb70925e085c250b.png

4.右联结 right join

(1)将两个表相同数据取出来同时,将右侧表中的数据全部取出来,进行合并即交叉联结

861da80d0f38fedf49d8f8fc74155eb6.png

5.全联结 full join

会返回左表和右表中的所有行,当有匹配行进行合并,没有就对应空值,目前Mysql 不支持全联结

33e355730605319adbdcf00647c1c64b.png

6.总结:

什么情况用哪一种联结:

想要生成固定行数的表单,或者特别说明了要哪一张表里的全部数据的时候,使用左联结或者右联结,大部分情况都是用内联结找到表的公共部分

9576c3206b524671bd698b5441101314.png

三. 应用案例

练习1:查询所有学生的学号,姓名,选课数,总成绩

e3c01e8bf4b32c1e2dc9d114d53c6938.png

练习2:查询平均成绩大于85的所有学生的学号、姓名和平均成绩

67cfa22a2def4b639e8105b48aa6a28e.png

练习3:查询学生的选课情况:学号,姓名,课程号,课程名称

f64c1a226d28f7280645159b66f369d5.png

四. Case表达式

使用case表达式可以帮助解决复杂的查询问题,作用相当于进行条件判断的函数,用来判断每一行是否满足某个条件

Case后面的where 是判断了解,如果符合就执行对应的then字句,结束运行

如果不满足条件,在后面子句中继续判断,都不符合执行else对应的语句

当有多种情况要条件判断是,可以用case表达式,它可以写在SQL语句中的任一子句中,注意end是一定要写的

cc9a10e34a384ed70364247562c064ad.png

练习1:查询出每门课程的及格人数和不及格人数

da674a354066edd0e5813cd8d7337e28.png

练习2:使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称

261bfad5298510d7662e190f09deb286.png

参考文献:

知乎live讲座,从零学SQL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值