MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのUNION演算子の使い方を徹底解説!基本構文と実行例

MySQLのUNION演算子は、2つ以上のSELECT文の結果セットを1つに結合するために使用されます。UNION演算子を使うと、各SELECT文の結果間で重複する行が自動的に削除されます。

なお、UNION演算子内の各SELECT文は、同じ数のフィールド(カラム)を持ち、かつ対応するフィールドのデータ型が互換性のあるものである必要があります。これは重要なルールなので、覚えておきましょう。

UNION演算子の基本構文

SELECT expression1, expression2, … expression_n
FROM table
[WHERE conditions]
UNION [DISTINCT]
SELECT expression1, expression2, … expression_n
FROM table
[WHERE conditions]

構文の各要素の意味

expression1, expression2, … expression_n:取得したいカラム(列)を指定します。

table:レコードを取得したいテーブル名を指定します。

WHERE condition:任意指定です。レコードを選択する際に満たすべき条件を設定できます。

DISTINCT:こちらも任意指定です。結果セットから重複を取り除くための修飾子ですが、UNION演算子自体がデフォルトで重複を削除するため、DISTINCTを明示的に記述しても結果には影響しません。

実行例:2つのテーブルを結合してみよう

ここでは、以下のようなデータを持つ2つのテーブル「Student_detail」と「Student_info」を例に説明します。

mysql> Select * from Student_detail;
+-----------+---------+------------+------------+
| studentid | Name    | Address    | Subject    |
+-----------+---------+------------+------------+
|    101    | YashPal | Amritsar   | History    |
|    105    | Gaurav  | Chandigarh | Literature |
|    130    | Ram     | Jhansi     | Computers  |
|    132    | Shyam   | Chandigarh | Economics  |
|    133    | Mohan   | Delhi      | Computers  |
|    150    | Rajesh  | Jaipur     | Yoga       |
|    160    | Pradeep | Kochi      | Hindi      |
+-----------+---------+------------+------------+
7 rows in set (0.00 sec)

mysql> Select * from Student_info;
+-----------+-----------+------------+-------------+
| studentid | Name      | Address    | Subject     |
+-----------+-----------+------------+-------------+
|    101    | YashPal   | Amritsar   | History     |
|    105    | Gaurav    | Chandigarh | Literature  |
|    130    | Ram       | Jhansi     | Computers   |
|    132    | Shyam   | Chandigarh | Economics   |
|    133    | Mohan     | Delhi      | Computers   |
|    165    | Abhimanyu | Calcutta   | Electronics |
+-----------+-----------+------------+-------------+
6 rows in set (0.00 sec)

次のクエリでは、UNION演算子を使用して、両方のテーブルに存在するすべての「studentid」の値を取得しています。

mysql> Select Studentid FROM student_detail UNION SELECT Studentid FROM student_info;
+-----------+
| Studentid |
+-----------+
|    101    |
|    105    |
|    130    |
|    132    |
|    133    |
|    150    |
|    160    |
|    165    |
+-----------+
8 rows in set (0.00 sec)

この結果を見ると、「101」「105」「130」「132」「133」といった両方のテーブルに重複して存在するstudentidは1回だけ表示され、それぞれのテーブルにのみ存在する値(150・160・165)もすべて含まれています。このように、UNION演算子は重複を排除しながら複数のSELECT文の結果を効率的に統合できる便利な機能です。

  1. MySQLのSELECTステートメントでカンマを使える?CROSS JOINとの関係を解説

    MySQLのSELECTステートメント間にカンマは使用できますか?はい、使用できます。FROM句でテーブル名をカンマ(,)で区切って指定すると、複数のテーブルを組み合わせて照会することが可能です。構文は以下の2通りがあります。構文1:select * from テーブル名1,テーブル名2; 構文2:select * from テーブル名1 cross join テーブル名2;この2つの構文は、まったく同じ結果を返します。つまり、カンマ区切りによるテーブル指定は CROSS JOIN(交叉結合)と完全に同等です。両者とも、各テーブルのすべての行を組み合わせた「直積(デカルト積)」を求める操作にな

  2. MySQLのSELECT文でif/else条件を使う方法をわかりやすく解説

    MySQLでは、SELECT文の中で条件分岐を行いたい場合、IF()関数を使うことでif/elseのような処理を実現できます。この記事では、実際にテーブルを作成し、サンプルデータを使いながらIF()関数の使い方を解説します。IF()関数の基本構文IF(条件式, 真の場合の値, 偽の場合の値)条件式がTRUE(真)であれば2番目の引数を返し、FALSE(偅)であれば3番目の引数を返します。プログラミング言語におけるif/else文と同じような役割を果たします。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1966