SQL Left Join
SQL LEFT JOIN 子句
Section titled “SQL LEFT JOIN 子句”SQL LEFT JOIN 子句
Section titled “SQL LEFT JOIN 子句”LEFT JOIN 子句(也写作 LEFT OUTER JOIN)用于根据两个表之间的相关列合并(combine)行。它返回左表(table1)中的所有行以及右表(table2)中匹配的行。
如果左表中的行没有匹配项,结果仍将包含该行,但右表中对应列的值将为 NULL。
SQL LEFT JOIN 语法
Section titled “SQL LEFT JOIN 语法”SELECT table1.column1, table1.column2, table2.column1, … FROM table1 LEFT JOIN table2 ON table1.common_column = table2.common_column;
在大多数 SQL 数据库系统(例如 MySQL、PostgreSQL、SQL Server、Oracle)中,LEFT OUTER JOIN 中的 OUTER 关键字是可选的,通常为了简洁而被省略。
从概念上讲,LEFT JOIN 的工作方式如下:
Section titled “从概念上讲,LEFT JOIN 的工作方式如下:”-
它从
table1(在LEFT JOIN之前指定的“左”表)的所有行开始。 -
对于
table1中的每一行,它尝试根据ON子句中指定的条件在table2(“右”表)中查找匹配的行。 -
如果在
table2中找到匹配的行,这些行的列将与table1中的行合并。 -
如果在
table2中未找到与table1中某行匹配的行,则结果仍将包含该table1中的行,但从table2中选择的列将包含NULL值。
示例数据库上下文
Section titled “示例数据库上下文”对于此示例,我们将使用两个概念表:
-
Customers:包含客户信息,例如CustomerID(主键)和CustomerName列。 -
Orders:包含订单信息,例如OrderID(主键)、CustomerID(引用Customers的外键)和OrderDate列。
我们希望列出所有客户以及他们可能下过的任何订单。
SQL LEFT JOIN 示例
Section titled “SQL LEFT JOIN 示例”以下 SQL 语句将选择所有客户并列出他们对应的订单。如果客户没有订单,他们仍然会被列出,但与订单相关的字段将为 NULL。
SELECT C.CustomerName, O.OrderID, O.OrderDateFROM Customers CLEFT JOIN Orders O ON C.CustomerID = O.CustomerIDORDER BY C.CustomerName, O.OrderDate;结果的关键点:
-
Customers表中的所有客户至少会被包含一次。 -
如果客户下过多个订单,他们将在结果中出现多次,每个订单出现一次。
-
如果客户没有下过任何订单,其
CustomerName将被列出,但该行的O.OrderID和O.OrderDate将为NULL。
实际应用场景:
Section titled “实际应用场景:”LEFT JOIN 在需要检索某个主要实体(例如所有客户、所有产品)的所有记录,然后选择性地显示另一表中的相关信息时非常有用,即使该相关信息并非存在于主要实体中的每条记录上。
例如,查找从未下过订单的客户:
SELECT C.CustomerNameFROM Customers CLEFT JOIN Orders O ON C.CustomerID = O.CustomerIDWHERE O.OrderID IS NULL;