联合查询(mysql)

Mysql可以将多个查询(多条select语句)的结果作为单个查询结果集返回。

(实质是记录上的拼接,是一种并操作)

基本有两种情况:联合相同表的查询和联合不同表的查询。联合相同表的查询其实等价于某条具有多个where子句的select语句。

例子:

 
  1. select name,id,age

  2. from students

  3. where age<=20

  4. union

  5. select name,id,age

  6. from studnets

  7. where id in (14,15);

等价于:

 
  1. select name,id,age

  2. from students

  3. where age <= 20

  4. or id in (14,15);

注意:

1 union必须由两条或两条以上的select语句组成,语句之剑用关键字union分隔

(查询结果的列标题为第一个查询语句的列标题)

2 union中的每个查询必须包含相同的列,表达式或聚集函数(数量相同,类型相同或者可转换)

3 列数据类型必须兼容:类型不必完全相同,但必须是dbms可以隐含转换的类型。

(在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。)

union默认在查询结果中去除重复的行,如果想返回所有匹配行,使用union all

order by在一个数据集合查询里也只能出现一次并且出现在最后。
因此,在联合查询里,order by 要写在最后一个子查询之后,并且,该排序是对整个联合查询出来的结果集排序的,并不是只对最后一个子查询排序(在union之后)

要在子句中使用 ORDER BY,即将select子句的结果先排序,然后再把这些子句查询的结果进行集合。

在子句中使用 ORDER BY,由于优先级问题,需要将整个子句加圆括号(),且必须与limit 结合使用:

猜你喜欢

转载自blog.csdn.net/qq_39539367/article/details/81490410