码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-03-15 13:39:10      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

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)

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

标签:

原文地址:http://www.cnblogs.com/aaron-shu/p/4339532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!