高级查询:
1.联合查询:为对行的扩展,
select 列名 from 表名 union select 列名 from 表名,
union表示联合;
2.连接查询:为对行的扩展,会形成笛卡尔积,所以不适于数据量大的数据,会导致运行速度很慢,
select 表名1.列名1,表名1.列名2,表名2.列名3 from 表名1,表名2 where 表名1.列名4=表名2.列名5,
其中列名如果有重名的则必须在其前面加上表名,如果不重名则可以不加;
select 表名.列名,表名.列名,列名 from 表名 join 表名 on 表名.n列名=表名.列名,
join表示连接表,on后面加条件,如果在join前面加上left或right则表示以左边或者右边的表为主,该部分全部显示,如果没有则会自动补空;
3.子查询:子查询的结果作为父查询的条件使用
无关子查询:子查询和父查询没有关系,子查询单独拿出来可以执行
例1:查找民族为“汉族”的所有人员信息
select * from info where nation =(select code from nation where name='汉族')
例2:查询所有厂商是“一汽大众”的汽车信息
select * from car where brand in(select brand_code from brand where prod_code in(select prod_code from Productor where prod_name='一汽大众')
相关子查询:子查询和父查询有关系,子查询不能单独拿出来执行
例:查询油耗低于该系列平均油耗的汽车信息
分析:
select * from car where oil<(该系列平均油耗)
select avg(oil) from car where brand='该系列'
答:
select * from car a where oil<(select avg(oil) from car b where b.brand=a.brand)