sql多表条件查询_SQL:多表查询

1.表的加法 union

cd14b56cefb68e35820468a7b7731d95.png
会把相同的数据删除,保留唯一值

5998bab09f99803a1d01a780151bae9a.png
union all会保留重复值

2.表的联结 join(通过列产生对应关系)

通过表和表之间的关系连接在一起

常见的连接方式:

交叉联结(cross join)笛卡尔积(在实际业务中用的比较少,结果行数太多了)

表中的每一行都与另一张表中的每一行合并(最终行数时两张表中行数的乘积)

ff2b0550c3218fae44837c4a64254749.png

内联结(inner joint):查找出同时存在于两张表中的数据

在两张表中取出符合条件的行,交叉联结在一起

fb0d6522be3b54ff8dfdb13d7360375f.png

左联结

ab632eb8b223dd27ac225c3159d5aecf.png
多表联结时select行要注意

4f94f47901c13e8658a396b7b1dbe24b.png
去除两张表中重复的部分

右联结

9b0674294eaf986a98ba28aa99b860be.png

ce8f3548edaaec5c4a4f148a29fde5e8.png
去掉两个表的公共部分

全联结 full join(返回两张表中的所有行,有匹配时两个表进行合并,没有匹配时用空值填充)

my sql不支持全联结

各种联结的使用场景:除非特别说明需要生成固定行数的表单,或者保留某张表的全部内容,其他情况都用内联结

3.联结应用案例(用sql解决实际的业务问题)

e83dae785c19c806f0cc462dd6317864.png
查询所有学生的学号、姓名、选课数、总成绩

1c60a601ec210103331ccd49b47f4ea3.png
查询平均成绩大于85的所有学生、姓名、平均成绩

11da60d99921378b5147fdfcafdac8b7.png

b72ee412ba64550621c2dcc0f33a8359.png

4.case表达式(条件判断的函数,用来判断每一行是不是满足某个条件)

2dcb4da5012e1c2550eda9e3e8a658c7.png

09d67601e6338cc8feebb17aacf79056.png
查询出每门课程的及格人数和不及格人数

查询

case表达式的注意事项:

1.else子句可以默认不写,默认为null

2.end不能省略不写

dffad33c3a8de95e4a61dc324b8ad4db.png
使用分段来统计各科成绩人数,课程号和课程名称

5.SQL zoo 作业

a97eeaecfab9100626a81385fb91ad7c.png

9515c2afd8bedd8d70d39cdf9a8b9bfa.png

18b5b9218fd21f264ac6209826c43fee.png

ad22454c75acf796dc2cb0204e768c47.png

77b707184a9e751bde3506ad1bbca987.png

402afcfe73b689dc38444e4f54db5a6e.png

32b049c1c1f64e1b0187953ee62bacbd.png

4ef25b0137d16b4fa6ec0f2d2866ecf5.png

672fd29b7cc5d33c15b0b9bbc588fea2.png

057363385319b58e85ba4075c097dcde.png

4d25e3e196e48f14e5ba055e42f24e72.png

4c22640f2699bbbcb377d255313b68c1.png

32ed8a43a09ac756adaef7feab1b5c7e.png
因为需要查找出所有比赛的情况,所以也包括那些双方都没有进球的情况,使用 left join
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值