3.8 连接查询
连接是多表查询中的一个重要内容,它可以将两个或多个表根据逻辑关系进行关联,形成数据集合。连接可以在FROM或WHERE子句中指定,建议在FROM子句中指定,这样的语句更直观,可读性更好。
3.8.1 连接类型
连接分为三种类型:内部连接、外部连接和交叉连接。下面分别来看看。
1.内部连接
内部连接将筛选出符合连接操作中指定的所有关联条件的数据。例如:在Adventure-
Works示例数据库中,HumanResources.Employee表要与Person.Person表进行内连接操作,过滤出所有雇佣过的人的职位、姓名,那么代码如下所示:
SELECT e.JobTitle, p.FirstName, p.LastName FROM HumanResources.Employee AS e INNER JOIN Person.Person AS p ON p.BusinessEntityID = e.BusinessEntityID
2.外部连接
(1)左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN)
左连接,将列出连接关键字左边表中的所有数据,并且还会列出关键字右边表中可以查找到的数据,对于左表中无法关联出数据的行,将以NULL值来替代。如上例中提到的Employee表与Person表,可用下面的语句过滤出所有人的姓名,并列出所有被雇佣的人的职位信息:
SELECT p.FirstName, p.LastName, e.JobTitle FROM Person.Person AS p LEFT JOIN HumanResources.Employee AS e ON p.BusinessEntityID = e.BusinessEntityID
(2)右连接(RIGHT JOIN)或右外连接(RIGTH OUTER JOIN)
右连接与左连接刚好相反。右连接将列出右边表中的所有数据,左边表中未找到匹配行的数据将以NULL值替代。
(3)完整外部连接(FULL JOIN 或FULL OUTER JOIN)
完整外部连接将列出左边与右边表中的所有行。当某行在另一个表中找不到匹配行时,另一个表中的数据将以NULL值替代。
3.交叉连接
交叉连接,也就是笛卡儿积。它将列出左右两个表中所有的组合数据,并且不需要指定关联条件。应避免在查询中进行这样的操作,它所列出的结果集数量将是两个表数量的乘积。