3つ以上のテーブルを使った結合
結合を行う join は複数回用いる事で2つ以上のテーブルを結合できます。
基本構文
inner join の構文を使って複数結合する場合は以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
select * from テーブル名1 inner join テーブル名2 on テーブル名1.列名 = テーブル名2.列名 inner join テーブル名3 on テーブル名2.列名 = テーブル名3.列名; |
例題:city一覧にcountryテーブルのNameとcountrylanguageテーブルのLanguageを追加して表示してください。CountryCodeがキーになります。表示はcityテーブル「ID」「Name」、countryテーブル「Name」、countrylanguageテーブル「Language」としてください。
構文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
use world; select city.ID, city.Name, country.Name, countrylanguage.Language from city inner join countrylanguage on city.CountryCode = countrylanguage.CountryCode inner join country on countrylanguage.CountryCode = country.Code ; |
テーブルの足し算 union / union all
テーブルの足し算を行う 集団演算子 union について説明します。
注意点
- union / union all で2種類あります。重複情報がないことが確定している場合は、重複確認をしない union all の方が負荷が少ないので、こちらを利用しましょう。
種類 | 意味 |
---|---|
union | 重複削除 |
union all | 重複も含める |
- テーブル1とテーブル2で列数をあわせる必要があります。
- 同じ位置にあるカラムのデータ型は一致している必要があります。
- ソートを行う order by は、最後に記述しましょう。
1 2 3 4 5 |
select 列1, ... from テーブル名1 union select 列2, ... from テーブル名2 order by ... ; |
union(重複行を削除)
基本構文
ベースとなるselectの結果に、union のあとに記載したselectの結果を足し算します。
1 2 3 4 |
select 列1, ... from テーブル名1 union select 列2, ... from テーブル名2 ; |
例題:以下2つのテーブル(顧客テーブル [ Customer ] / 見込み客テーブル [ Prospective Customer])を union で結合してみましょう。
[ Customerテーブル ]
id | name |
---|---|
1 | Okada |
2 | Tanaka |
3 | Nakata |
[ Prospective Customerテーブル ]
pc-id | name | address |
---|---|---|
3 | Nakata | Osaka |
5 | Ono | Tokyo |
以下のコマンドを実行します。
1 2 3 4 |
select id, name from Customer union select pc-id, name from Prospective Customer ; |
結果は以下になります。
id | name |
---|---|
1 | Okada |
2 | Tanaka |
3 | Nakata |
5 | Ono |
union all(重複行を含む)
基本構文
ベースとなるselectの結果に、union all のあとに記載したselectの結果を足し算します。
1 2 3 4 |
select 列1, ... from テーブル名1 union all select 列2, ... from テーブル名2 ; |
例題:以下2つのテーブル(顧客テーブル [ Customer ] / 見込み客テーブル [ Prospective Customer])を union all で結合してみましょう。
[ Customerテーブル ]
id | name |
---|---|
1 | Okada |
2 | Tanaka |
3 | Nakata |
[ Prospective Customerテーブル ]
pc-id | name | address |
---|---|---|
3 | Nakata | Osaka |
5 | Ono | Tokyo |
以下のコマンドを実行します。
1 2 3 4 |
select id, name from Customer union all select pc-id, name from Prospective Customer ; |
結果は以下になります。
id | name |
---|---|
1 | Okada |
2 | Tanaka |
3 | Nakata |
3 | Nakata |
5 | Ono |