从0到1学习网络安全 【MySQL基础-MySQL UNION 操作符】

MySQL UNION 操作符

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

语法

SELECT 字段 FROM 表 【WHERE 条件】
UNION 【ALL | DISTINCT】
SELECT 字段 FROM 表 【WHERE 条件】

  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
  • ALL: 可选,返回所有结果集,包含重复数据。


演示数据库

下面是选自 "mydb_jianshu" 表的数据:

mysql> select * from mydb_jianshu;
+------------+----------------------------+----------------+-----------------+
| jianshu_id | jianshu_title              | jianshu_author | submission_date |
+------------+----------------------------+----------------+-----------------+
|          2 | 学习网络安全从0到1         | Fangdm         | 2018-02-09      |
|          3 | MySQL基础                  | Fangdm         | 2018-02-09      |
+------------+----------------------------+----------------+-----------------+
2 rows in set (0.00 sec)

下面是选自 "user" 表的数据:

mysql> select * from user;
+---------+-----------+---------------+-----------------+
| user_id | user_name | user_password | submission_date |
+---------+-----------+---------------+-----------------+
|       1 | admin     | admin         | 2018-02-28      |
+---------+-----------+---------------+-----------------+
1 row in set (0.00 sec)


SQL UNION 实例

下面的 SQL 语句从 "mydb_jianshu" 和 "user" 表中选取不同的 submission_date(只有不同的值):

mysql> select submission_date from mydb_jianshu union select submission_date from user order by submission_date;
+-----------------+
| submission_date |
+-----------------+
| 2018-02-09      |
| 2018-02-28      |
+-----------------+
2 rows in set (0.00 sec)

注意:UNION 默认只会选取不同的值。我们可以使用 UNION ALL 来选取重复的值!


SQL UNION ALL 实例

下面的 SQL 语句从 "mydb_jianshu" 和 "user" 表中选取所有的 submission_date(也有重复的值):

mysql> select submission_date from mydb_jianshu union all select submission_date from user order by submission_date;
+-----------------+
| submission_date |
+-----------------+
| 2018-02-09      |
| 2018-02-09      |
| 2018-02-28      |
+-----------------+
3 rows in set (0.00 sec)


带有 WHERE 的 SQL UNION ALL

下面的 SQL 语句从 "mydb_jianshu" 和 "user" 表中选取所有的日期为 2018-02-09 的数据(也有重复的值):

mysql> select * from mydb_jianshu where submission_date='2018-02-09' union all select * from user where submission_date="2018-02-09" order by submission_date;
+------------+----------------------------+----------------+-----------------+
| jianshu_id | jianshu_title              | jianshu_author | submission_date |
+------------+----------------------------+----------------+-----------------+
|          2 | 学习网络安全从0到1         | Fangdm         | 2018-02-09      |
|          3 | MySQL基础                  | Fangdm         | 2018-02-09      |
+------------+----------------------------+----------------+-----------------+
2 rows in set (0.03 sec)



注:注入测试时我们可以利用 UNION查询 来获得其他表中的信息。

从0到1学习网络安全 【目录】

你可能感兴趣的