Mysql联合(union)查询
基本概念将两个“字段数量相同”的查询结果数据,以“上下堆叠”的方式合并为一个结果数据的查询语句;比如假设:select f1, f2, f3 from tab1 的结果为:
联合查询的基本语法形式:select 语句1union 【distinct | all】select 语句2union 【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 ...unionselect .... order by ... limit ...; #此语句出错 select .... unionselect .... order by ... limit ...; #此语句ok,只是order 和limit其实是针对“总体结果”4,多个select语句联合查询后的结果字段,都是以第一个select语句的字段为准。如果其加了别名,则结果也是以别名为准。——包括在order 子句中,也应以别名为准。 举例1:select pro_id, protype_id, price from product where protype_id = 1unionselect pro_id, protype_id, price from product where protype_id = 2 order by price
举例2:(select pro_id, protype_id, price from product where protype_id = 1 order by price)union(select pro_id, protype_id, price from product where protype_id = 2 order by price)