SQL INNER JOIN
INNER JOIN
INNER JOIN
关键字选择在两个表中都有匹配值的记录。
让我们来看一个 产品 表的选择
ProductID | ProductName | CategoryID | Price |
---|---|---|---|
1 | Chais | 1 | 18 |
2 | Chang | 1 | 19 |
3 | Aniseed Syrup | 2 | 10 |
以及 类别 表的选择
CategoryID | CategoryName | Description |
---|---|---|
1 | Beverages | Soft drinks, coffees, teas, beers, and ales |
2 | Condiments | Sweet and savory sauces, relishes, spreads, and seasonings |
3 | Confections | Desserts, candies, and sweet breads |
我们将使用两个表中的 CategoryID
字段将产品表与类别表连接起来
示例
使用 INNER JOIN 关键字连接产品和类别
SELECT ProductID, ProductName, CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;
自己试试 »
注意: INNER JOIN
关键字仅返回两个表中都有匹配项的行。这意味着,如果您有一个没有 CategoryID 的产品,或者有一个 CategoryID 不在类别表中,那么该记录将不会在结果中返回。
语法
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
命名列
在 SQL 语句中指定列时,最好包括表名。
示例
指定表名
SELECT Products.ProductID, Products.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
时,解析器实际上会编写 INNER JOIN
。
示例
JOIN 与 INNER JOIN 相同
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Products
JOIN Categories ON Products.CategoryID = Categories.CategoryID;
自己试试 »
连接三个表
以下 SQL 语句选择所有包含客户和发货人信息的订单
以下是 发货人 表
ShipperID | ShipperName | Phone |
---|---|---|
1 | Speedy Express | (503) 555-9831 |
2 | United Package | (503) 555-3199 |
3 | Federal Shipping | (503) 555-9931 |
示例
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);
自己试试 »