本文将介绍mysql中select的高级用法

一、 union 和 union all

UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。 UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。 同时,每条 SELECT 语句中的列的顺序必须相同.

SQL UNION 语法:

--默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL
--当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行
SELECT column_name FROM table1
UNION
SELECT column_name FROM table2

SQL UNION ALL 语法

--UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
SELECT column_name FROM table1
UNION ALL
SELECT column_name FROM table2

注意事项:

1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名

2、UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同

特殊用法:

在不借助实体表的情况下,即只有select,不使用from,如果想获得多行select结果集

select 1 as row_num,'a' as name
union all
select 2,'a'
union all
select 3,'b'
union all
select 4,'c'

执行结果如下:

row_num name
1 a
2 a
3 b
4 c

二、 case when then else end 语法

格式

Case具有两种格式。简单Case函数和Case搜索函数。

--简单Case函数
CASE sex
         WHEN '1' THEN '男'
         WHEN '2' THEN '女'
ELSE '其他' END

--Case搜索函数
CASE WHEN sex = '1' THEN '男'
         WHEN sex = '2' THEN '女'
ELSE '其他' END

注意

  • 这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。

  • 还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。