【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;
教員名と教科名を対応させて結合することができました。
このように、クロス結合をしてみることによって結合条件を明確にすることができます。
学習のポイント
・クロス結合は、結合対象テーブルに存在するすべてのレコードを結合する。(直接的な使い道はほとんど無い。)
・クロス結合の結果を参考にすると、結合条件を考えやすくなる可能性がある。
練習問題
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。
worldcup2014.zip
[sql] CREATE DATABASE worldcup2014;use worldcup2014
source C:\worldcup2014.sql
[/sql]
問、クロス結合を用いて、プレイヤー名とゴールを決めた時間帯が一度に確認できるようにデータを取得してください。
参考として、playersテーブルとgoalsテーブルを以下に示しておきます。(一部省略)