基本格式:
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’)