MySQL 速習チュートリアル

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(商品)」テーブルのレコードを見てみましょう。

ProductIDProductNameCategoryIDPrice
3Aniseed Syrup210.00

次に、「Categories(カテゴリ)」テーブルの行を確認します。

CategoryIDCategoryNameDescription
2CondimentsSweet 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;