MySQL JOINチュートリアル:1つのテーブルからすべての列、別のテーブルからいくつかの列を選択
MySQLで1つのテーブルからすべての列を選択し、別のテーブルからいくつかの列を選択する方法
このチュートリアルでは、MySQLの SELECT
ステートメントと JOIN
句を使用して、1つのテーブルからすべての列を選択し、別のテーブルからいくつかの列を選択する方法を説明します。
前提条件
- MySQLデータベースサーバーとクライアントツール
- 2つのテーブルを含むデータベース
手順
-
JOINの種類を選択する
2つのテーブルを結合するには、適切な
JOIN
句を選択する必要があります。最も一般的なJOIN
句は次のとおりです。- INNER JOIN: 2つのテーブルの共通する行のみを返します。
- LEFT JOIN: 左側のテーブルのすべての行を返し、右側テーブルと一致する行のみを返します。
- FULL JOIN: 2つのテーブルのすべての行を返し、一致しない行は
NULL
値で表示します。
-
SELECTステートメントを作成する
次の構文を使用して
SELECT
ステートメントを作成します。SELECT column_list FROM table_name1 JOIN table_name2 ON join_condition;
column_list
: 選択する列のリストtable_name1
: すべての列を選択するテーブルjoin_condition
: 2つのテーブルを結合する条件
例
次の例では、users
テーブルからすべての列と、orders
テーブルから order_id
と order_date
列を選択します。
SELECT *
FROM users
INNER JOIN orders
ON users.user_id = orders.user_id;
このクエリは、users
テーブルと orders
テーブルの共通する行のみを返します。
その他のヒント
WHERE
句を使用して、結果をさらにフィルタリングできます。ORDER BY
句を使用して、結果をソートできます。LIMIT
句を使用して、結果の数を制限できます。
users.sql
CREATE TABLE users (
user_id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
PRIMARY KEY (user_id)
);
INSERT INTO users (username, email) VALUES
('user1', '[email protected]'),
('user2', '[email protected]'),
('user3', '[email protected]');
CREATE TABLE orders (
order_id INT NOT NULL AUTO_INCREMENT,
user_id INT NOT NULL,
order_date DATETIME NOT NULL,
PRIMARY KEY (order_id),
FOREIGN KEY (user_id) REFERENCES users (user_id)
);
INSERT INTO orders (user_id, order_date) VALUES
(1, '2023-11-14'),
(2, '2023-12-01'),
(3, '2024-01-15');
SELECT *
FROM users
INNER JOIN orders
ON users.user_id = orders.user_id;
このクエリを実行すると、次の結果が表示されます。
user_id | username | email | order_id | order_date
------- | -------- | ---------- | -------- | --------
1 | user1 | [email protected] | 1 | 2023-11-14
2 | user2 | [email protected] | 2 | 2023-12-01
3 | user3 | [email protected] | 3 | 2024-01-15
- 特定の列のみを選択するには、
SELECT
ステートメントで列名を指定します。
SELECT username, email, order_date
FROM users
INNER JOIN orders
ON users.user_id = orders.user_id;
WHERE
句を使用して結果をフィルタリングするには、条件を指定します。
SELECT *
FROM users
INNER JOIN orders
ON users.user_id = orders.user_id
WHERE users.username = 'user1';
SELECT *
FROM users
INNER JOIN orders
ON users.user_id = orders.user_id
ORDER BY order_date DESC;
SELECT *
FROM users
INNER JOIN orders
ON users.user_id = orders.user_id
LIMIT 10;
これらのサンプルは、SELECT
ステートメントと JOIN
句を使用して、MySQLデータベースからデータを抽出する方法を理解するのに役立ちます。
他の方法
サブクエリを使用して、別のテーブルから選択した列を1つのテーブルの列として扱えます。
SELECT *
FROM users
WHERE user_id IN (
SELECT user_id
FROM orders
);
このクエリは、orders
テーブルに存在する user_id
を持つ users
テーブルのすべての行を返します。
UNION
句を使用して、2つのSELECTステートメントの結果を結合できます。
SELECT *
FROM users;
UNION
SELECT user_id, order_date
FROM orders;
CROSS JOIN
句を使用して、2つのテーブルのすべての行を結合できます。
SELECT *
FROM users
CROSS JOIN orders;
JOIN
句は、最も一般的で効率的な方法です。- サブクエリは、複雑な条件を指定する場合に役立ちます。
UNION
句は、重複する行を削除せずに2つの結果を結合する場合に役立ちます。CROSS JOIN
句は、すべての組み合わせを取得したい場合に役立ちます。
select mysql join