开发者

SQL JOIN 子句合并多个表中相关行全面指南

开发者 https://www.devze.com 2023-11-28 08:57 出处:网络 作者: 小万哥
目录SQL JOIN示例不同类型的SQL JOINSQL INNER JOINSQL INNER JOIN语法指定列名JOIN或INNER JOIN示例连接三个表SQL LEFT JOIN关键字LEFT JOIN语法SQL LEFT JOIN演示数据库示例SQL JOIN
目录
  • SQL JOIN
    • 示例
    • 不同类型的SQL JOIN
  • SQL INNER JOIN
    • SQL INNER JOIN
      • 语法
      • 指定列名
    • JOIN或INNER JOIN
      • 示例
      • 连接三个表
    • SQL LEFT JOIN关键字
      • LEFT JOIN语法
    • SQL LEFT JOIN
      • 演示数据库
      • 示例

    SQL JOIN

    JOIN子句用于基于它们之间的相关列合并来自两个或更多表的行。

    让我们看一下“Orders”表的一部分选择:

    OrderIDCustomerIDOrderDate
    1030821996-09-18
    10309371996-09-19
    10310771996-09-20

    然后,看一下“Customers”表的一部分选择:

    CustomerIDCustomerNameContactNameCountry
    1Alfreds FutterkisteMaria AndersGermany
    2Ana Trujillo EmparedaDOS y heladosAna TrujilloMexico
    3Antonio Moreno TaqueríaAntonio MorenoMexico

    注意,“Orders”表中的“CustomerID”列是指“Customers”表中的“CustomerID”。上述两个表之间的关系是“CustomerID”列。

    然后,我们可以创建以下SQL语句(包含INNER JOIN),选择在两个表中具有匹配值的记录:

    示例

    SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
    FROM Orders
    INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

    它将产生类似于以下的结果:

    OrderIDCustomerNameOrderDate
    10308Ana Trujillo Emparedados y helados9/18/1996
    10365Antonio Moreno Taquería11/27/1996
    10383Around the Horn12/16/1996
    10355Around the Horn11/15/1996
    10278Berglunds snabbköp8/12/1996

    不同类型的SQL JOIN

    以下是SQL中不同类型的JOIN:

    • (INNER) JOIN:返回在两个表中具有匹配值的记录
    • LEFT (OUTER) JOIN:返回左表中的所有记录以及右表中匹配的记录
    • RIGHT (OUTER) JOIN:返回右表中的所有记录以及左表中匹配的记录
    • FULL (OUTER) JOIN:在左表或右表中有匹配时返回所有记录

    这些JOIN类型可以根据您的需求选择,以确保检索到所需的数据。希望这能帮助你理解SQL中JOIN的概念。如果有其他问题,请随时告诉我。

    SQL INNER JOIN

    INNER JOIN关键字选择在两个表中具有匹配值的记录。

    让我们看一下Products表的一部分选择:

    ProductIDProductNameCategoryIDPrice
    1Chais118
    2Chang119
    3Aniseed Syrup210

    以及Categories表的一部分选择:

    CategoryIDCategoryNameDescription
    1BeveragesSoft drinks, coffees, teas, beers, and ales
    2CondimentsSweet and savory sauces, relishes, spreads, and seasonings
    3ConfectionsDesserts, candies, and sweet breads

    我们将使用两个表的CategoryID字段连接Products表和Categories表:

    使用INNER JOIN关键字连接ProductsCategories

    SELECT ProductID, ProductName, CategoryName
    FROM Products
    INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;

    SQL INNER JOIN

    注意:INNER JOIN关键字仅返回两个表中具有匹配值的行。这意味着如果您有一个没有CategoryID的产品,或者CategoryIDCategories表中不存在的记录,该记录将不会在结果中返回。

    语法

    SELECT column_name(s)
    FROM table1
    INNER JOIN table2
    ON table1.column_name = table2.column_name;

    指定列名

    在SQL语句中指定列时,最好在列名前包含表名。

    指定表名:

    SELECT Products.ProductID, Producjavascriptts.ProductName, Categories.CategoryName
    FROM Products
    INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;

    上面的示例在不指定表名的情况下也可以工作,因为指定的列名在两个表中都不存在。如果尝试在SELECT语句中包含CategoryID,则如果不指定表名,将会出现错误(因为CategoryID在两个表中都存在)。

    JOIN或INNER JOIN

    JOIN和INNER JOIN将返回相同的结果。

    INNER是JOIN的默认连接类型,因此当您写JOIN时,解析器实际上会写IphpNNER JOIN。

    示例

    JOIN与INNER JOIN相同:

    SELECT Products.ProductID, Products.ProductName编程客栈, Categories.CategoryName
    FROM Products
    JOIN Categories ON Products.CategoryID = Categories.CategoryID;

    连接三个表

    以下SQL语句选择具有客户和承运商信息的所有订单:

    SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
    FROM ((Orders
    INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
    INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);

    INNER JOIN用于将多个表中的数据连接在一起,以便根据关联列的匹配情况检索相应的数据。希望这帮助你理解INNER JOIN的使用方式。如果有其他问题,请随时提出。

    SQL LEFT JOIN关键字

    SQL LEFT JOIN关键字返回左表(table1)中的所有记录以及右表(table2)中的匹配记录。如果没有匹配,则右侧的结果为0条记录。

    LEFT JOIN语法

    SELECT column_name(s)
    FROM table1
    LEFT JOIN table2
    ON table1.column_name = table2.column_name;

    注意:在某些数据库中,LEFT JOIN被称为LEFT OUTER JOIN。

    SQL LEFT JOIN

    演示数据库

    在本教程中,我们将使用著名的Njavascriptorthwind示例数据库。

    以下是“Customers”表的部分选择:

    CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
    1Alfre编程ds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
    2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
    3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico

    以及“Orders”表的部分选择:

    OrderIDCustomerIDEmployeeIDOrderDateShipperID
    10308271996-09-183
    103093731996-09-191
    103107781996-09-202

    示例

    假设我们想要检索所有客户以及他们的订单(如果有的话)。我们可以使用LEFT JOIN将两个表连接在一起,以便即使某些客户没有订单,它们仍然会在结果中显示。

    SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderID, Orders.OrderDate
    FROM Customers
    LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

    在这个例子中,LEFT JOIN确保了所有的客户都会出现在结果中,而与之关联的订单信息(如果存在的话)也会被检索出来。如果某个客户没有订单,相应的OrderID和OrderDate列将显示为NULL。

    希望这能帮助你理解SQL中LEFT JOIN的使用方式。

    以上就是SQL JOIN 子句合并多个表中相关行全面指南的详细内容,更多关于SQL JOIN 子句多表合并的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号