case when 子查询_多表查询

多表查询

目录

一、多表联结 2

1、表的加法(union) 2

2、表的联结(join) 3

1)、交叉联结——笛卡尔积 4

2)、内联结(inner join) 5

3)、左联结(left join) 5

4)、右联结(right join) 7

5)、全联结(full join) 10

3、联结应用案例 10

4、case表达式 12

二、SQLzoo练习 15

1.比赛信息表game 15

2.进球信息表goal 16

3.球队信息表eteam 16

5e2ea62211ebde5b9f1afc6f472d506b.png

一、多表联结

1、表的加法(union)

加法(union):不保留重复的行

如果想要保留表里重复的行,用union all。

Practice1:

f49bd90041f51569a1beb3a80945da9a.png

2、表的联结(join)

4b4ccca5ea269f3f490f2ae47fea4769.png

常用的联结:

交叉联结(cross join)

内联结(inner join)

左联结(left join)

右联结(right join)

全联结(full join)

f3d4018a9ab0c05ead99e1e9cb58a38a.png

如何使用:当实际业务中想要生成固定行数的表单,或者特别说明要哪张表单的数据时,使用左联结/右联结。其他情况都用内联结获得公共部分。

1)、交叉联结——笛卡尔积

db1867cdee8a614a691b441f31fa7cb9.png

3*2=6行数据

其他联结是在交叉联结的基础上加了过滤条件。

2)、内联结(inner join)

查找出同时存在两表中的数据。

50fec2cdfecfd8ef0255af90ccd42ee8.png

Practice1:

9e37ffcd0310c70835a54863ca9980b1.png

3)、左联结(left join)

将左侧的表作为主表,主表中的数据全部读取出来。

将两个表中取出的数据进行合并。——左边数据不动,右边的过来匹配。

3.1)左边数据(包括公共区域)

02cbe15d3a743edeca3141a5876ce6be.png

Practice:

2e3ff102b52e35f55a9f43dd7d625db1.png

3.2)左边数据(不包括公共区域)

cc1820ee7bb61d403c033b0cd1e3352e.png

Practice:

aae1e0389390b43f98470a7ca222b5b6.png

4)、右联结(right join)

将左侧的表作为主表,主表中的数据全部读取出来。

将两个表中取出的数据进行合并。——左边数据不动,右边的过来匹配。

4.1)右边数据(包括公共区域)

7d4960f88c6b100445f7a47acab5d8f1.png

a910f1cbdc5a17441a4ec7fbbbc990d8.png

4.2)右边数据(不包括公共区域)

fb665435cc2c9b4abece949d6afaad25.png

5aa3f7e3b5def6fc8f0e7c62620cf665.png

5、全联结(full join)

e5dba54b657018868fbcaaf02b6755cd.png

3、联结应用案例

Q1:查询所有学生的学号、姓名、选课数、总成绩

翻译:1)学号、姓名(学生表student)

选课数(每个学生的选课数:成绩表score,按学号分组,对课程号计数count)

总成绩(每个学生的总成绩:成绩表score,按学号分组,对成绩求和sum)

ca74bb5a564fa95ff7a638fcbc976722.png

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

翻译:1)学号,姓名(学生表student),平均成绩(score)

按学号分组,平均成绩:avg(成绩)

平均成绩>85——对查询结果进行过滤

8c14254ea1e91b6f4e74d2caf91f02fd.png

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

翻译:1)学号,姓名(学生表student)

课程号,课程名称(课程表course)

9c05d20a1d3dfe6704c05ddca228cf34.png

e6136e2c2370704660d9285f086ac33c.png

4、case表达式

使用case 表达式可以帮助解决复杂的查询问题。

case表达式的作用相当于进行条件判断的函数,用来判断每一行是不是满足某一条件。

8d54282f80074591a8acdab222f501ca.png

Q1:查询成绩是否及格

09a76cc7fa92681cf15c93432851c429.png

Q2:查询出 每门课程 的 及格人数 和 不及格人数

34585e7d826feb7660345d4ec8fdfb92.png

eb2d09e6e5b702a18faa883967ee160a.png

使用注意事项:

1、else子句可以不写,默认为空值;

2、end不能忽略不写;

3、有条件判断时用case 表达式

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

b0fd8121a7dae5431bf99d5e21a7bff5.png

注:只有当用多个列来分组时,这几个列的值全部相同才算一组。

二、SQLzoo练习

题目来自sqlzoo的子查询题目

网址:https://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial

这部分题目使用的是‘2012年欧洲足球锦标赛’数据库里的表。

1.比赛信息表game

id比赛编号,mdate比赛日期, stadium比赛地点, team1对战双方(球队编号1), team2对战双方(球队编号2)

59ff9463514fd0e707d5197ea9ccbf96.png

2.进球信息表goal

matchid比赛编号,teamid球队编号, player进球球员的姓名,gtime多长时间进的球(从开始比赛到进球多长时间,单位:分钟)

7da215add9a9804ed961825cf6c0ca51.png

比赛信息表game(id比赛编号)和进球信息表goal(matchid比赛编号)通过‘比赛编号’联结

3.球队信息表eteam

id球队编号(联结2) teamname 球队名称 coach教练

aa7c41528e1b68096bd69f6c91665798.png

进球信息表goal(teamid球队编号)球队信息表eteam(球队编号id)通过‘球队编号’联结

b97ddfff65190007d51585d3c656c894.png

45704029473eee4aed22da7ca29072c3.png

4cb86bafd03fc43dec8051b5506c2e62.png

fa66026f45607537708712dddc1dae90.png

f6b0f9eec621d9ce050836546098fb1b.png

6634ca122b6656aa1105ac555ee0bb33.png

02295d2ff794cdaf16793a859903adde.png

dc00d97f35404d3befb39517df7cc1c2.png

4bd51f08fa492cdaff63149e35438163.png

8931a23b836a64edacc15c6cd83c73e0.png

7bbc3b592469f450df634a3ec0b81dba.png

85fa6a3512cc19e6d1948c6d021b2043.png

a56426126b1cef28195fbc5021bb83cc.png

f27918488822b7fcb482fd727cd87216.png

fe6e735f95ab9fb14d32995a076f8f62.png

c19b5cda583d6cfd9a2c65ac85e19124.png

2e45034a6a8fcd832a62fdc5d84698b5.png

e0ef1902af268b676e9fe5ed4261fa41.png

da2dad3f79a382b61e65ee6d69232dda.png

f9acee4a7220bd56e26db5c704ba3bff.png

99100576fcade94d941da4126e6c9a64.png

f545f6906c11f714364fc91286537770.png

8e217d8e9154c0e289cf1a7601d68b94.png

28e1d8b097e141a56cb93937ec71e919.png

fcd10ef98f5ffd16c25ded4786c80dd9.png

96151aad5c439bccd710bc7f55fcdcd0.png

aa5e7efd332434f879b531235fd203d7.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值