关系型数据库基础之:组合查询
关系型数据库基础之:聚合函数与分组
http://www.2cto.com/database/201304/202179.html
7、组合查询:
使用子查询:
子查询分为相关子查询和非相关子查询。
相关子查询:有多少行就执行多少次;
非相关子查询:仅仅只查询一次。
所有的地方都可以放子查询,但是group by和order by不长用,而select、from、where、having里面比较常见。
子查询作为计算列:
select 列1,(子查询) as 列2 from 表名;
from语句中的子查询:
如果子查询放到from后面必须要给它一个名字,在from后面的子查询作为一个基础数据的提供者,可以单独运行。
where语句中的子查询:
select 列A from 表名 where 列B=(子查询);
返回多个结果的子查询:
select columnaA,columnaB from table1 where columnaC in(select columnaD from table2);
可以用and、in、not in来进行连接。
子查询不仅仅限制使用在select语句中,也可以在insert、delete、update等其他sql语句中包含子查询。
在子查询中使用运算符:
A:使用exists和not exists运算符:
exists相当于
c语言中的if条件,它后面总是跟一个子查询,只要子查询返回了行,exists的值就为真,反之为假。
exists后面跟的子查询是一个独立查询语句,一般写在where后面。
B:使用all运算符:
比较里面所有的数值。
C:使用any运算符:
比较任意一个,忽略空值。
any和all的工作方式相同,不同的是:在子查询返回的值当中,只要有一行满足比较运算,那么比较运算表达式就为真。
组合查询数据:
使用union和nuion all运算符:
union是组合两个结果。
如果只是用nuion那么遇到重复数据会自动删除。用nuion all就能全部都显示出来。
用union和union all来组合分组必须列的数量、类型和顺序要全部相同。