Developer

【SQL基礎】クロス結合
2021.07.29
Lv1

【SQL基礎】クロス結合

クロス結合

クロス結合は、一方のテーブルに存在するレコードともう一方のテーブルに存在するレコードをすべて結合する方法です。

以下はイメージ図です。

そもそも「結合」というもの自体よくわからないという方はこちらの記事で概要をご確認ください。


クロス結合の基本構文

クロス結合の基本構文は以下の通りです。

SELECT カラム名
FROM テーブル名
CROSS JOIN テーブル名;


本記事では例として、以下の2つのテーブルを使用します。

・teachersテーブル

ID、名前、教科IDの3つのカラムで構成されています。

・subjectsテーブル

ID、教科名の2つのカラムで構成されています。


例1.teachersテーブルにsubjectsテーブルを結合する。

構文通りにクロス結合を行います。


SELECT *
FROM teachers
CROSS JOIN subjects;

全てのレコードが結合されました。
ただ、このテーブル自体には使い道がありません。
何の意図もなくすべてのレコードをつなぎ合わせただけだからです。


例2.条件を指定してteachersテーブルにsubjectsテーブルをクロス結合する。

例1の結果をもう一度見てみましょう。

教員(teachers)の名前と担当教科(subjects)を紐づけるにはteachersテーブルのsubject_idカラムとsubjectsテーブルのidカラムの値が一致すればよいことがわかります。

ON句で結合条件を指定してみましょう。(FROM句、JOIN句でteachersテーブルはt、subjectsテーブルはsという別名を設定しています。)


SELECT *
FROM teachers t
CROSS JOIN subjects s
ON t.subject_id = s.id;

 

教員名と教科名を対応させて結合することができました。

このように、クロス結合をしてみることによって結合条件を明確にすることができます。


学習のポイント

・クロス結合は、結合対象テーブルに存在するすべてのレコードを結合する。(直接的な使い道はほとんど無い。)

・クロス結合の結果を参考にすると、結合条件を考えやすくなる可能性がある。


練習問題

問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。

worldcup2014.zip

CREATE DATABASE worldcup2014;

use worldcup2014

source C:\worldcup2014.sql

問、クロス結合を用いて、プレイヤー名とゴールを決めた時間帯が一度に確認できるようにデータを取得してください。

参考として、playersテーブルとgoalsテーブルを以下に示しておきます。(一部省略)


答え

まず、SELECT句にはプレイヤー名ゴール時間の2つのカラムが必要です。

playersテーブルのnameカラムgoalsテーブルのgoal_timeカラムを使います。

結合条件はplayersテーブルのidgoalsテーブルのplayer_idが一致することです。

したがって、以下のようなSQLを実行します。

(playersテーブルとgoalsテーブルの両方にidカラムが存在するため、”テーブル名.カラム名”という形式でカラムを指定するとよいでしょう。)

SELECT players.name, goals.goal_time
FROM players
CROSS JOIN goals
ON players.id = goals.player_id;

(実行結果は一部省略)

 

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