MySQLでUNIONを使って2つの列から重複しない値を取得する方法
MySQLで2つの列から一意な値を取得するには?
2つの列(テーブル)から重複を除いた値を取得したい場合は、UNION演算子を使用します。UNIONは複数のSELECT文の結果を結合する際に、自動的に重複行を取り除いてくれるため、まさにこの用途に最適です。
ここでは、実際にサンプルテーブルを作成しながら、具体的な手順を確認していきましょう。
ステップ1:1つ目のテーブルを作成する
まず、以下のCREATE TABLE文でサンプルテーブル「DemoTable1」を作成します。
mysql> create table DemoTable1
(
Value1 int
);
Query OK, 0 rows affected (0.56 sec)
次に、INSERT文を使ってレコードを挿入します。
mysql> insert into DemoTable1 values(1);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1 values(2);
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1 values(3);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1 values(4);
Query OK, 1 row affected (0.12 sec)
SELECT文で全レコードを表示してみましょう。
mysql> select *from DemoTable1;
実行結果は以下の通りです。
+--------+
| Value1 |
+--------+
| 1 |
| 2 |
| 3 |
| 4 |
+--------+
4 rows in set (0.00 sec)
ステップ2:2つ目のテーブルを作成する
続いて、2つ目のテーブル「DemoTable2」を作成します。
mysql> create table DemoTable2
(
Value2 int
);
Query OK, 0 rows affected (0.62 sec)
こちらにもINSERT文でレコードを登録します。1つ目のテーブルと値が一部重複している点に注目してください。
mysql> insert into DemoTable2 values(3);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable2 values(4);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable2 values(5);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable2 values(6);
Query OK, 1 row affected (0.08 sec)
SELECT文で内容を確認します。
mysql> select *from DemoTable2;
実行結果は以下の通りです。
+--------+
| Value2 |
+--------+
| 3 |
| 4 |
| 5 |
| 6 |
+--------+
4 rows in set (0.00 sec)
ステップ3:UNIONで重複しない値を取得する
準備が整いましたので、いよいよUNIONを使って2つの列から一意な値を取得します。クエリは以下のようになります。
mysql> select Value1 from DemoTable1
UNION
select Value2 from DemoTable2;
実行結果を見てみましょう。
+--------+
| Value1 |
+--------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+--------+
6 rows in set (0.00 sec)
実行結果のポイント
2つのテーブルにはそれぞれ「3」と「4」という共通の値が含まれていましたが、出力結果ではこれらの重複が自動的に排除され、1〜6までの6件の一意な値だけが返されています。
なお、重複を排除せずにすべての行を取得したい場合は、UNIONの代わりにUNION ALLを使用してください。UNION ALLは重複チェックを行わないため、その分パフォーマンスも向上するというメリットがあります。
-
MySQLでテーブルの値からランダムに2件のレコードを取得する方法
MySQLでランダムにレコードを抽出するには、ORDER BY RAND()を使用します。さらに、取得する件数を2件に限定したい場合は、LIMIT 2を組み合わせることで実現できます。この記事では、実際にテーブルを作成し、ランダムに2つの値を取得する手順を具体的な例とともに解説します。サンプルテーブルの作成まず、質問文を格納するテーブルを作成しましょう。mysql> create table DemoTable1815 ( Question text ); Query OK, 0 rows affected (0.00 sec)テストデータの挿入次に、INSERT
-
MySQLでテーブルの重複を除いたレコードから平均値を取得するクエリの書き方
MySQLで平均値を求めるには AVG() 関数を使用します。さらに DISTINCT と組み合わせることで、重複しているレコードを除外した状態で平均を計算することができます。この記事では、実際にサンプルテーブルを作成しながら、個別(ユニーク)なレコードから平均値を取得する方法を解説します。サンプルテーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table DemoTable1934 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affec