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文の結果を効率的に統合できる便利な機能です。
-
MySQLのSELECTステートメントでカンマを使える?CROSS JOINとの関係を解説
MySQLのSELECTステートメント間にカンマは使用できますか?はい、使用できます。FROM句でテーブル名をカンマ(,)で区切って指定すると、複数のテーブルを組み合わせて照会することが可能です。構文は以下の2通りがあります。構文1:select * from テーブル名1,テーブル名2; 構文2:select * from テーブル名1 cross join テーブル名2;この2つの構文は、まったく同じ結果を返します。つまり、カンマ区切りによるテーブル指定は CROSS JOIN(交叉結合)と完全に同等です。両者とも、各テーブルのすべての行を組み合わせた「直積(デカルト積)」を求める操作にな
-
MySQLのSELECT文でif/else条件を使う方法をわかりやすく解説
MySQLでは、SELECT文の中で条件分岐を行いたい場合、IF()関数を使うことでif/elseのような処理を実現できます。この記事では、実際にテーブルを作成し、サンプルデータを使いながらIF()関数の使い方を解説します。IF()関数の基本構文IF(条件式, 真の場合の値, 偽の場合の値)条件式がTRUE(真)であれば2番目の引数を返し、FALSE(偅)であれば3番目の引数を返します。プログラミング言語におけるif/else文と同じような役割を果たします。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1966