一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情。
前言
上篇我们又学习了一部分多表查询。有兴趣的小伙伴可以阅读(# MySQL学习-多表查询(三))。
下面继续学习MySQL中的多表查询。
上一篇我们学习了外连接的一些概念,下面做个示例:
外连接
示例一
查询所有员工的姓名,部门名称。
注意这里是查询所有的员工,所以这里一定是外连接。
SELECT e.name, d.department_name
FROM employees e, departments d
WNERE e.'department_id' = d.'department_id'
运行上面的示例,可以查出结果,但是这是内连接,只包含匹配的行,不匹配的不在结果中,与要求的所有员工不相符。这里需要用到外连接,先看下外连接的相关标准。
SQL标准
SQL主要有两个主要的标准,分别是 SQL92 和 SQL99 。之前介绍过,92和99代表了标准提出的时间,SQL92 就是92年提出的标准规范。除了92 和99,还有其他的标准。
这么多标准,到底学习哪个呢?实际上最重要的 SQL 标准就是 SQL92 和 SQL99 。一般来说 SQL92 的形式更简单,但是写的 SQL 语句会比较长,可读性较差。而 SQL99 相比于 SQL92 来说,语法更加复杂,但可读性更强。我们从这两个标准发布的页数也能看出,SQL92 的标准有500页,而 SQL99 标准超过了1000页。实际上从 SQL99 之后,很少有人掌握所有内容,因为确实太多了,只需要掌握一些核心功能,满足日常工作的需求即可。
SQL92 和 SQL99 是经典的 SQL 标准,也分别叫做 SQL-2 和 SQL-3 标准。也正是这两个标准发布之后,SQL影响力越来越大,甚至超越了数据库领域。现如今SQL已经不仅仅是数据库邻域的主流语言,还是信息领域中信息处理的主流语言。在图形检索、图像检索以及语音检索中都能看到SQL语言的使用。
SQL92内连接
和示例一相同
SQL92外连接
使用"+"进行外连接。
- 左外连接,在右表补"+"
- 右外连接,在左表补"+"
示例一中是左外连接,"+"加在右表。示例一修改成:
SELECT e.name, d.department_name
FROM employees e, departments d
WNERE e.'department_id' = d.'department_id'(+)
运行查询语句,发现报错。我们需要注意了:
MySQl不支持SQL92语法中外连接的写法。但是Oracle支持以上写法。
SQL99
SQL99语法中使用 JOIN...ON 的方式实现多表的查询,这种方式也能解决外连接的问题。并且MySql是支持这种写法的。
SQL99多表查询
SQL99内连接
示例二
SELECT e.name, d.department_name
FROM employees e JOIN departments d
ON e.'department_id' = d.'department_id'
运行以上语句,可以查出结果。可以看出没用没有使用WHERE语句,使用的是 JOIN...ON。
如果是查询3张表呢,请看如下示例:
示例三
SELECT e.name, d.department_name, l.city
FROM employees e JOIN departments d
ON e.'department_id' = d.'department_id'
JOIN locations l
ON d.'location_id' = l.'location_id'
可以看出多一张表,在语句后再加一个 JOIN...ON。
今天先学习到这里,明天继续。