<
学习笔记 sql数据库 多表查询
>
上一篇

学习笔记 sql数据库 mybatis
下一篇

学习笔记 sql数据库 事务

多表查询

select
	列名列表
from
	表名列表
where
	....

多表查询的分类


内连接查询

隐式内连接:使用where条件消除无用数据

// 语法
SELECT * FROM emp, dept WHERE emp.dept_id = dept.id;

显式内连接

// 语法
select 字段列表 from 表1 [inner] join 表2 on 条件;

步骤

  1. 从哪些表中查询数据
  2. 条件是什么
  3. 查询哪些字段

外链接查询

左外连接

// 语法
select 字段列表 from 表1 left [outer] join 表2 on 条件;

查询的是左表所有数据以及其交集部分

例子

-- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称
SELECT t1.*, t2.name FROM emp t1 LEFT JOIN dept t2 ON t1.dept_id = t2.id;

右外连接

// 语法
select 字段列表 from 表1 right [outer] join 表2 on 条件;

查询的是右表所有数据以及其交集部分

例子

SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.dept_id = t2.id;

左右互换位置

子查询

概念:查询中嵌套查询,称嵌套查询为子查询

SELECT * FROM emp WHERE emp.salary = (SELECT MAX(salary) FROM emp);

子查询不同情况


多表查询可以使用同一个表,多个别名

例如:
查询所有员工的姓名及其直接上级的姓名, 没有领导的员工也需要查询

/*
分析:
1.姓名 emp, 直接上级的姓名 emp
	emp 表的 id 和 mgr 是自关联
2.条件 emp.id = emp.mgr
3.查询左表的所有数据,和 交集数据
	使用左外连接查询
*/

SELECT 
	t1.ename,
	t1.mgr,
	t2.`id`,
	t2.`ename`
FROM emp t1
LEFT JOIN emp t2
ON t1.`mgr` = t2.`id`;
Top
Foot