MySQL INNER JOIN
1. MySQL INNER JOIN の概要
INNER JOIN 句は、両方のテーブルで一致する値(matching values)を持つ行のみを返します。
2. INNER JOIN の構文
SELECT table1.column1, table1.column2, ..., table2.column1, ...
FROM table1
INNER JOIN table2
ON table1.condition_column = table2.condition_column; 注意: この構文は、リレーション(関連性)のあるカラムに基づいて2つのテーブルを結合します。マッチングの条件を指定するには ON キーワードを使用します。
3. MySQL INNER JOIN の具体例
まず、「Products(商品)」テーブルのレコードを見てみましょう。
| ProductID | ProductName | CategoryID | Price |
|---|---|---|---|
| 3 | Aniseed Syrup | 2 | 10.00 |
次に、「Categories(カテゴリ)」テーブルの行を確認します。
| CategoryID | CategoryName | Description |
|---|---|---|
| 2 | Condiments | Sweet and savory sauces, relishes, spreads, and seasonings |
ここで、上記2つのテーブル間の関連カラム(related column)は CategoryID カラムであることがわかります。
それでは、CategoryID フィールドを介して「Products」テーブルと「Categories」テーブルに対して INNER JOIN を実行してみましょう。
-- 商品情報とそれに紐づくカテゴリ名を結合して取得します
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID; 重要:INNER JOIN は、両方のテーブルにマッチするデータがある行のみを返します。つまり、CategoryID を持たない商品や、「Categories」テーブルに存在しない CategoryID が割り当てられている商品は、実行結果には含まれません。
4. 複数テーブルを結合する場合
クエリに複数の INNER JOIN 句を追加することで、3つ以上のテーブルを結合することが可能です。
次の SQL は、すべての注文(Orders)に加えて、顧客情報(Customers)と運送会社情報(Shippers)を結合して選択する例です。
-- 注文、顧客、運送会社の3つのテーブルを一度に結合します
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;