Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การ SELECT ข้อมูลจากสองตารางพร้อมกันด้วย UNION ใน MySQL

ใช้ UNION เพื่อรวมผลลัพธ์จากหลายตารางที่มีโครงสร้างเหมือนกัน

สร้างตารางแรก

mysql> create table DemoTable1 ( 
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    FirstName varchar(20) ); 
Query OK, 0 rows affected (0.90 sec)

เพิ่มข้อมูลตารางแรก

mysql> insert into DemoTable1(FirstName) values('Chris'); Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1(FirstName) values('Adam'); Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1(FirstName) values('Sam'); Query OK, 1 row affected (0.16 sec)

สร้างตารางที่สอง

mysql> create table DemoTable2( 
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    FirstName varchar(20) ); 
Query OK, 0 rows affected (1.75 sec)

เพิ่มข้อมูลตารางที่สอง

mysql> insert into DemoTable2(FirstName) values('John'); Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable2(FirstName) values('Tom'); Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable2(FirstName) values('Bob'); Query OK, 1 row affected (0.50 sec)

คิวรี่รวมข้อมูลจากสองตารางด้วย UNION

mysql> (select *from DemoTable1) 
    union 
    (select *from DemoTable2) 
    order by FirstName;

ผลลัพธ์:

+----+-----------+
| Id | FirstName |
+----+-----------+
|  2 | Adam      |
|  3 | Bob       |
|  1 | Chris     |
|  1 | John      |
|  3 | Sam       |
|  2 | Tom       |
+----+-----------+
6 rows in set (0.00 sec)

UNION vs UNION ALL

  • UNION - ลบแถวซ้ำออก (DISTINCT) - ใช้เวลานานกว่า
  • UNION ALL - เก็บแถวซ้ำไว้ - เร็วกว่า

เงื่อนไขการใช้ UNION

  • จำนวนคอลัมน์ต้องเท่ากันในทุก SELECT
  • ชนิดข้อมูลคอลัมน์ที่ตรงกันต้องเข้ากันได้ (compatible)
  • ชื่อคอลัมน์จะใช้จาก SELECT ตัวแรก

ตัวอย่าง UNION ALL

(SELECT * FROM DemoTable1) UNION ALL (SELECT * FROM DemoTable2) ORDER BY FirstName;

ใช้ WITH (CTE) ใน MySQL 8.0+

WITH combined AS (
    SELECT * FROM DemoTable1
    UNION ALL
    SELECT * FROM DemoTable2
)
SELECT * FROM combined ORDER BY FirstName;