SQL INNER JOIN

INNER JOIN

INNER JOIN キーワードは、両方のテーブルで一致する値を持つレコードを選択します。

Products テーブルの一部を見てみましょう:

ProductID ProductName CategoryID Price
1 Chais 1 18
2 Chang 1 19
3 Aniseed Syrup 2 10

そして、Categories テーブルの一部を見てみましょう:

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

Products テーブルと Categories テーブルを、両方のテーブルの CategoryID フィールドを使用して結合します:

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

INNER JOIN キーワードは、両方のテーブルで一致するレコードのみを返します。つまり、CategoryID がない製品、または Categories テーブルに存在しない CategoryID を持つ製品は結果に含まれません。

Syntax

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 は同じ結果を返します。

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

3 つのテーブルを JOIN する

以下の SQL 文は、顧客と配送業者の情報を持つすべての注文を選択します:

以下が Shippers テーブルです:

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);