JOIN句
はじめに
JOIN句は、SELECTクエリで、2つ以上のテーブルの関連するカラムに基づいて行を結合するために使用されます。すべてのテーブルの行が共通のカラムで結合されて一緒に生成されます。
JOIN句について詳しく学ぶ前に、JOINに関連するいくつかの主要用語を理解しましょう:
- 主キー: 主キーは、テーブル内のレコードの一意の識別子です。テーブルは1つのカラムを主キーカラムとして持つことができ、このカラム内の各レコードの値は一意でなければならず、必須で、重複できません。
- 外部キー:あるテーブルの外部キーカラムは、別のテーブルまたは同じテーブルの行を一意に識別します。2番目のテーブルの外部キーは、1番目のテーブルの主キーを参照します。
- 親テーブル:JOIN句において、親テーブルはJOINの基準となるベーステーブルです。
- 結合テーブル:結合テーブルは、JOIN句で親テーブルと結合されるセカンダリテーブルまたは子テーブルです。
この例では、_MovieID_カラムは映画の一意の識別番号を保持するため、_Movies_テーブルの主キーです。
サンプルデータベース:
チケット予約アプリケーションに登録されているすべての劇場の場所を指定する「Theaters」というテーブルを作成しましょう。
Theatersテーブルのサンプルレコードを以下に示します:
| TheaterID | TheaterName | Location |
|---|---|---|
| 047 | The Express Cinemas | New York City |
| 048 | ANC Cinemas | Rochester |
| 052 | Cosmos Theater | Albany |
| 053 | FunTime Cinemas | Buffalo |
_TheaterID_カラムは劇場の一意の識別番号を保持するため、_Theaters_テーブルの主キーです。_Movies_テーブルの_TheaterID_カラムは、_Theaters_テーブルの_TheaterID_カラムへの外部キーです。
クエリでカラム名にテーブル名を指定しない場合、デフォルトでベーステーブルのカラムと見なされます。
JOINの種類
ZCQLで実行できるJOINには2種類あります。
INNER JOIN
INNER JOINは、親テーブルと結合テーブルの両方で一致する値を持つレコードを返します。2つのテーブルに対してINNER JOINを使用すると、両方のテーブルで指定されたカラムの値が一致するレコードのみが出力として生成されます。
INNER JOINを使用する構文は以下のとおりです:
SELECT column_name(s)
FROM parent_table_name
INNER JOIN join_table_name
ON parent_table_name.column_name = join_table_name.column_name
例:
_Movies_テーブルから映画名、上映日、上映時間のリストと、_Theaters_テーブルから劇場名を表示するには、以下のクエリを実行します:
SELECT Movies.MovieName, Theatres.TheaterName, Movies.ShowDate, Movies.ShowTime,
FROM Movies INNER JOIN Theatres ON Movies.TheaterID = Theatres.TheaterID
以下の出力が生成されます:
| MovieName | TheaterName | ShowDate | ShowTime |
|---|---|---|---|
| Ant-Man and the Wasp | The Express Cinemas | 2018-07-13 | 13:30:00 |
| Hotel Transylvania 3: Summer Vacation | Cosmos Theater | 2018-07-13 | 14:20:00 |
| The First Purge | Cosmos Theater | 2018-07-14 | 17:00:00 |
| The First Purge | FunTime Cinemas | 2018-07-14 | 21:30:00 |
LEFT JOIN
LEFT JOINは、親テーブルのすべてのレコードと、結合テーブルの一致するレコードを返します。2つのテーブルに対してLEFT JOINを使用すると、結合テーブルに一致がない場合でも、親テーブルのすべてのレコードが返されます。結合テーブルに一致がないレコードの結果は’NULL’として表示されます。
LEFT JOINを使用する構文は以下のとおりです:
SELECT column_name(s)
FROM parent_table_name
LEFT JOIN join_table_name
ON parent_table_name.column_name = join_table_name.column_name
例:
_Theaters_テーブルから劇場とその場所のリストと、_Movies_テーブルからその劇場で上映されている映画を表示するには、以下のクエリを実行します:
SELECT Theaters.TheaterName, Theaters.Location, Movies.MovieName
FROM Theaters
LEFT JOIN Movies
ON Theaters.TheaterID = Movies.TheaterID
以下の出力が生成されます:
| TheaterName | Location | MovieName |
|---|---|---|
| The Express Cinemas | New York City | The First Purge |
| ANC Cinemas | Rochester | NULL |
| Cosmos Theater | Albany | Hotel Transylvania 3: Summer Vacation |
| FunTime Cinemas | Buffalo | Skyscraper |
ANC CinemasはMoviesテーブルに一致するレコードがないため、結果は’NULL’として表示されます。
複数JOIN
1つのZCQLクエリで最大4つのJOINを組み合わせることができます。ただし、各JOIN句に対して1つのJOIN条件のみ記述できます。これにより、4つの異なるテーブルの結果が表示され、1つのテーブルがINNER JOINまたはLEFT JOINを使用して別のテーブルにリンクされます。
サンプルデータベース:
チケット予約アプリケーションに、特定の映画と劇場のチケット1枚あたりの価格(ドル)を表示する’Pricing’というテーブルを作成しましょう。このテーブルは、_Theaters_テーブルの_TheaterID_と_Movies_テーブルの_MovieID_を外部キーとして参照します。
Pricingテーブルのサンプルレコードを以下に示します:
| TheaterID | MovieID | Price |
|---|---|---|
| 047 | 2056 | 9.20 |
| 048 | NULL | NULL |
| 052 | 2057 | 8.64 |
| 052 | 2058 | 11.50 |
| 053 | 2059 | 7.44 |
Theaters_テーブルの_TheaterName、Movies_テーブルの_MovieName、ShowDate、ShowTime、_Pricing_テーブルの_Price_を表示するクエリを以下のように実行できます:
SELECT Theaters.TheaterName,Movies.MovieName, Movies.ShowDate,
Movies.ShowTime, Pricing.Price
FROM Pricing
LEFT JOIN Movies
ON Theaters.TheaterID = Movies.TheaterID
INNER JOIN Theaters
ON Movies.MovieID = Pricing.MovieID
以下の出力が生成されます:
| TheaterName | MovieName | ShowDate | ShowTime | Price |
|---|---|---|---|---|
| The Express Cinemas | The First Purge | 2018-07-13 | 13:00:00 | 9.20 |
| ANC Cinemas | NULL | NULL | NULL | NULL |
| Cosmos Theater | Ant-Man and the Wasp | 2018-07-13 | 14:20:00 | 8.64 |
| Cosmos Theater | Hotel Transylvania 3: Summer Vacation | 2018-07-14 | 17:00:00 | 11.50 |
| FunTime Cinemas | Skyscraper | 2018-07-14 | 21:30:00 | 7.44 |
最終更新日 2026-02-23 18:09:41 +0530 IST
Yes
No
Send your feedback to us