> 文章列表 > sql 左关联

sql 左关联

sql 左关联

.sql 左关联介绍

SQL 左关联,也称为左外部连接,可返回左表中的所有行和右表中的匹配行。左表中未匹配的行也将被返回,但右表中未匹配的行将不被返回。在 SQL 的 JOIN 子句中,左关联是最常用的类型之一。

左关联语法

左关联语法如下所示:
SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name;
左表是 table_name1,右表是 table_name2。

举个例子

假设我们有两个表,一个是 orders 表,另一个是 customers 表。
orders 表:
| OrderID | CustomerID | OrderDate |
|--------|------------|-----------|
| 1 | 4 | 2020-01-03|
| 2 | 3 | 2020-01-05|
| 3 | 3 | 2020-02-08|
| 4 | 5 | 2020-03-01|
customers 表:
| CustomerID | CustomerName | ContactName | Country |
|------------|--------------|-------------|----------|
| 1 | Alfreds | Maria | Germany |
| 2 | Ana Trujillo | Ana | Mexico |
| 3 | Antonio | Antonio | Mexico |
| 4 | Around the Horn | Thomas | UK |
如果我们希望列出 order 表中所有的订单以及这些订单所属的 customer 名称和国家,此时左关联可以帮助我们实现。
如下 SQL 语句:
SELECT orders.OrderID, customers.CustomerName, customers.Country FROM orders LEFT JOIN customers ON orders.CustomerID = customers.CustomerID;
其返回结果如下:
| OrderID | CustomerName | Country |
|---------|-----------|-----------|
| 1 | Around the Horn | UK |
| 2 | Antonio | Mexico |
| 3 | Antonio | Mexico |
| 4 | null | null |
可以看到,由于 orders 表中没有匹配到 CustomerID 为 5 的记录,因此在左关联的结果中 customer 的名称和国家都是 null。

左关联与内连接的区别

与 SQL 的 INNER JOIN 不同的是,LEFT JOIN 返回两个表中的所有数据,包括那些未能匹配的记录。
而 INNER JOIN 则只返回两个表中完全匹配的数据。如果某个表中没有匹配项,则该表的数据将不会被返回。

总结

左关联是 SQL 中最常见的连接类型之一。它可以帮助我们在两个表之间建立关联关系,并返回两个表中所有的数据。需要注意的是,如果左表中某个记录在右表中没有匹配到,则在左关联结果中,以该记录为基础的查询结果将会使用 null 填充。