多表查询笔记

/*
多表查询
*/

/*
等值连接
在连接条件中使用等号(=)运算符比较被连接列的值,其查询结果中列出被连接表中的所有列
*/

-- 示列查询雇员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
	);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值