目录

SQL 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;
亲自试一试 »

SQL INNER JOIN

笔记:这个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;
亲自试一试 »

上面的示例无需指定表名即可运行,因为两个表中均不存在指定的列名。如果您尝试包含CategoryID在里面SELECT语句中,如果不指定表名,将会报错(因为CategoryID两个表中均存在)。


连接或内连接

JOININNER 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 语句选择包含客户和发货人信息的所有订单:

示例

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);
亲自试一试 »

通过练习测试一下

练习:

选择正确的JOIN子句从两个表中选择所有匹配的记录。

SELECT *
FROM Orders

ON Orders.CustomerID=
Customers.CustomerID;

开始练习