MySQL学习-多表查询(五)

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第17天,点击查看活动详情

前言

上篇我们又学习了一部分多表查询。有兴趣的小伙伴可以阅读(# MySQL学习-多表查询(四))。
下面继续学习MySQL中的多表查询。

SQL99内连接

示例一

查询员工的姓名,部门名称。

上一篇我们已经写过一个内连接的示例,下面是另外一种写法:

SELECT e.name, d.department_name
FROM employees e INNER JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

使用以上语句也可以查出正确结果,可以看出语法多了一个'INNER',代表内连接,只不过第一种写法,我们把'INNER'省略掉了。下面对应的,我们看外连接的写法。

SQL99左外连接

示例二

查询所有员工的姓名,部门名称。

SELECT e.name, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

这样就可以查出正确的结果,通过添加'LEFT OUTER'左外连接,进行左外连接的查询。
下面再看另外一种写法:

SELECT e.name, d.department_name
FROM employees e LEFT JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

也可以查出正确的结果,这里把'OUTER'省略掉了,也是可以的。

SQL99右外连接

示例三

SELECT e.name, d.department_name
FROM employees e RIGHT JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

这里可以使用'RIGHT JOIN'进行右外连接的查询。

SQL99满外连接

示例四

SELECT e.name, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON e.'department_id' = d.'department_id'
复制代码

我们使用语法中'FULL OUTER JOIN'进行查询,但是发现报错了,是因为MySQL不支持'FULL OUTER JOIN'语法。MySQL如何能做满外连接的查询呢?我们需要先学习'UNION'的关键字的使用。

UNION的使用

合并查询结果

利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同,并且相互对应。各个SELECT语句之间使用 'UNION' 或 'UNION ALL' 关键字分隔。

语法格式:

SELECT name FROM employees
UNION [ALL]
SELECT department_id FROM departments
复制代码

UNION操作符

UNION操作符返回两个查询的结果集的并集,去除重复记录。

UNION ALL操作符

UNION ALL操作符返回两个查询的结果集的并集,不去重。

实际使用时,符合满外连接的情况的是去重的结果,也就是UNION操作符。但是如果UNION操作符和UNION ALL操作符都符合情况,那我们最好使用UNION ALL操作符,因为UNION操作符有一步去重操作,会影响查询的效率。

今天先学习到这里,明天继续。

猜你喜欢

转载自juejin.im/post/7087531620021829640