SQL:多表查询
参考网址: https://zhuanlan.zhihu.com/p/91973413
此次主要介绍多表查询中的三部分:合并查询结果、连接查询(交叉连接、内连接、左连接、右连接、全连接)和CASE表达式。
1、合并查询结果
· 含义:
利用UNION关键字可以给出多条SELECT语句,并将结果组合成单个结果集。
· 用法:
自动删除重复行:SELECT语句1 UNION SELECT语句2;
保留重复行(不自动排序):SELECT语句1 UNION ALL SELECT语句2;
· 注意事项
① 合并时,两个表对应的列数和数据类型必须相同,如果列数不同,需要补足其他字符代替,如使用'或null。
② UNION ALL关键字语句执行时所需要的资源少,如无需删重,建议选择使用。

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的标准规范,能够确保不忘记连接条件。

4、左连接查询
· 含义:
左连接(LEFT JOIN) 以左表为基准,将右表中的信息匹配进去,如果右表无对应值,则以空值显示。
· 用法:
SELECT 字段1,字段2,字段3,…… FROM 表名1 LEFT JOIN 表名2 ON 关联条件;
若去掉左表有而右表为空的部分,在SELECT语句末尾加上"WHERE 表2.关联字段=NULL"

5、右连接查询
可类比左连接查询。
· 含义:
右连接(RIGHT JOIN) 以右表为基准,将左表中的信息匹配进去,如果左表无对应值,则以空值显示。
· 用法:
SELECT 字段1,字段2,字段3,…… FROM 表名1 RIGHT JOIN 表名2 ON 关联条件;
若去掉右表有而左表为空的部分,在SELECT语句末尾加上"WHERE 表2.关联字段=NULL"
6、全连接查询
(由于MySQL不支持,仅作了解)
· 含义:
全连接(FULL JOIN)将左表和右表合并。无论哪张表的匹配字段缺少对应值,会以空值填充。
连接关系总结:

连接查询的应用案例:
- 查询所有学生的学号、姓名、选课数目和总成绩

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

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

7、Case表达式
用于解决复杂的查询问题,相当于进行条件判断的函数。
· 用法:
CASE WHEN <判断表达式> THEN <表达式>
WHEN <判断表达式> THEN <表达式>
WHEN <判断表达式> THEN <表达式>
…
ELSE <表达式>
END;
ELSE可以不写,默认为空值,但就完整性而言建议写上。
应用案例:
- 查询出每门课程的及格人数和不及格人数。

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

习题:













习题总结:
在习题中的第8、11、13题遇到问题。
第8题:首先没读懂题目,“被进球”没理好思路。其次是没想过查重的问题。
第11和13题:GROUP BY的联合分组使用掌握不好。
SQL:多表查询的更多相关文章
- sql多表查询之一:Where 和 On的秘密
原文 sql多表查询之一:Where 和 On的秘密 对于还在SQL初级阶段的朋友来说,sql多表查询问题是一个比较有趣也容易出错的技术.什么时候会用到sql多表查询呢?是在两张或两张以上表单中通过某 ...
- oracle SQL多表查询
SQL多表查询 1.集合理论 1.1 什么是集合 具有某种特定性质的事物的总体. 集合的特性:无序性.互异性.确定性. 一个集合可以小到从一个表中取出一行中的一列. 1 ro ...
- SQL联表查询
数据库中最最常用的语法----select.简单的select语法很直白: select column from table where expression: 从((from)存储数据的地方(tab ...
- Sql Server的艺术(四) SQL多表查询
表的基本连接 SQL的一个重要特性就是能通过JOIN关键词,从多个交叉表中查询.分析数据. 连接表的目的 在关系数据库中,数据表设计的一个重要原则就是要避免冗余性. 减少了冗余信息,节省了数据库存储空 ...
- sql多表查询(单表查询略过)
表library: 表borrow: 表reader: 1.等值连接:(常用) 原理:将多张表组合成一个逻辑大表,即字段相加记录相乘(笛卡尔积). 语法:select * from 表A,表B whe ...
- SQL多表查询总结
前言 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要.只有真正了解它们之间的区别,才能正确使用. 一.Union UNION 操作符用于合并两个或多个 SELE ...
- sql 多表查询结果验证
1.笛卡尔积 定义: 设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成的有序对,所有这样的有序对组成的集合 ,叫做A与B的笛卡尔积,记作AxB. 上面有一个很关键的词为“有序”,因此,我们 ...
- 【数据库】sql连表查询
SQL总结 连表查询 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两 ...
- Server Sql 多表查询、子查询和分页
一.多表查询:根据特定的连接条件从不同的表中获取所需的数据 多表查询语法: SELECT table1.column, table2.column FROM table1, table2 WHERE ...
- sql 两表查询后 更新某表中部分字段
这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...
随机推荐
- 章节1-Grafana Dashboard的简单应用(2)
目录 使用Grafana创建可视化Dashboard 1. Add data sources - Prometheus 2. 导入 Dashboard 模板 2.1 Node Exporter for ...
- Django基础-004 上下文管理器&中间件&前端公共代码复用
一.上下文管理器 在views中重复使用的代码,可以在上下文管理器中实现 上下文管理器的处理流程如下: 1.先走完views里面的代码,将结果返回给前端 2.然后再将上下文的结果返回给前端 3.上下文 ...
- 基于Ryu的流量采集代码实现
1 from __future__ import division 2 import time 3 import math 4 import xlwt 5 from ryu.controller im ...
- Shell循环语句for、while、until
Shell循环语句for.while.until 一.条件测试 二.删除字符 三.循环语句 示例1 ...
- java编译通过,运行却提示找不到或无法加载主类
问题: HelloWorld.java 1 package myP101; 2 3 public class HelloWorld { 4 public static void main(String ...
- 【LeetCode】151. 翻转字符串里的单词(剑指offer 58-I)
151. 翻转字符串里的单词 知识点:字符串:双指针 题目描述 给你一个字符串 s ,逐个翻转字符串中的所有 单词 . 单词 是由非空格字符组成的字符串.s 中使用至少一个空格将字符串中的 单词 分隔 ...
- 【LeetCode】344. 反转字符串
344. 反转字符串 知识点:字符串; 双指针 题目描述 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改 ...
- Linux从入门到进阶全集——【第十四集:Shell编程-export命令】
参考: https://www.cnblogs.com/guojun-junguo/p/9855356.html 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量 ...
- 7.29考试总结(NOIP模拟27)[牛半仙的妹子图·Tree·序列]
前言 从思路上来讲是比较成功的,从分数上就比较令人失望了. 考场上是想到了前两个题的正解思路,其实最后一个题是半个原题,只可惜是我看不懂题... 这波呀,这波又是 语文素养限制OI水平.. 改题的时候 ...
- mysql为什么用b+树做索引
关键字就是key的意思 一.B-Tree的性质 1.定义任意非叶子结点最多只有M个儿子,且M>2: 2.根结点的儿子数为[2, M]: 3.除根结点以外的非叶子结点的儿子数为[M/2, M]: ...