sql学习总结(4)——SQL多表查询技术

4.1笛卡尔积

select 姓名,工资,城市 from 职工,仓库

仓库5条记录,职工表18条记录,结果18*5=90条记录。

 

职工表18个员工,仓库表5个仓库,即5个职工所在的城市,若要显示职工的姓名、工资及所在城市信息,结果应该为18条记录:

select 姓名,工资,城市 from 职工,仓库 where 职工.仓库号=仓库.仓库号

 

4.2带有运算符的多表查询

显示工资不在1500~2000之间,并且城市为空的职工姓名、工资及所在城市信息:

select 姓名,工资,城市, from 职工,仓库 where 职工.仓库号=仓库.仓库号and not(工资 between 1500 and 2000) and 城市 is null

 

4.3带有统计函数的多表查询

显示职工的姓名、工资、工资与平均工资之差及销售金额信息:

select 姓名,工资,工资-(select avg(工资) from 职工) as 与平均工资的差,金额 from 职工,订购单 where 职工.职工号=订购单.职工号

 

4.4带有谓词的多表查询

显示已有职工的仓库信息:

/*利用谓词IN实现*/

select * from 仓库 where 仓库号in(select 仓库号 from 职工)

/*利用谓词exists实现*/

select * from 仓库 where exists (select * from 职工 where 仓库号=仓库.仓库号)

 

4.5带有排序和分组的多表查询

显示wh1或wh2仓库中,工资不大于职工zg16的工资的职工信息,并要求职工姓名不含有“平”字,然后按工资从低到高显示:

select * from 职工 where 工资<=(select 工资 from 职工 where 职工号=’zg16’) and 姓名 not like ‘%平%’ and 仓库号 in(‘wh1’,’wh2’) order by 工资

 

显示同职工的姓名、平均销售金额和最大销售金额信息,条件是平均销售金额大于10000,最大销售金额大于16000:

select 姓名,avg(金额) as 平均金额,max(金额) as 最大金额 from 职工,订购单 where 职工.职工号=订购单.职工号 group by 姓名 having avg(金额)>10000 and max(金额)>16000

 

4.6多表嵌套查询

显示城市不在上海的职工信息:

select * from 职工 where 仓库号 in (select 仓库号 from 仓库 where 城市!=’上海’)

 

显示不同仓库职工的平均销售金额和仓库号信息,条件是平均销售金额大于15000或最大销售金额小于18000、工资大于仓库面积大于800的所有职工的平均工资:

select 仓库号,avg(金额) as 平均金额 from 职工,订购单 where 职工.职工号=订购单.职工号 and 工资>(select avg(工资) from 职工 where 仓库号 in(select 仓库号 from 仓库 where 面积>800) group by 仓库号 having avg(金额)<15000 or max(金额)<18000

 

4.7超连接查询

包括:内连接(inner join)、左连接(left join)、右连接(right join)、全连接(full join)

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。