MySQL-联合UNION

时间:2020-02-23 14:41:04  来源:igfitidea点击:

在本教程中,我们将学习MySQL中的union和union。

当我们要合并多个SELECT查询的结果时,我们使用UNION运算符。

以下是在查询中使用UNION时要注意的几点。

  • 使用UNION时,每个SELECT查询的列数必须相同。

  • SELECT查询中的列也必须具有相同的顺序。

  • SELECT查询中的列的数据类型也必须匹配。

UNION的语法

mysql> SELECT column_name FROM table_a
UNION
SELECT column_name FROM table_b;

其中,在两个SELECT语句中," column_name"必须具有相同的类型和相同的顺序。

在本教程中,我们将使用" office"和" employeeaddress"表。

桌子:办公室

mysql> SELECT * FROM office;
+----------+--------------+---------------------+--------------+-----------+-------+---------+---------+
| officeid | officename   | addressline1        | addressline2 | city      | state | country | pincode |
+----------+--------------+---------------------+--------------+-----------+-------+---------+---------+
| o01      | Web Projects | #123 Awesome Street | Super Main   | Bangalore | KA    | INDIA   | 560000  |
| o02      | Apps         | #321 Super Street   | Action Road  | Kolkata   | WB    | INDIA   | 700000  |
| o03      | Game         | #12 Super Street    | Master Block | Chennai   | TN    | INDIA   | 600000  |
+----------+--------------+---------------------+--------------+-----------+-------+---------+---------+
3 rows in set (0.00 sec)

表:员工地址

mysql> SELECT * FROM employeeaddress;
+----+------------+-------------+--------------------------------+-----------------+-----------+-------+---------+---------+
| id | employeeid | addresstype | addressline1                   | addressline2    | city      | state | country | pincode |
+----+------------+-------------+--------------------------------+-----------------+-----------+-------+---------+---------+
|  1 | e01        | PRIMARY     | #12 street                     | Action block    | Bangalore | KA    | INDIA   | 560000  |
|  2 | e03        | PRIMARY     | Super Housing Complex Block 22 | Major Street    | Chennai   | TN    | INDIA   | 600000  |
|  3 | e03        | SECONDARY   | House #301 ABC Colony          | Jupiter Block   | Kolkata   | WB    | INDIA   | 700000  |
|  4 | e02        | PRIMARY     | Pizza Street                   | Foodies Block   | Kolkata   | WB    | INDIA   | 700000  |
|  5 | e04        | PRIMARY     | Fruits Apartment               | Fresh Block     | Bangalore | KA    | INDIA   | 560000  |
|  6 | e05        | PRIMARY     | Apartment 10                   | Fast Food Block | Chennai   | TN    | INDIA   | 600000  |
+----+------------+-------------+--------------------------------+-----------------+-----------+-------+---------+---------+
6 rows in set (0.00 sec)

UNION示例

在查询中使用UNION时,我们将从表中获得不同的值。

在以下示例中,我们列出了" employeeadress"和" office"表中不同的所有城市,州和国家/地区名称。

mysql>SELECT city, state, country FROM employeeaddress
UNION
SELECT city, state, country FROM office;
+-----------+-------+---------+
| city      | state | country |
+-----------+-------+---------+
| Bangalore | KA    | INDIA   |
| Chennai   | TN    | INDIA   |
| Kolkata   | WB    | INDIA   |
+-----------+-------+---------+
3 rows in set (0.00 sec)

在employeeaddress表中,我们可以看到重复的城市名称,例如班加罗尔,钦奈和加尔各答,州名称例如KA,TN和WB。

但是在查询中使用UNION只会返回一次城市和州名称,因为它只选择了唯一的值(即不同的值)。

全联合 UNION ALL

当我们要获取所有值而不是唯一值时,可以使用UNION ALL。

UNION ALL的语法

mysql> SELECT column_name FROM table_a
UNION ALL
SELECT column_name FROM table_b;

其中,在两个SELECT语句中," column_name"必须具有相同的类型和相同的顺序。

在下面的示例中,我们使用UNION ALL检索所有值。

mysql>SELECT city, state, country FROM employeeaddress
UNION ALL
SELECT city, state, country FROM office;
+-----------+-------+---------+
| city      | state | country |
+-----------+-------+---------+
| Bangalore | KA    | INDIA   |
| Chennai   | TN    | INDIA   |
| Kolkata   | WB    | INDIA   |
| Kolkata   | WB    | INDIA   |
| Bangalore | KA    | INDIA   |
| Chennai   | TN    | INDIA   |
| Bangalore | KA    | INDIA   |
| Kolkata   | WB    | INDIA   |
| Chennai   | TN    | INDIA   |
+-----------+-------+---------+
9 rows in set (0.00 sec)