SQL---自連接(self join)


針對相同的表進行的連接被稱為“自連接”(self join)。

 

那么為什么要把相同的一張表連接起來呢?一開始還是挺難理解的。把它想象成連接兩張不同的表,這樣容易理解一些。事實上,自連接還是有很多用處的。

 

自連接的用途:

1,在同一張表內進行比較

例子:查找收入超過各自經理的員工的姓名

 Id | Name  | Salary | ManagerId 
----+-------+--------+-----------
 1  | Joe   | 70000  | 3         
 2  | Henry | 80000  | 4         
 3  | Sam   | 60000  | NULL      
 4  | Max   | 90000  | NULL 
SELECT e1.Name AS employee_name
FROM Employee AS e1, Employee AS e2
WHERE e1.ManagerId=e2.Id
AND e1.Salary>e2.Salary

例子:查找比昨天溫度高的所有日期的 Id

| Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
|       1 |       2015-01-01 |               10 |
|       2 |       2015-01-02 |               25 |
|       3 |       2015-01-03 |               20 |
|       4 |       2015-01-04 |               30 |
SELECT w1.Id
FROM weather w1
JOIN weather w2
ON DATEDIFF(w1.RecordDate,w2.RecordDate)=1
WHERE w1.Temperature>w2.Temperature

 

2,找出列的組合

例子:查找共用同一車站的所有公交路線

SELECT * FROM route R1, route R2
WHERE R1.stop=R2.stop;

 

3,查找部分內容重復的記錄

例子:查找價格相同但商品名稱不同的商品信息

SELECT DISTINCT P1.name, P1.price
FROM Products P1, Products P2
WHERE P1.price = P2.price
AND P1.name != P2.name;

例子:刪除 Person 表中所有重復的電子郵箱

| Id | Email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
DELETE p1 FROM Person p1, Person p2
WHERE p1.Email = p2.Email
AND p1.Id > p2.Id

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM