内连接与外连接
课件均来源于b站尚硅谷,详细请移步b站
所有笔记链接
内连接:合并有同一列的多个表的行,结果集只包含表中相匹配的行
#下面就是MySQL92内连接:结果集就是相匹配的行
SELECT employee_id, department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id
#MySQL99的内连接,JOIN连接表,ON实现连接的关系
SELECT employee_id, department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id #连接关系
外连接:合并具有同一列的两个以上的表的行,结果集中除了相匹配的行之外,还查询到了左、右表中不匹配WHERE中条件的行
外连接分类:左外连接、右外连接、满外连接(左右都有)
实验中表的关系:
例题:
#SQL92的语法(MySQL不支持)
SELECT employee_id, department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+)
#SQL99的语法
#左外连接
SELECT last_name, department_name
FROM employees e LEFT OUTER JOIN departments d #OUTER 和 INNER都是可以省略的
ON e.department_id = d.department_id;
UNION的使用
使用UNION,顾名思义就是将集合联合起来,但是还是区分UNION和UNION ALL
其中UNION是对于两个集合取交集并且去除掉重复的记录
UNION ALL就是纯粹的取交集,不会去除掉重复的部分
UNION:
UNION ALL
7种SQL JOINS的实现
SELECT employee_id, department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id #连接关系
SELECT employee_id, department_name
FROM employees e LEFT OUTER JOIN departments d #OUTER 和 INNER都是可以省略的
ON e.department_id = d.department_id;
SELECT employee_id, department_name
FROM employees e RIGHT OUTER JOIN departments d #OUTER 和 INNER都是可以省略的
ON e.department_id = d.department_id;
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
SELECT employee_id, last_name, department_name
FROM employees e RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id IS NULL
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL #两表分开写,中间UNION ALL
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL