Hướng dẫn union 2 table mysql - liên minh 2 bảng mysql

13.2.12.1 & NBSP; Điều khoản Liên minh

SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
9 kết hợp kết quả từ nhiều khối truy vấn vào một tập kết quả duy nhất. Ví dụ này sử dụng các câu
mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
0:

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+

  • Kết quả đặt tên cột và kiểu dữ liệu

  • Bảng và giá trị tuyên bố trong các công đoàn

  • Liên minh khác biệt và liên minh tất cả

  • Đặt hàng và giới hạn trong các công đoàn

  • Hạn chế công đoàn

  • Liên minh bàn giao trong MySQL 8.0 so với MySQL 5.7

Kết quả đặt tên cột và kiểu dữ liệu

Bảng và giá trị tuyên bố trong các công đoàn

mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)

Liên minh khác biệt và liên minh tất cả

mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',20);
+----------------------+
| REPEAT('a',1)        |
+----------------------+
| a                    |
| bbbbbbbbbbbbbbbbbbbb |
+----------------------+
Bảng và giá trị tuyên bố trong các công đoàn

Liên minh khác biệt và liên minh tất cả

CREATE TABLE t1 (x INT, y INT);
INSERT INTO t1 VALUES ROW(4,-2),ROW(5,9);

CREATE TABLE t2 (a INT, b INT);
INSERT INTO t2 VALUES ROW(1,2),ROW(3,4);

Đặt hàng và giới hạn trong các công đoàn

SELECT * FROM t1 UNION SELECT * FROM t2;
TABLE t1 UNION SELECT * FROM t2;
VALUES ROW(4,-2), ROW(5,9) UNION SELECT * FROM t2;
SELECT * FROM t1 UNION TABLE t2;
TABLE t1 UNION TABLE t2;
VALUES ROW(4,-2), ROW(5,9) UNION TABLE t2;
SELECT * FROM t1 UNION VALUES ROW(4,-2),ROW(5,9);
TABLE t1 UNION VALUES ROW(4,-2),ROW(5,9);
VALUES ROW(4,-2), ROW(5,9) UNION VALUES ROW(4,-2),ROW(5,9);

Hạn chế công đoàn

mysql> SELECT * FROM (TABLE t2) AS t(x,y) UNION TABLE t1;
+------+------+
| x    | y    |
+------+------+
|    1 |    2 |
|    3 |    4 |
|    4 |   -2 |
|    5 |    9 |
+------+------+
4 rows in set (0.00 sec)
Liên minh khác biệt và liên minh tất cả

Đặt hàng và giới hạn trong các công đoàn

Hạn chế công đoàn

Liên minh bàn giao trong MySQL 8.0 so với MySQL 5.7

Đặt hàng và giới hạn trong các công đoàn

Hạn chế công đoàn

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

Liên minh bàn giao trong MySQL 8.0 so với MySQL 5.7

Tên cột cho bộ kết quả

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
9 được lấy từ tên cột của khối truy vấn đầu tiên. Thí dụ:

