MySQL,UNION:複数のテーブルから条件付きでデータを取得する

スポンサーリンク

鍛錬 987

MySQL,UNION:複数のテーブルから条件付きでデータを取得する

UNION と WHERE を使用すると、複数のテーブルから条件に一致したデータのみを取得して、結果を結合して表示することができます。

結合する際にデータが重複する場合は、1つのデータのみ表示されます。
重複しても全てのデータを表示するには、ALL を付加して使用します。

使用方法は、以下に示す通りです。
以下の例は、テーブル1とテーブル2から条件に一致したデータのみを取得し、結合しています。

データが重複する場合、省いて1つのデータのみを表示する場合

SELECT * FROM テーブル1 WHERE 条件
UNION
SELECT * FROM テーブル2 WHERE 条件;

データが重複しても全てのデータを表示する場合

SELECT * FROM テーブル1 WHERE 条件
UNION ALL
SELECT * FROM テーブル2 WHERE 条件;
スポンサーリンク

実行結果

以下は、テーブル「fruits」とテーブル「vegetable」から条件に一致したデータのみを取得し、結果を結合して表示しています。

テーブル「fruits」

id tag name price
1 F apple 250
2 F orange 300
3 F grape 500

テーブル「vegetable」

id tag name price
1 V potato 300
2 V ginger 250
3 V pumpkin 500
4 V cabbage 150
5 V eggplant 400

データを取得する条件

テーブル名 取得するデータの条件
fruits カラム「price」が「300」以上
vegetable カラム「price」が「400」以上
mysql> 
mysql> select * from fruits;
+------+------+--------+-------+
| id   | tag  | name   | price |
+------+------+--------+-------+
|    1 | F    | apple  |   250 |
|    2 | F    | orange |   300 |
|    3 | F    | grape  |   500 |
+------+------+--------+-------+
3 rows in set (0.00 sec)

mysql> 
mysql> 
mysql> select * from vegetable;
+------+------+----------+-------+
| id   | tag  | name     | price |
+------+------+----------+-------+
|    1 | V    | potato   |   300 |
|    2 | V    | ginger   |   250 |
|    3 | V    | pumpkin  |   500 |
|    4 | V    | cabbage  |   150 |
|    5 | V    | eggplant |   400 |
+------+------+----------+-------+
5 rows in set (0.00 sec)

mysql> 
mysql> 
mysql> select * from fruits where price>=300
    -> union all
    -> select * from vegetable where price>=400
    -> ;
+------+------+----------+-------+
| id   | tag  | name     | price |
+------+------+----------+-------+
|    2 | F    | orange   |   300 |
|    3 | F    | grape    |   500 |
|    3 | V    | pumpkin  |   500 |
|    5 | V    | eggplant |   400 |
+------+------+----------+-------+
4 rows in set (0.00 sec)

上記に示した通り、複数のテーブルから条件に一致したデータのみを取得し、結果を結合して表示することができました。

タイトルとURLをコピーしました