混搭 - LEFT 与 RIGHT 连接

SQL Server 入门

John MacKintosh

Instructor

使用 LEFT 与 RIGHT 连接的理由

  • 为什么需要 LEFTRIGHT 连接?
  • 有些表在另一张表中没有完全匹配:
    • 市场活动的客户订单历史
    • 产品清单与退货记录
    • 已入院但尚未出院的患者
SQL Server 入门

使用 LEFT 与 RIGHT 连接的理由

  • 为什么需要 LEFTRIGHT 连接?
  • 一张表可能在另一张表中没有完全匹配:
    • 市场活动的客户订单历史
    • 产品清单与退货记录
    • 仍在住院、尚未出院的患者
SQL Server 入门

入院表

+------------+----------+
| Patient_ID | Admitted | 
|------------+----------|
| 1          | 1        |
| 2          | 1        |
| 3          | 1        |
| 4          | 1        |
| 5          | 1        |
+------------+----------+

出院表

+------------+------------+
| Patient_ID | Discharged | 
|------------+------------|
| 1          | 1          |
| 3          | 1          |
| 4          | 1          |
+------------+------------+

INNER JOIN:

+------------+----------+------------|
| Patient_ID | Admitted | Discharged |
|------------+----------|------------|
| 1          | 1        | 1          |
| 3          | 1        | 1          |
| 4          | 1        | 1          |
+------------+----------+------------+

LEFT JOIN:

+------------+----------+------------|
| Patient_ID | Admitted | Discharged |
|------------+----------|------------|
| 1          | 1        | 1          |
| 2          | 1        | NULL       |
| 3          | 1        | 1          |
| 4          | 1        | 1          |
| 5          | 1        | NULL       |
+------------+----------+------------+
SQL Server 入门

LEFT JOIN 语法

SELECT 
  Admitted.Patient_ID, 
  Admitted, 
  Discharged 
FROM Admitted 
LEFT JOIN Discharged ON Discharged.Patient_ID = Admitted.Patient_ID;

SQL Server 入门
SELECT 
  Admitted.Patient_ID, 
  Admitted, 
  Discharged 
FROM Admitted 
LEFT JOIN Discharged ON Discharged.Patient_ID = Admitted.Patient_ID;
+------------+----------+------------|
| Patient_ID | Admitted | Discharged |
|------------+----------|------------|
| 1          | 1        | 1          |
| 2          | 1        | NULL       |
| 3          | 1        | 1          |
| 4          | 1        | 1          |
| 5          | 1        | NULL       |
+------------+----------+------------+
SQL Server 入门

RIGHT JOIN

SELECT 
  Admitted.Patient_ID, 
  Admitted, 
  Discharged 
FROM Discharged 
RIGHT JOIN Admitted ON Admitted.Patient_ID = Discharged.Patient_ID;

SQL Server 入门

RIGHT JOIN 结果

SELECT 
  Admitted.Patient_ID, 
  Admitted, 
  Discharged 
FROM Discharged 
RIGHT JOIN Admitted ON Admitted.Patient_ID = Discharged.Patient_ID;
+------------+----------+------------|
| Patient_ID | Admitted | Discharged |
|------------+----------|------------|
| 1          | 1        | 1          |
| 2          | 1        | NULL       |
| 3          | 1        | 1          |
| 4          | 1        | 1          |
| 5          | 1        | NULL       |
+------------+----------+------------+
SQL Server 入门

总结

  • INNER JOIN:仅返回匹配行
  • LEFT JOIN(或 RIGHT JOIN):主表全行,加上从表匹配行
  • NULL:无匹配时显示
  • LEFT JOINRIGHT JOIN 可互换
SQL Server 入门

SQL Server 入门

Ayo berlatih!

SQL Server 入门

Preparing Video For Download...