JOINで一方のテーブルの列をすべて選択する記述について紹介します。
次のテーブルを用意します。
| id | name | value | category | memo |
|---|---|---|---|---|
| 1 | Penguin | 300 | B | 南国にすむペンギンです |
| 2 | Whale | 420 | M | 北極海のクジラです |
| 3 | Moffu | 880 | NULL | よくわからない生き物です |
| 4 | Camel | 220 | M | 砂漠にすむラクダです |
| 5 | Owl | 90 | B | 関東のフクロウです |
| 6 | Duck | 120 | B | そこらへんのアヒルです |
| 7 | Lizard | 60 | R | ひっそりと生きるトカゲです |
| id | category | name | flag |
|---|---|---|---|
| 1 | B | 鳥類 | 1 |
| 2 | B | 鳥類 | 2 |
| 3 | M | 哺乳類 | 1 |
| 4 | F | 魚類 | 1 |
以下のSQLでinner joinで結合してデータを選択します。
select * from Working inner join WorkingCategory on Working.category=WorkingCategory.category;
結果は以下の通りとなりますが、id, category 列が重複しています。
| id | name | value | category | memo | id | category | name | flag |
|---|---|---|---|---|---|---|---|---|
| 1 | Penguin | 300 | B | 南国にすむペンギンです | 1 | B | 鳥類 | 1 |
| 5 | Owl | 90 | B | 関東のフクロウです | 1 | B | 鳥類 | 1 |
| 6 | Duck | 120 | B | そこらへんのアヒルです | 1 | B | 鳥類 | 1 |
| 1 | Penguin | 300 | B | 南国にすむペンギンです | 2 | B | 鳥類 | 2 |
| 5 | Owl | 90 | B | 関東のフクロウです | 2 | B | 鳥類 | 2 |
| 6 | Duck | 120 | B | そこらへんのアヒルです | 2 | B | 鳥類 | 2 |
| 2 | Whale | 420 | M | 北極海のクジラです | 3 | M | 哺乳類 | 1 |
| 4 | Camel | 220 | M | 砂漠にすむラクダです | 3 | M | 哺乳類 | 1 |
あいまいさを無くすために、以下のSQLに変更します。
select Working.id, Working.value, Working.category, Working.memo, WorkingCategory.id as cid, WorkingCategory.category as cc, WorkingCategory.name as categoryname, WorkingCategory.flag
from Working inner join WorkingCategory on Working.category=WorkingCategory.category;
| id | name | value | category | memo | cid | cc | categoryname | categoryname | flag |
|---|---|---|---|---|---|---|---|---|---|
| データは先の結果と同じ |
上記のSQLで対応できますが、列数が増えると記述が大変です。
今回の例では、Workingテーブルのすべての列と、WorkingCategory のname列が表示できれば十分なため、もっと簡単にSQLを記述したいです。
テーブルのすべての列を表示する場合は、次の記述が利用できます。
(テーブル名).*
以下のSQKを作成して実行します。
select Working.*, WorkingCategory.name as categoryname from Working
inner join WorkingCategory on Working.category=WorkingCategory.category;
Working.*の記述で、 Workingテーブルのすべての列を選択できます。
SQL文を実行すると、以下の結果となります。Workingテーブルのすべての列が選択できています。
| id | name | value | category | memo | categoryname |
|---|---|---|---|---|---|
| 1 | Penguin | 300 | B | 南国にすむペンギンです | 鳥類 |
| 5 | Owl | 90 | B | 関東のフクロウです | 鳥類 |
| 6 | Duck | 120 | B | そこらへんのアヒルです | 鳥類 |
| 1 | Penguin | 300 | B | 南国にすむペンギンです | 鳥類 |
| 5 | Owl | 90 | B | 関東のフクロウです | 鳥類 |
| 6 | Duck | 120 | B | そこらへんのアヒルです | 鳥類 |
| 2 | Whale | 420 | M | 北極海のクジラです | 哺乳類 |
| 4 | Camel | 220 | M | 砂漠にすむラクダです | 哺乳類 |