/*
多表查询
*/
/*
等值连接
在连接条件中使用等号(=)运算符比较被连接列的值,其查询结果中列出被连接表中的所有列
*/
-- 示列查询雇员King所在部门的名称
select
e.last_name,d.department_name
from
employees e , departments d
where
e.dept_id=d.department_id and e.last_name='King';
/*
-------------------------------------------------------------------------------
*/
/*
非等值连接
条件为=则为等值连接,反之为非等值连接。
*/
-- 示列查询所有雇员的薪水级别
SELECT
e.last_name,
e.salary,
s.LEVEL
FROM
employees e,
sal_level s
WHERE
e.salary BETWEEN s.lowest_sal
AND s.highest_sal
/*
---------------------------------------------------------------------------------------
*/
/*
自连接
使用一个表连接它自身的操作
*/
-- 示列查询每个雇员的经理的名字以及雇员的名字
SELECT
e.last_name emp,
m.last_name manager
FROM
employees e,
employees m
WHERE
e.manager_id = m.employee_id;
/*
--------------------------------------------------------------------------------------
*/
/*
左外连接
LEFT JOIN(LEFT OUTER JOIN)关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
*/
-- 示列查询所有雇员的名字以及他们的部门名称,包含那些没有部门的雇员
SELECT
e.last_name,d.department_name
FROM
employees e
LEFT OUTER JOIN departments d ON e.dept_id = d.department_id;
/*
------------------------------------------------------------------------------------------
*/
/*
右外连接
RIGHT JOIN(RIGHT OUTER JOIN) 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
*/
-- 示列查询所有雇员的名字以及他们的部门名称,包含那些没有雇员的部门
SELECT
e.last_name,d.department_name
FROM
employees e
RIGHT OUTER JOIN departments d ON e.dept_id = d.department_id;
/*
-------------------------------------------------------------------------------------
*/
/*
全外连接
左表和右表都不做限制,所有的记录都显示,两表不足的地方用null填充
union:可以将两个查询结果集合并返回的行都是唯一的,如同对整个结果使用了distinct
union all:只是简单的将两个结果合并后就返回。如果返回的两个结果集中有重复的数据,
那么返回的结果就会包含重复的数据
注意:mysql中不支持 full outer join 连接,可以使用union来实现全外连接
语法:
select 投影列 from 表名 左外/右外 on 连接条件 union select 投影列 from 表名 左外/右外 on
*/
-- 示列查询所有雇员的名字以及他们的部门名称,包含那些没有雇员的部门以及没有部门的雇员
(
SELECT
e1.last_name,
d1.department_name
FROM
employees e1
LEFT OUTER JOIN departments d1 ON e1.dept_id = d1.department_id
)
UNION
(
SELECT
e.last_name,
d.department_name
FROM
employees e
RIGHT OUTER JOIN departments d ON e.dept_id = d.department_id
);
多表查询笔记
最新推荐文章于 2023-05-13 18:10:45 发布