(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;

Các cột được chọn được liệt kê trong các vị trí tương ứng của mỗi khối truy vấn phải có cùng loại dữ liệu. Ví dụ: cột đầu tiên được chọn bởi câu lệnh đầu tiên phải có cùng loại với cột đầu tiên được chọn bởi các câu lệnh khác. Nếu các loại dữ liệu của các cột kết quả tương ứng không khớp, các loại và độ dài của các cột trong kết quả

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
9 sẽ tính đến các giá trị được truy xuất bởi tất cả các khối truy vấn. Hãy xem xét các phần sau, trong đó độ dài cột không bị ràng buộc với độ dài của giá trị từ câu lệnh
mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
0 đầu tiên:

Bắt đầu với MySQL 8.0.19, bạn cũng có thể sử dụng câu lệnh

mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
4 hoặc câu lệnh
mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
5 trong
mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
9 Bất cứ nơi nào bạn có thể sử dụng câu lệnh tương đương
mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
0. Giả sử rằng các bảng
mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
8 và
mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
9 được tạo và điền như hiển thị ở đây:mysql client:

mysql> VALUES ROW(4,-2), ROW(5,9), ROW(-1,3) 
    -> UNION 
    -> VALUES ROW(1,2), ROW(3,4), ROW(-1,3) 
    -> ORDER BY column_0 DESC LIMIT 3;
+----------+----------+
| column_0 | column_1 |
+----------+----------+
|        5 |        9 |
|        4 |       -2 |
|        3 |        4 |
+----------+----------+
3 rows in set (0.00 sec)

Trước đó là trường hợp và coi thường các tên cột trong đầu ra của các truy vấn bắt đầu bằng

mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
5, tất cả các truy vấn
mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
9 sau đây mang lại cùng một kết quả:

Để buộc các tên cột giống nhau, hãy bọc khối truy vấn ở phía bên trái trong câu lệnh

mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
0 và sử dụng các bí danh, như thế này:must refer to the alias, not the column name. The first of the following statements is permitted, but the second fails with an
(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;
2 error:

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
0

Để gây ra các hàng trong kết quả

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
9 bao gồm các tập hợp các hàng được truy xuất bởi từng khối truy vấn lần lượt, chọn một cột bổ sung trong mỗi khối truy vấn để sử dụng làm cột sắp xếp và thêm một mệnh đề
SELECT * FROM t1 UNION SELECT * FROM t2;
TABLE t1 UNION SELECT * FROM t2;
VALUES ROW(4,-2), ROW(5,9) UNION SELECT * FROM t2;
SELECT * FROM t1 UNION TABLE t2;
TABLE t1 UNION TABLE t2;
VALUES ROW(4,-2), ROW(5,9) UNION TABLE t2;
SELECT * FROM t1 UNION VALUES ROW(4,-2),ROW(5,9);
TABLE t1 UNION VALUES ROW(4,-2),ROW(5,9);
VALUES ROW(4,-2), ROW(5,9) UNION VALUES ROW(4,-2),ROW(5,9);
0 sắp xếp Khối truy vấn cuối cùng:

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
1

Để duy trì thứ tự sắp xếp trong kết quả riêng lẻ, hãy thêm cột thứ cấp vào mệnh đề

SELECT * FROM t1 UNION SELECT * FROM t2;
TABLE t1 UNION SELECT * FROM t2;
VALUES ROW(4,-2), ROW(5,9) UNION SELECT * FROM t2;
SELECT * FROM t1 UNION TABLE t2;
TABLE t1 UNION TABLE t2;
VALUES ROW(4,-2), ROW(5,9) UNION TABLE t2;
SELECT * FROM t1 UNION VALUES ROW(4,-2),ROW(5,9);
TABLE t1 UNION VALUES ROW(4,-2),ROW(5,9);
VALUES ROW(4,-2), ROW(5,9) UNION VALUES ROW(4,-2),ROW(5,9);
0:

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
2

Sử dụng một cột bổ sung cũng cho phép bạn xác định khối truy vấn nào mỗi hàng đến từ. Các cột bổ sung cũng có thể cung cấp thông tin nhận dạng khác, chẳng hạn như một chuỗi cho biết tên bảng.

Hạn chế công đoàn

Trong một

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
9, các câu lệnh
mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
0 có các hạn chế sau:

  • (SELECT a FROM t1 WHERE a=10 AND B=1)
    UNION
    (SELECT a FROM t2 WHERE a=11 AND B=2)
    ORDER BY a LIMIT 10;
    8 Trong
    mysql> CREATE TABLE t1 (x INT, y INT);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> INSERT INTO t1 VALUES ROW(4,-2);
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> CREATE TABLE t2 (a INT, b INT);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> INSERT INTO t2 VALUES ROW(1,2);
    Query OK, 2 rows affected (0.01 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    
    mysql> TABLE t1 UNION TABLE t2;
    +------+------+
    | x    | y    |
    +------+------+
    |    4 |   -2 |
    |    1 |    2 |
    +------+------+
    2 rows in set (0.00 sec)
    
    mysql> TABLE t2 UNION TABLE t1;
    +------+------+
    | a    | b    |
    +------+------+
    |    1 |    2 |
    |    4 |   -2 |
    +------+------+
    2 rows in set (0.00 sec)
    0 đầu tiên không có hiệu lực.
    (SELECT a FROM t1 WHERE a=10 AND B=1)
    UNION
    (SELECT a FROM t2 WHERE a=11 AND B=2)
    ORDER BY a LIMIT 10;
    8 Trong bất kỳ
    mysql> CREATE TABLE t1 (x INT, y INT);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> INSERT INTO t1 VALUES ROW(4,-2);
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> CREATE TABLE t2 (a INT, b INT);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> INSERT INTO t2 VALUES ROW(1,2);
    Query OK, 2 rows affected (0.01 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    
    mysql> TABLE t1 UNION TABLE t2;
    +------+------+
    | x    | y    |
    +------+------+
    |    4 |   -2 |
    |    1 |    2 |
    +------+------+
    2 rows in set (0.00 sec)
    
    mysql> TABLE t2 UNION TABLE t1;
    +------+------+
    | a    | b    |
    +------+------+
    |    1 |    2 |
    |    4 |   -2 |
    +------+------+
    2 rows in set (0.00 sec)
    0 nào sau đó tạo ra lỗi cú pháp.

  • Chỉ có câu lệnh

    mysql> CREATE TABLE t1 (x INT, y INT);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> INSERT INTO t1 VALUES ROW(4,-2);
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> CREATE TABLE t2 (a INT, b INT);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> INSERT INTO t2 VALUES ROW(1,2);
    Query OK, 2 rows affected (0.01 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    
    mysql> TABLE t1 UNION TABLE t2;
    +------+------+
    | x    | y    |
    +------+------+
    |    4 |   -2 |
    |    1 |    2 |
    +------+------+
    2 rows in set (0.00 sec)
    
    mysql> TABLE t2 UNION TABLE t1;
    +------+------+
    | a    | b    |
    +------+------+
    |    1 |    2 |
    |    4 |   -2 |
    +------+------+
    2 rows in set (0.00 sec)
    0 cuối cùng mới có thể sử dụng mệnh đề
    mysql> VALUES ROW(4,-2), ROW(5,9), ROW(-1,3) 
        -> UNION 
        -> VALUES ROW(1,2), ROW(3,4), ROW(-1,3) 
        -> ORDER BY column_0 DESC LIMIT 3;
    +----------+----------+
    | column_0 | column_1 |
    +----------+----------+
    |        5 |        9 |
    |        4 |       -2 |
    |        3 |        4 |
    +----------+----------+
    3 rows in set (0.00 sec)
    3. Tuy nhiên, toàn bộ kết quả
    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    9 được ghi vào đích đầu ra
    mysql> VALUES ROW(4,-2), ROW(5,9), ROW(-1,3) 
        -> UNION 
        -> VALUES ROW(1,2), ROW(3,4), ROW(-1,3) 
        -> ORDER BY column_0 DESC LIMIT 3;
    +----------+----------+
    | column_0 | column_1 |
    +----------+----------+
    |        5 |        9 |
    |        4 |       -2 |
    |        3 |        4 |
    +----------+----------+
    3 rows in set (0.00 sec)
    3.

Kể từ MySQL 8.0.20, hai biến thể

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
9 này có chứa
mysql> VALUES ROW(4,-2), ROW(5,9), ROW(-1,3) 
    -> UNION 
    -> VALUES ROW(1,2), ROW(3,4), ROW(-1,3) 
    -> ORDER BY column_0 DESC LIMIT 3;
+----------+----------+
| column_0 | column_1 |
+----------+----------+
|        5 |        9 |
|        4 |       -2 |
|        3 |        4 |
+----------+----------+
3 rows in set (0.00 sec)
3 không được chấp nhận và bạn nên mong đợi sự hỗ trợ cho chúng sẽ bị xóa trong phiên bản MYSQL trong tương lai:

  • Trong khối truy vấn theo dõi của một biểu thức truy vấn, việc sử dụng

    mysql> VALUES ROW(4,-2), ROW(5,9), ROW(-1,3) 
        -> UNION 
        -> VALUES ROW(1,2), ROW(3,4), ROW(-1,3) 
        -> ORDER BY column_0 DESC LIMIT 3;
    +----------+----------+
    | column_0 | column_1 |
    +----------+----------+
    |        5 |        9 |
    |        4 |       -2 |
    |        3 |        4 |
    +----------+----------+
    3 rows in set (0.00 sec)
    3 trước khi
    mysql> VALUES ROW(4,-2), ROW(5,9), ROW(-1,3) 
        -> UNION 
        -> VALUES ROW(1,2), ROW(3,4), ROW(-1,3) 
        -> ORDER BY column_0 DESC LIMIT 3;
    +----------+----------+
    | column_0 | column_1 |
    +----------+----------+
    |        5 |        9 |
    |        4 |       -2 |
    |        3 |        4 |
    +----------+----------+
    3 rows in set (0.00 sec)
    9 tạo ra một cảnh báo. Thí dụ:

    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    3
  • Trong một khối dấu ngoặc đơn của biểu thức truy vấn, việc sử dụng

    mysql> VALUES ROW(4,-2), ROW(5,9), ROW(-1,3) 
        -> UNION 
        -> VALUES ROW(1,2), ROW(3,4), ROW(-1,3) 
        -> ORDER BY column_0 DESC LIMIT 3;
    +----------+----------+
    | column_0 | column_1 |
    +----------+----------+
    |        5 |        9 |
    |        4 |       -2 |
    |        3 |        4 |
    +----------+----------+
    3 rows in set (0.00 sec)
    3 (bất kể vị trí của nó so với
    mysql> VALUES ROW(4,-2), ROW(5,9), ROW(-1,3) 
        -> UNION 
        -> VALUES ROW(1,2), ROW(3,4), ROW(-1,3) 
        -> ORDER BY column_0 DESC LIMIT 3;
    +----------+----------+
    | column_0 | column_1 |
    +----------+----------+
    |        5 |        9 |
    |        4 |       -2 |
    |        3 |        4 |
    +----------+----------+
    3 rows in set (0.00 sec)
    9) tạo ra một cảnh báo. Thí dụ:

    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    4

    Những biến thể đó không được chấp nhận vì chúng khó hiểu, như thể chúng thu thập thông tin từ bảng được đặt tên thay vì toàn bộ biểu thức truy vấn (

    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    9).

Các truy vấn

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
9 có hàm tổng hợp trong mệnh đề
SELECT * FROM t1 UNION SELECT * FROM t2;
TABLE t1 UNION SELECT * FROM t2;
VALUES ROW(4,-2), ROW(5,9) UNION SELECT * FROM t2;
SELECT * FROM t1 UNION TABLE t2;
TABLE t1 UNION TABLE t2;
VALUES ROW(4,-2), ROW(5,9) UNION TABLE t2;
SELECT * FROM t1 UNION VALUES ROW(4,-2),ROW(5,9);
TABLE t1 UNION VALUES ROW(4,-2),ROW(5,9);
VALUES ROW(4,-2), ROW(5,9) UNION VALUES ROW(4,-2),ROW(5,9);
0 bị từ chối với
mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
05. Thí dụ:

mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
5
Liên minh bàn giao trong MySQL 8.0 so với MySQL 5.7

Trong MySQL 8.0, các quy tắc phân tích cú pháp cho

mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
0 và
mysql> SELECT 1, 2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql> SELECT 'a', 'b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
9 đã được tái cấu trúc để phù hợp hơn (cùng một cú pháp
mysql> CREATE TABLE t1 (x INT, y INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t1 VALUES ROW(4,-2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE t2 (a INT, b INT);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO t2 VALUES ROW(1,2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> TABLE t1 UNION TABLE t2;
+------+------+
| x    | y    |
+------+------+
|    4 |   -2 |
|    1 |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE t2 UNION TABLE t1;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    4 |   -2 |
+------+------+
2 rows in set (0.00 sec)
0 được áp dụng đồng đều trong mỗi bối cảnh như vậy) và giảm sự trùng lặp. So với MySQL 5.7, một số hiệu ứng có thể nhìn thấy của người dùng do công việc này, có thể yêu cầu viết lại các câu lệnh nhất định:

  • mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    09 cho phép từ khóa
    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    10 tùy chọn (
    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    11), tuân thủ SQL tiêu chuẩn.

  • Các kết nối sâu phải mà không được phép dấu ngoặc đơn (ví dụ:

    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    12), tuân thủ SQL tiêu chuẩn.

  • mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    13 hiện cho phép một mệnh đề
    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    14, tương tự như các kết nối bên trong khác.

  • Trình phân tích cú pháp chấp nhận dấu ngoặc đơn xung quanh các biểu thức truy vấn. Ví dụ,

    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    15 được cho phép. Xem thêm Phần & NBSP; 13.2.9, Biểu thức truy vấn dấu ngoặc đơn.

  • Trình phân tích cú pháp phù hợp hơn với vị trí được cho phép của tài liệu của các bộ sửa đổi truy vấn

    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    16 và
    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    17.

  • Làm tổ tay trái của các công đoàn, trước đây chỉ được phép trong các nhóm phụ, hiện được phép trong các tuyên bố cấp cao nhất. Ví dụ, câu lệnh này hiện được chấp nhận là hợp lệ:

    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    6
  • Các mệnh đề khóa (

    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    18,
    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    19) chỉ được phép trong các truy vấn không phải là-____. Điều này có nghĩa là dấu ngoặc đơn phải được sử dụng cho các câu lệnh
    mysql> CREATE TABLE t1 (x INT, y INT);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> INSERT INTO t1 VALUES ROW(4,-2);
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> CREATE TABLE t2 (a INT, b INT);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> INSERT INTO t2 VALUES ROW(1,2);
    Query OK, 2 rows affected (0.01 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    
    mysql> TABLE t1 UNION TABLE t2;
    +------+------+
    | x    | y    |
    +------+------+
    |    4 |   -2 |
    |    1 |    2 |
    +------+------+
    2 rows in set (0.00 sec)
    
    mysql> TABLE t2 UNION TABLE t1;
    +------+------+
    | a    | b    |
    +------+------+
    |    1 |    2 |
    |    4 |   -2 |
    +------+------+
    2 rows in set (0.00 sec)
    0 có chứa các mệnh đề khóa. Tuyên bố này không còn được chấp nhận là hợp lệ:

    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    7

    Thay vào đó, hãy viết tuyên bố như thế này:

    mysql> SELECT 1, 2;
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    +---+---+
    mysql> SELECT 'a', 'b';
    +---+---+
    | a | b |
    +---+---+
    | a | b |
    +---+---+
    mysql> SELECT 1, 2 UNION SELECT 'a', 'b';
    +---+---+
    | 1 | 2 |
    +---+---+
    | 1 | 2 |
    | a | b |
    +---+---+
    8