2012-09-11 58 views
3

我是SQL新手,我在本學期學習了DB班。我有大約20個查詢來嘗試這個數據庫,有兩個我不明白...我想知道這裏有人能夠幫助!僱員數據庫的SQL查詢

這是我創建的表格。

create table employee(
    EID varchar(20) primary key, 
    Lastname varchar(20), 
    Firstname varchar(20), 
    Midinitial char(1), 
    gender char(1), 
    street varchar(20), 
    city varchar(20) 
); 

create table works(
    EID varchar(20) primary key, 
    Lastname varchar(20), 
    Firstname varchar(20), 
    Midinitial char(1), 
    company_name varchar(20), 
    salary numeric(5,0), 
    foreign key(EID) references employee, 
    foreign key(company_name) references company 
); 

create table company(
    company_name varchar(20) primary key, 
    city varchar(20) 
); 

create table manages(
    EID varchar(20) primary key, 
    Lastname varchar(20), 
    Firstname varchar(20), 
    Midinitial char(1), 
    ManagerLastname varchar(20), 
    MFirstname varchar(20), 
    MMidinitial varchar(20), 
    start_date date, 
    foreign key (EID) references employee 
); 

找到在First Bank工作並住在奧馬哈的所有經理的薪水。

以下是我對這個我認爲它正確的,但我不想回答這個問題,直到我能得到第二個太....

select distinct salary 
from employee, works, manages 
where employee.city = 'Omaha' 
    and works.company_name = 'First Bank' 
    and manages.managerlastname = employee.Lastname 
    and employee.EID = works.EID 

查找名稱以及全體員工工資最高的員工的公司名稱。

+3

你真的還要忍受什麼,你都試了。 – hjpotter92

+3

爲什麼'managing'在引用'employee'時有lastname,firstname,ManagerLastname,MFirstname? –

+0

到目前爲止你做了什麼?提示:您需要將經理,工作和員工表加在一起 – Greg

回答

0

這兩種回到我在我的表中的信息需要的到底是什麼。謝謝您的幫助!

查詢1個

select distinct salary 
from employee, works, manages 
where employee.city = 'Omaha' 
    and works.company_name = 'First Bank' 
    and manages.managerlastname = employee.Lastname 
    and employee.EID = works.EID 

查詢2

select firstname, lastname, company_name 
from works w1, (select max(salary) as max_salary 
      from works) w2 
where w1.salary = w2.max_salary 
1
SELECT w.salary 
FROM works w 
INNER JOIN employee e 
    ON e.EID = w.EID 
     AND e.city = 'Omaha' 
WHERE w.company_name = 'First Bank'; 

應該這樣做。

+0

不確認員工是經理,只回答問題的一半。 –

+0

另外,語法錯誤 - >這個查詢會拋出一個錯誤。 –

2

我敢肯定這應該是:

SELECT w.salary FROM works w INNER JOIN employee e ON w.EID = e.EID 
WHERE e.city = 'Omaha' AND w.company_name = 'First Bank' AND EXISTS 
(SELECT * FROM managers m WHERE m.EID = w.EID); 

而對於第二:

SELECT e.Firstname, e.Lastname, w.company_name FROM employee e INNER JOIN 
    works w ON e.EID = w.EID ORDER BY w.salary DESC LIMIT 1; 
+1

您必須在「w.salary」和「LIMIT 1」之間添加「DESC」 - 否則第二個查詢顯示薪水最低(而不是最高)。此外,可以在最後使用「SELECT TOP 1」而不是「LIMIT 1」 - 這樣,查詢更有可能在不同數據庫供應商中有用。 –