继续连着昨天数据库的基本操作,今天看下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> 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
通过对比,teacher表中有4个数据,course表中有6个数据,为什么全部union是9个数据呢。这就需要前面说的知识,union和 union all的区别了。
union会将重复的数据删除,这里 teacher和course都有重复的数据 张三,union后将course表中重复的那条数据删除了。接下来我们用union all看下:
可以看到,是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 子句来设置条件
我们来看下实例:
默认生序,我们来用下降序
完美,降序成功了。
现在我们加上where条件分支语句,看下排序结果
很明显,where分支语句起了作用,选择 > 3的,则返回结果显示从4开始
好了,今天就讲到这里