求财务部收入最高的员工姓名
方法一:
select name
from salary s1,employees,departments
where employees.employeeid=s1.employeeid
and employees.departmentid=departments.departmentid and departmentname='财务部'
and not exists
(select *
from salary s2
where s2.employeeid=s1.employeeid
and s2.income>s1.income)方法二:
create view max_income
as
select employees.employeeid,name,income
from salary s1,employees,departments
where employees.employeeid=s1.employeeid
and employees.departmentid=departments.departmentid and departmentname='财务部'
select name from max_income m1
where not exists
(select * from max_income m2
where m1.employeeid=m1.employeeid
and m2.income>m1.income)方法一的结果不正确,方法二的结果是正确的,但是二者其实就是一种思想演变的两种不同的写法而已呀,为什么第一种不行呢!
创建表的SQL语句如下USE YGGL
CREATE TABLE Employees
( EmployeeID char(6) primary key,
Name char(10) NOT NULL,
education char(4) not null,
workyear tinyint null,
Address varchar(50) NOT NULL,
Zip Char(6) NULL,
PhoneNumber char(12) NULL,
EmailAddress varchar(20) NULL,
DepartmentID char(3) NOT NULL,
Birthday datetime NOT NULL,
Sex bit NOT NULL,
)
create table departments
( departmentID char(3) primary key,
departmentname varchar(30),
Note text)
go
create table salary
(
employeeID char(6) primary key,
inCome float,
outCome float
)
go
insert into employees values('000001','王林','大专',8,'中山路32-1-508','210003','3355668',null,'2','1956-1-23',1)
insert into employees values('010008','伍容华','本科',3,'北京东路100-2','210001','3321321',null,'1','1966-3-28',1)
insert into employees values('020010','王向荣','硕士',2,'四牌路10-10-108','210006','3792361',null,'1','1972-12-9',1)
insert into employees values('020018','李丽','大专',6,'中山东路102-2','210002','3416601','[email protected]','1','1950-7-30',0)
insert into employees values('102201','刘明','本科',3,'虎距路100-2','210013','3606608',null,'5','1962-10-18',1)
insert into employees values('102208','朱俊','硕士',2,'牌楼巷5-3-1806','210013','3606608','[email protected]','5','1962-10-18',1)
insert into employees values('108991','钟敏','硕士',4,'中山路108-3-105','210004','4808817','[email protected]','5','1955-09-28',0)
insert into employees values('111006','张石兵','本科',1,'解放路34-9-1-203','210010','4563418','[email protected]','5','1964-10-01',1)
insert into employees values('210678','林涛','大专',2,'中山北路247-2-303','210008','3467337',null,'3','1967-04-02',1)
insert into employees values('302566','李玉珉','本科',3,'热和路209-3','210018','8765991','[email protected]','4','1958-09-20',1)
insert into employees values('308759','叶凡','本科',2,'北京西路3-7-502','210001','3608901',null,'4','1968-11-18',1)
insert into employees values('504209','陈林琳','大专',5,'汉中路120-4-102','210002','4468158',null,'4','1959-09-03',0)insert into departments values('1','财务部',null)
insert into departments values('2','人力资源部',null)
insert into departments values('3','经理办公室',null)
insert into departments values('4','研发部',null)
insert into departments values('5','市场部',null)insert into salary values('000001',2100.8,123.09)
insert into salary values('010008',1582.62,88.03)
insert into salary values('102201',2569.88,185.65)
insert into salary values('111006',1987.01,79.58)
insert into salary values('504209',2066.15,108.0)
insert into salary values('302566',2980.7,210.2)
insert into salary values('108991',3259.98,281.52)
insert into salary values('020010',2860.00,198.0)
insert into salary values('020018',2347.68,180.0)
insert into salary values('308759',2351.98,199.08)
insert into salary values('210678',2240.00,121.0)
insert into salary values('102208',1980.00,100.0)
方法一:
select name
from salary s1,employees,departments
where employees.employeeid=s1.employeeid
and employees.departmentid=departments.departmentid and departmentname='财务部'
and not exists
(select *
from salary s2
where s2.employeeid=s1.employeeid
and s2.income>s1.income)方法二:
create view max_income
as
select employees.employeeid,name,income
from salary s1,employees,departments
where employees.employeeid=s1.employeeid
and employees.departmentid=departments.departmentid and departmentname='财务部'
select name from max_income m1
where not exists
(select * from max_income m2
where m1.employeeid=m1.employeeid
and m2.income>m1.income)方法一的结果不正确,方法二的结果是正确的,但是二者其实就是一种思想演变的两种不同的写法而已呀,为什么第一种不行呢!
创建表的SQL语句如下USE YGGL
CREATE TABLE Employees
( EmployeeID char(6) primary key,
Name char(10) NOT NULL,
education char(4) not null,
workyear tinyint null,
Address varchar(50) NOT NULL,
Zip Char(6) NULL,
PhoneNumber char(12) NULL,
EmailAddress varchar(20) NULL,
DepartmentID char(3) NOT NULL,
Birthday datetime NOT NULL,
Sex bit NOT NULL,
)
create table departments
( departmentID char(3) primary key,
departmentname varchar(30),
Note text)
go
create table salary
(
employeeID char(6) primary key,
inCome float,
outCome float
)
go
insert into employees values('000001','王林','大专',8,'中山路32-1-508','210003','3355668',null,'2','1956-1-23',1)
insert into employees values('010008','伍容华','本科',3,'北京东路100-2','210001','3321321',null,'1','1966-3-28',1)
insert into employees values('020010','王向荣','硕士',2,'四牌路10-10-108','210006','3792361',null,'1','1972-12-9',1)
insert into employees values('020018','李丽','大专',6,'中山东路102-2','210002','3416601','[email protected]','1','1950-7-30',0)
insert into employees values('102201','刘明','本科',3,'虎距路100-2','210013','3606608',null,'5','1962-10-18',1)
insert into employees values('102208','朱俊','硕士',2,'牌楼巷5-3-1806','210013','3606608','[email protected]','5','1962-10-18',1)
insert into employees values('108991','钟敏','硕士',4,'中山路108-3-105','210004','4808817','[email protected]','5','1955-09-28',0)
insert into employees values('111006','张石兵','本科',1,'解放路34-9-1-203','210010','4563418','[email protected]','5','1964-10-01',1)
insert into employees values('210678','林涛','大专',2,'中山北路247-2-303','210008','3467337',null,'3','1967-04-02',1)
insert into employees values('302566','李玉珉','本科',3,'热和路209-3','210018','8765991','[email protected]','4','1958-09-20',1)
insert into employees values('308759','叶凡','本科',2,'北京西路3-7-502','210001','3608901',null,'4','1968-11-18',1)
insert into employees values('504209','陈林琳','大专',5,'汉中路120-4-102','210002','4468158',null,'4','1959-09-03',0)insert into departments values('1','财务部',null)
insert into departments values('2','人力资源部',null)
insert into departments values('3','经理办公室',null)
insert into departments values('4','研发部',null)
insert into departments values('5','市场部',null)insert into salary values('000001',2100.8,123.09)
insert into salary values('010008',1582.62,88.03)
insert into salary values('102201',2569.88,185.65)
insert into salary values('111006',1987.01,79.58)
insert into salary values('504209',2066.15,108.0)
insert into salary values('302566',2980.7,210.2)
insert into salary values('108991',3259.98,281.52)
insert into salary values('020010',2860.00,198.0)
insert into salary values('020018',2347.68,180.0)
insert into salary values('308759',2351.98,199.08)
insert into salary values('210678',2240.00,121.0)
insert into salary values('102208',1980.00,100.0)
from salary as a,employees as b,departments as c
where b.employeeid=a.employeeid
and b.departmentid=c.departmentid and c.departmentname='财务部'
and not exists
(select *
from salary s1 inner join employees as s2 on s2.employeeid=s1.employeeid
where s2.departmentid=b.departmentid
and s1.income>a.income)
select top 1 e.* , d.* , s.*
from employees e, departments d, salary s
where d.departmentname = '财务部' and e.employeeid = s.employeeid and e.departmentid = d.departmentid
order by s.income desc/*
EmployeeID Name education workyear Address Zip PhoneNumber EmailAddress DepartmentID Birthday Sex departmentID departmentname Note employeeID inCome outCome
---------- ---------- --------- -------- -------------------------------------------------- ------ ------------ -------------------- ------------ ------------------------------------------------------ ---- ------------ ------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------- ----------------------------------------------------- -----------------------------------------------------
020010 王向荣 硕士 2 四牌路10-10-108 210006 3792361 NULL 1 1972-12-09 00:00:00.000 1 1 财务部 NULL 020010 2860.0 198.0(所影响的行数为 1 行)
*/
感谢,总算明白了!个人觉得top 1不是很适合查询max类的问题