联合查询的基本语法形式:
select 语句1
union 【distinct | all】
select 语句2
union 【distinct | all】
select 语句3
。。。。。
;
可见:
可以将若干个查询语句,联合为一个查询结果,只要他们的字段数量相同——通常也最好对应字段饿类型也相同,否则内部会进行一定的转换,结果可能有问题。
说明:
1,多个联合查询语句的字段数量必须一样,类型最好一致;
2,union 后面可以加distinct或all,来设定是否需要消除重复行。默认可以不写,就是distinct(消除)
3,每个select语句中的order by 和limit子句,都只对其本身单独有效,而对整体结果无效。
但注意:
3.1 通常都必须将每个select语句的order 子句和limit子句括起来,类似这样:
(select .... order by ... limit ... )
union
(select .... order by ... limit ... )
;
则,此时,其中每个内部的order 和limit其实是失去意义了(即无效)
3.2, 如果不括起来,则前面的语句会报错(语法错误),而最后一个order 或limit,是对整体的排序和限定,而不是对最后一个。
select .... order by ... limit ...
union
select .... order by ... limit ...
; #此语句出错
select ....
union
select .... order by ... limit ...
; #此语句ok,只是order 和limit其实是针对“总体结果”
4,多个select语句联合查询后的结果字段,都是以第一个select语句的字段为准。如果其加了别名,则结果也是以别名为准。——包括在order 子句中,也应以别名为准。
举例1:
select pro_id, protype_id, price from product where protype_id = 1
union
select pro_id, protype_id, price from product where protype_id = 2 order by price