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