一个子查询的问题?
-- 显示出实际工资比总体平均工资低的女职工
create database 冰人集团 --建立数据库
go
use 冰人集团 --打开数据库
create table 部门
(
部门号 int primary key,
部门名称 char(10) not null
) --建立部门表
insert into 部门 values(1, '财务处 ') --填充数据
insert into 部门 values(2, '人事处 ')
insert into 部门 values(3, '市场部 ')
create table 职工 --建立职工表
(
职工号 int primary key,
姓名 char(10) not null,
性别 char(2) check(性别= '男 ' or 性别= '女 '),
出生日期 smalldatetime check(出生日期 <getdate()),
党员 char(2) check(党员= '是 ' or 党员= '否 '),
入职时间 smalldatetime check(入职时间 <getdate()),
所在部门 int foreign key references 部门(部门号),
籍贯 char(10)
)
insert into 职工 values(1, '孙华 ', '男 ', '1952-1-3 ', '是 ', '1970-10-10 ',1, '天津市 ')
insert into 职工 values(2, '陈明 ', '男 ', '1945-5-8 ', '否 ', '1965-1-1 ',2, '北京市 ')
insert into 职工 values(3, '程西 ', '女 ', '1980-6-10 ', '否 ', '2002-7-10 ',1, '北京市 ')
insert into 职工 values(4, '苏天气 ', '女 ', '1965-3-10 ', '是 ', '1987-7-10 ',2, '天津市 ')
insert into 职工 values(5, '刘少文 ', '男 ', '1942-1-1 ', '否 ', '1960-8-10 ',2,null)
insert into 职工 values(6, '刘新 ', '男 ', '1952-10-8 ', '否 ', '1970-7-1 ',1, '上海市 ')
insert into 职工 values(7, '余辉 ', '女 ', '1980-12-4 ', '否 ', '2001-7-10 ',3, '武汉市 ')
insert into 职工 values(8, '王晓艳 ', '女 ', '1980-11-10 ', '是 ', '2001-7-10 ',2, '河北省 ')
insert into 职工 values(9, '李玉 ', '女 ', '1964-2-12 ', '是 ', '1989-7-15 ',1, '天津市 ')
insert into 职工 values(10, '周涛 ', '男 ', '1963-2-10 ', '否 ', '1983-7-20 ',3, '河北省 ')
insert into 职工 values(11, '欧阳少兵 ', '男 ', '1965-4-19 ', '否 ', '1984-7-12 ',2, '北京市 ')
insert into 职工 values(12, '张旗 ', '男 ', '1980-11-10 ', '否 ', '1999-9-18 ',3, '天津市 ')
insert into 职工 values(13, '李涵 ', '女 ', '1982-5-10 ', '否 ', '2002-2-14 ',3, '天津市 ')
insert into 职工 values(14, '魏君 ', '女 ', '1977-3-23 ', '是 ', '1993-7-10 ',3,null)
insert into 职工 values(15, '李艺 ', '男 ', '1979-9-18 ', '否 ', '2001-7-20 ',3, '上海市 ')
create table 工资--建立工资表
(
职工号 int primary key foreign key references 职工(职工号),
月份 int check(月份> =1 and 月份 <=12),
基本工资 money check(基本工资> 0),
津贴 money check(津贴> =0),
补助 money check(补助> =0),
奖金 money check(奖金> =0),
扣除 money check(扣除> =0),
税收 money check(税收> =0)
)
insert into 工资 values(1,8,2800,1200,180,200,0,220)
insert into 工资 values(2,8,2600,1000,200,300,0,180)
insert into 工资 values(3,8,1880,880,200,260,50,120)
insert into 工资 values(4,8,2200,980,180,230,80,110)
insert into 工资 values(5,8,2300,880,210,0,0,125)
insert into 工资 values(6,8,2100,600,220,180,50,110)
insert into 工资 values(7,8,2200,800,180,200,120,120)
insert into 工资 values(8,8,2000,780,120,100,0,100)
insert into 工资 values(9,8,2500,870,130,150,0,120)
insert into 工资 values(10,8,2350,700,250,180,50,120)
insert into 工资 values(11,8,1900,800,260,130,0,100)
insert into 工资 values(12,8,1800,500,200,100,50,100)
insert into 工资 values(13,8,1580,500,200,100,0,100)
insert into 工资 values(14,8,1300,450,200,100,0,100)
insert into 工资 values(15,8,1380,450,200,100,0,10)
select 姓名 from 职工,工资 where 职工.职工号 in
(select 职工号 from 工资 where 基本工资+津贴+补助+奖金-扣除-税收
in(select 基本工资+津贴+补助+奖金-扣除-税收 from 工资,职工 where 职工.职工号=工资.职工号 and 性别= '女 ') <
(select avg(基本工资+津贴+补助+奖金-扣除-税收) from 工资)
) and 职工.职工号=工资.职工号 and 性别= '女 '
-- 报错
服务器: 消息 170,级别 15,状态 1,行 3
第 3 行: ' < ' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 5
第 5 行: ') ' 附近有语法错误。
[解决办法]
select 姓名
from 职工,工资
where 职工.职工号=工资.职工号
and 性别= '女 '
and (基本工资+津贴+补助+奖金-扣除-税收) < (select avg(基本工资+津贴+补助+奖金-扣除-税收) from 工资)
我的异常网推荐解决方案:软件开发者薪资,http://www.myexception.cn/other/1391128.html