access多表查询sql语句_SQL:多表查询

此次主要介绍多表查询中的三部分:合并查询结果、连接查询(交叉连接、内连接、左连接、右连接、全连接)和CASE表达式。

1、合并查询结果

· 含义:

利用UNION关键字可以给出多条SELECT语句,并将结果组合成单个结果集。

· 用法:

自动删除重复行:SELECT语句1 UNION SELECT语句2;
保留重复行(不自动排序):SELECT语句1 UNION ALL SELECT语句2;

· 注意事项

① 合并时,两个表对应的列数和数据类型必须相同,如果列数不同,需要补足其他字符代替,如使用'或null。

② UNION ALL关键字语句执行时所需要的资源少,如无需删重,建议选择使用。

b8c8b42f5c468dfb18c312dbb6205a36.png

2、交叉连接

· 含义:

交叉连接(CROSS JOIN)又可称为笛卡尔积,将左表中每一行与右表中每一行分别连接形成新记录。实际业务中运用较少,需要大量运算成本,但它是其他连接的基础。

3、内连接查询

· 含义:

内连接(INNER JOIN) 使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新记录。简而言之,查找出同时存在在不同表中的关联数据形成结果表。

· 用法:

SELECT 字段1,字段2,字段3,…… FROM 表名1 INNER JOIN 表名2 ON 关联条件;
等同于
SELECT 字段1,字段2,字段3,…… FROM 表名1,表名2 WHERE 关联条件;

· 注意事项

① 如果某字段在多表中都有,则以"表名.列名"限定;

② 与INNER JOIN组合使用ON子句,而不是WHERE。ON和WHERE后面的指定条件相同, WHERE子句定义条件更简单明了,但某些时候会影响查询性能,而INNER JOIN语法是ANSI SQL的标准规范,能够确保不忘记连接条件。

0d8a3caee755aff78370b28db900ea9b.png

4、左连接查询

· 含义:

左连接(LEFT JOIN) 以左表为基准,将右表中的信息匹配进去,如果右表无对应值,则以空值显示。

· 用法:

SELECT 字段1,字段2,字段3,…… FROM 表名1 LEFT JOIN 表名2 ON 关联条件;

若去掉左表有而右表为空的部分,在SELECT语句末尾加上"WHERE 表2.关联字段=NULL"

614d8c04fa2cadde6d8fc9ce90c9bbea.png

5、右连接查询

可类比左连接查询。

· 含义:

右连接(RIGHT JOIN) 以右表为基准,将左表中的信息匹配进去,如果左表无对应值,则以空值显示。

· 用法:

SELECT 字段1,字段2,字段3,…… FROM 表名1 RIGHT JOIN 表名2 ON 关联条件;

若去掉右表有而左表为空的部分,在SELECT语句末尾加上"WHERE 表2.关联字段=NULL"

6、全连接查询

(由于MySQL不支持,仅作了解)

· 含义:

全连接(FULL JOIN)将左表和右表合并。无论哪张表的匹配字段缺少对应值,会以空值填充。

连接关系总结:

ce6ad82c37e599bdfb6f5a2d4b986bda.png

连接查询的应用案例:

  1. 查询所有学生的学号、姓名、选课数目和总成绩

23c385518158ea015202cecd4f43cc3c.png

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

6b46f5e399b6cd974d0e33c415b91307.png

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

da135220c9c7206194ec2c1d2116421c.png

7、Case表达式

用于解决复杂的查询问题,相当于进行条件判断的函数。

· 用法:

CASE WHEN <判断表达式> THEN <表达式>
     WHEN <判断表达式> THEN <表达式>
     WHEN <判断表达式> THEN <表达式>
     …
     ELSE <表达式>
END;

ELSE可以不写,默认为空值,但就完整性而言建议写上。

应用案例:

  1. 查询出每门课程的及格人数和不及格人数。

7686555dce7a0d359184437e653d8025.png

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

67cd4251837aafe17b2d85be8a7856fd.png

习题:

c2e68008c118c6230eafe4306190b81e.png

3e61fedff582538f8e33cc84dc812eac.png

5efd39c12a916c2bb2b06c7c4f852b8a.png

dcd828f2b5e70975ef40335ff707cefd.png

24fa471baf7db69553e826d3f3614fc0.png

432b015ffac501f80c3b0b3b82b00943.png

6ea64e0724f44753ec0794bfcd6ab600.png

b8612e79cc8b94e3df917534959fc270.png

4fcd07fbcc50874a4340c3dd7e56f726.png

97eba266da87e775c8e978620505fd7a.png

6608b9abe7fbfc7dad8d327c7c670a9d.png

13c45add358df9c0d6a8533fe6648b4b.png

2385b93f8ba875aec6b6f81f16d81c50.png

习题总结:

在习题中的第8、11、13题遇到问题。

第8题:首先没读懂题目,“被进球”没理好思路。其次是没想过查重的问题。

第11和13题:GROUP BY的联合分组使用掌握不好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值