联表查询
远离那些贬低你理想的人。狭隘的人经常如此,伟大的人会让你感觉自己也可以变好。
——马克·吐温
数据库有以下几种联表查询类型:
- 内连接(INNER JOIN)
- 左外连接(LEFT JOIN)
- 右外连接(RIGHT JOIN)
- 全外连接(FULL JOIN)
- 自连接(SELF JOIN)
内连接(INNER JOIN)
返回两个表中满足连接条件的记录,不满足条件的记录会被过滤掉
-- 查询所有订单及其对应的客户信息
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
左外连接(LEFT JOIN)
返回左表(表1)的所有记录,即使右表(表2)中没有匹配的记录。如果右表没有匹配项,则结果为NULL。
-- 查询所有客户及其订单(包括没有订单的客户)
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
右外连接(RIGHT JOIN)
返回右表(表2)的所有记录,即使左表(表1)中没有匹配的记录。如果左表没有匹配项,则结果为NULL。
-- 查询所有订单及其客户信息(包括没有客户信息的订单)
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
全外连接(FULL JOIN)
返回左右两表的所有记录,当某一边没有匹配时,另一边显示为NULL。
-- 查询所有客户和所有订单的完整信息
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
自连接(SELF JOIN)
表与自身连接,通常用于处理层次结构数据
-- 查询员工及其经理(经理也是员工)
SELECT e.EmployeeName AS Employee, m.EmployeeName AS Manager
FROM Employees e
LEFT JOIN Employees m ON e.ManagerID = m.EmployeeID;

浙公网安备 33010602011771号