MySQL联合查询实现方法详解
MySQL联合查询是一种利用UNION关键字将多个SELECT语句的结果集合并在一起的查询方式。本文将详细讲解MySQL联合查询的使用方法和注意事项。
语法格式
SELECT column1, column2, ... FROM table1
UNION [ALL | DISTINCT]
SELECT column1, column2, ... FROM table2
[UNION [ALL | DISTINCT]
SELECT column1, column2, ... FROM table3, ...]
- column1, column2, ...:要查询的列名,可以是一个或多个。
- table1, table2, ...:要查询的数据表名,可以是一个或多个。
- [ALL | DISTINCT]:ALL表示返回所有行(包括重复行),DISTINCT表示返回不重复行,默认为DISTINCT。
示例说明
简单联合查询
假设我们有两个数据表,分别为table1
和table2
,它们的结构如下:
CREATE TABLE table1 (
id INT PRIMARY KEY,
name VARCHAR(10)
);
CREATE TABLE table2 (
id INT PRIMARY KEY,
address VARCHAR(100)
);
现在我们想要查询出table1
和table2
的所有记录,可以使用简单的联合查询语句:
SELECT * FROM table1
UNION
SELECT * FROM table2;
上述语句将会返回table1
和table2
的所有记录,并去除其中的重复记录。如果想要保留重复记录,可以使用UNION ALL
关键字。
复杂联合查询
假设我们有三个数据表,分别为table1
、table2
和table3
,它们的结构如下:
CREATE TABLE table1 (
id INT PRIMARY KEY,
name VARCHAR(10),
age INT
);
CREATE TABLE table2 (
id INT PRIMARY KEY,
address VARCHAR(100),
gender VARCHAR(2)
);
CREATE TABLE table3 (
id INT PRIMARY KEY,
phone VARCHAR(20),
email VARCHAR(50)
);
我们现在想要查询出以下信息:
table1
中所有年龄小于等于30的记录。table2
中所有性别为男的记录。table3
中所有email中包含“@qq.com”关键字的记录。
可以使用下面的联合查询语句:
SELECT id, name, age, NULL as address, NULL as gender, NULL as phone, NULL as email FROM table1
WHERE age <= 30
UNION ALL
SELECT NULL as id, NULL as name, NULL as age, address, gender, NULL as phone, NULL as email FROM table2
WHERE gender = '男'
UNION ALL
SELECT NULL as id, NULL as name, NULL as age, NULL as address, NULL as gender, phone, email FROM table3
WHERE email LIKE '%@qq.com%';
上述语句将会返回符合条件的所有记录,并将不存在的列填充为NULL。如果需要在返回结果中显示这些列的名称,可以使用AS
关键字。
注意事项
- 联合查询的数据表的列数必须相等,数据类型也必须一致。
- 在使用
UNION
关键字时,默认去除重复记录,如果需要保留重复记录,需要使用UNION ALL
关键字。 - 联合查询中每个SELECT语句的列名必须相同,如果列名不同则需要使用
AS
关键字为列起别名。 - 联合查询耗费的性能较高,在查询大量数据时应该尽量避免使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL联合查询实现方法详解 - Python技术站