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

sql学习总结(3)——SQL单表查询技术

时间:2015-03-15 13:38:17      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

基本格式:

select [all | distinct] select_list

from table_list/view_list

[where conditions]

[group by group_list]

[having conditions]

[order by order_list]

例:

select 职工号,姓名,工资 as 月工资,(工资*12+5000)/6 as 年奖金 from 职工

select *from 职工 where 仓库号 in (‘wh1’,’wh2’) and 性别!=’女’ and 工资>=1300 and 工资<=2100

 

3.1几种特殊SQL查询

3.1.1模糊查询

通配符

含义

%

包含0个或多个字符

_(下划线)

包含一个字符

[]

指定范围(如[a~z]) 任何单一字符

[^]

不属于指定范围(如[^a~z])  任何单一字符

--显示工资的百位数不在2~6之间,姓名中含有“平”字,并且仓库号在wh1和wh3中的职工信息:

select * from 职工 where 工资 like ‘_[^2-6]%’ and 姓名 like ‘%平%’ and 仓库号 in (‘wh1’,’wh3’)

 

3.1.2空值和限制范围查询

select * from 职工 where 工资 between 1500 and 1800 and 性别 is not null and 仓库号in (‘wh1’,’wh2’)

 

3.1.3显示部分记录查询

select top [3* | 30 percent] from 职工 where 工资>1500

 

3.1.4保存查询

select 职工号,姓名,工资,工资/30 as 天工资,工资*3 季度工资,工资*12 as 年工资 into 含计算字段的表 from 职工 where 工资<=1900

 

3.2单表嵌套查询

select * from 仓库 where 仓库号!=’wh1’ and 面积>=(select 面积 from 仓库 where 仓库号=’wh1’)

 

3.3统计函数查询

统计函数

含义

count(*)

统计选择的记录的个数

count()

统计特定列中值的个数

sum()

计算总和(必须是数值型字段)

avg()

计算平均值(必须是数值型字段)

max()

确定最大值

min()

确定最小值

select 职工.*,(select avg(工资) from 职工) as 平均工资,工资-(select avg(工资) from 职工) as 与平均工资的差 from 职工 where abs(工资-(select avg(工资) from 职工))>200

 

3.4排序和Compute By查询

select top 3 * from 职工 order by 工资 asc

select * from 职工 order by 工资desc,职工ID asc

 

--显示工资大于2000的职工信息及职工信息

select * from 职工 where 工资>2000

compute avg(工资),max(工资),min(工资),sum(工资)

 

--显示不同仓库的职工信息及职工汇总信息

select * from 职工 order by 仓库号

compute avg(工资),max(工资),min(工资),sum(工资) by 仓库号

 

3.5分组查询

分组查询关键字:group by,如果是分组之前的条件要用where,如果是分组之后的条件则用having。

 

显示工资大于zg1职工工资的不同仓库的平均工资、工资和、最大工资、最小工资、工资人数信息:

select 仓库号,max(工资) as最大工资,min(工资) as 最小工资,sum(工资) as 工资总和,avg(工资) as 平均工资,count(*) as 职工人数 from 职工 where 工资>(select 工资 from 职工 where 职工号=’zg1’) group by 仓库号

 

显示不同仓库的平均工资、工资和、最大工资、最小工资、工资人数信息,但要求该仓库的平均工资大于1650:

select 仓库号,max(工资) as最大工资,min(工资) as 最小工资,sum(工资) as 工资总和,avg(工资) as 平均工资,count(*) as 职工人数 from 职工 group by 仓库号 having avg(工资)>1650

 

显示职工所在仓库的最大工资与最小工资之差在700~800之间的职工信息:

select * from 职工where 仓库号 in(

select 仓库号from 职工 group by 仓库号

having max(工资)-min(工资) between 700 and 800)

 

显示不同职工经手订单金额最大的订单信息:

select a.* from 订购单 a where 金额=(

select max(金额) from 订购单 where 职工号=a.职工号)

注意:这里应该边求出每名职工订单金额的最大值,边显示该职工所对应的这条订单的信息。

很多人这样做:

select * from 订购单 where 金额 in (select max(金额) from 订购单 group by 职工号)

这种做法错误。

 

3.6量词查询

常用量词any、all和some,其中any和some是同义词,只要子查询有一行使结果为真,则为真;all要求子查询中所有行为真时,才为真。

select * from 职工  where 工资>=any(select 工资 from 职工 where 仓库号=’wh2’)

select * from 职工 where 工资>=all(select 工资 from 职工 where 仓库号=’wh1’)

sql学习总结(3)——SQL单表查询技术

标签:

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

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