[学习笔记] MySQL数据库基础之多表查询(二)
多仔ヾ 发布于 2021-11-07 •
851 阅读
首页
·
随笔
·
生活
·
学习
·
搜索
·
·
时光大概如你所说,活在当下,看见远方。 - @多仔ヾ
##### 自连接 1、自连接:将一张表连接查询多次,可以是内连接查询,也可以是外连接查询。 ```sql SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ...; ``` 2、自连接的实现示例: (1)查询员工及其所属领导的名字: ```sql SELECT a.name, b.name FROM emp AS a, emp AS b WHERE a.managerid = b.id; ``` (2)查询所有员工及其领导的名字,如果员工没有领导,也需要查询出来。 ```sql SELECT a.name AS '员工', b.name AS '领导' FROM emp AS a LEFT JOIN emp AS b ON a.managerid = b.id; ``` ----- ##### 联合查询 1、联合查询:把多次查询的结果合并起来,形成一个新的查询结果集。 ```sql SELECT 字段列表 FROM 表A ... UNION [ ALL ] SELECT 字段列表 FROM 表B ....; ``` (1)对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。 (2)UNION ALL会将全部的数据直接合并在一起,UNION会对合并之后的数据去重。 2、联合查询的实现示例: (1)查询所有薪资低于5000的员工和年龄大于50岁的员工,并去掉重复数据。 ```sql SELECT * FROM emp WHERE salary < 5000 UNION SELECT * FROM emp WHERE age > 50; ``` ----- ##### 子查询 1、子查询:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个。 ```sql SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 ); ``` 2、标量子查询: (1)标量子查询:子查询返回的结果是单个值,如数字、字符串、日期等。 (2)常用操作符:=、<、> 、=<、<= (3)使用示例:查询"销售部"的所有员工信息。 ```sql # 查询"销售部"部门ID SELECT id FROM dept WHERE name = '销售部'; # 根据"销售部"部门ID查询员工信息 SELECT * FROM emp WHERE dept_id = (SELECT id FROM dept WHERE name = '销售部'); ``` 3、 列子查询: (1) 列子查询:子查询返回的结果是一列,可以是多行。 (2)常用操作符: | 操作符 | 描述 | | ------ | -------------------------------------- | | IN | 在指定的集合范围之内,多选一 | | NOT IN | 不在指定的集合范围之内 | | ANY | 子查询返回列表中,有任意一个满足即可 | | SOME | 与ANY等同,使用SOME的地方都可以使用ANY | | ALL | 子查询返回列表的所有值都必须满足 | (3)使用示例: 查询"销售部"和"市场部"的所有员工信息。 ```sql # 查询"销售部"和"市场部"的部门ID SELECT id FROM dept WHERE name = '销售部' or name = '市场部'; # 根据部门ID查询员工信息 SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE name = '销售部' OR name = '市场部'); ``` 4、 行子查询: (1)行子查询:子查询返回的结果是一行,可以是多列。 (2)常用操作符:=、<>、IN、NOT IN (3)使用示例:查询与 "张无忌" 的薪资及直属领导相同的员工信息。 ```sql # 查询"张无忌"的薪资及直属领导 SELECT salary, managerid FROM emp WHERE name = '张无忌'; # 查询"张无忌"的薪资及直属领导相同的员工信息; SELECT * FROM emp WHERE (salary,managerid) = (SELECT salary, managerid FROM emp WHERE name = '张无忌'); ``` 5、表子查询: (1)表子查询:子查询返回的结果是多行多列。 (2)常用操作符:IN (3)使用示例:查询与"鹿杖客"、"宋远桥"的职位和薪资相同的员工信息。 ```sql # 查询"鹿杖客"、"宋远桥"的职位和薪资 SELECT job, salary FROM emp WHERE name = '鹿杖客' OR name = '宋远桥'; # 查询与"鹿杖客"、"宋远桥"的职位和薪资相同的员工信息 SELECT * FROM emp WHERE (job,salary) IN ( SELECT job, salary FROM emp WHERE name = '鹿杖客' OR name = '宋远桥' ); ```
如无特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:时光话 - https://l5v.cn/archives/346/
上一篇
[学习笔记] MySQL数据库基础之多表查询(一)
下一篇
[学习笔记] MySQL数据库基础之事务
关于
·
归档
·
邻居
·
搜索
·
网站地图
© 时光话 /
闽ICP备17011403号