继续连着昨天数据库的基本操作,今天看下MySQL的union功能和排序

 union: UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。如果多个 SELECT 语句会删除重复的数据。需要注意的是:

UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)

UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

基本语法为:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

让我们看下,只有一列的情况(相同的一个字段)

(四)MySQL基础知识之union和排序_测试

mysql> select name from teacher where id = 2 union select name from course where id = 6;


+---------+

| name    |

+---------+

| 李四    |

| Liulang |

+---------+

2 rows in set (0.02 sec)

将teacher表中id =2 的name字段的值和 course表中id = 6的name字段的值连起来

接下里,我们再看看多个字段且没有where条件的union

(四)MySQL基础知识之union和排序_数据_02

通过对比,teacher表中有4个数据,course表中有6个数据,为什么全部union是9个数据呢。这就需要前面说的知识,union和 union all的区别了。

union会将重复的数据删除,这里 teacher和course都有重复的数据 张三,union后将course表中重复的那条数据删除了。接下来我们用union all看下:

(四)MySQL基础知识之union和排序_数据_03

可以看到,是10条数据了,teacher和course表中的数据都在这里了。


上面说的是没有where条件语句的union使用方法,如果有where 条件语句呢

我们先看下不符合条件的用法:

mysql> select id,name,time from teacher where id > 2 union select name from course where id < 3;

ERROR 1222 (21000): The used SELECT statements have a different number of columns

mysql> select id,name,time from teacher where id > 2 union all select name from course where id < 3;

ERROR 1222 (21000): The used SELECT statements have a different number of columns

teacher表中选取了id,name和time 3列,course表中只选取了name一列,这样是不行的。如果我们选取相同列呢?

mysql> select id,name from teacher where id > 2 union all select id,name from course where id > 4;

+----+----------+

| id | name     |

+----+----------+

|  3 | 王五     |

|  4 | 赵六     |

|  5 | Shanshan |

|  6 | Liulang  |

+----+----------+

4 rows in set (0.02 sec)

这样就可以了,即使where分支语句的条件内容不一样,也不影响展示数据。其中3,4 是teacher表中的, 5,6是course表中的。


union功能说完后,我们来看看MySQL的排序功能

如果需要对读取的数据进行排序,就可以使用 MySQL 的 ORDER BY 子句来设定按照哪个字段哪种方式来进行排序,再返回搜索结果。

语法如下:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...

ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]

可以使用任何字段来作为排序的条件,从而返回排序后的查询结果

可以设定多个字段来排序

可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。默认情况下,按照升序排列。

可以添加 WHERE...LIKE 子句来设置条件


我们来看下实例:

(四)MySQL基础知识之union和排序_测试开发_04

默认生序,我们来用下降序

(四)MySQL基础知识之union和排序_测试_05

完美,降序成功了。

现在我们加上where条件分支语句,看下排序结果

(四)MySQL基础知识之union和排序_数据_06

很明显,where分支语句起了作用,选择 > 3的,则返回结果显示从4开始


好了,今天就讲到这里吧~

(四)MySQL基础知识之union和排序_mysql_07