sql習題練習

 1 表結構:
 2 create database MyCompany
 3 go
 4 use MyCompany
 5 go
 6 create table Departments
 7 (
 8     Department_ID int identity(1,1) primary key,
 9     Department_Name nvarchar(50),
10 ) 
11 go
12 create table Employees
13 (
14     Employee_Id int identity(1,1) primary key,
15     Employee_Name nvarchar(50),
16     Employee_Job nvarchar(50),
17     Salary money,
18     Department_Id int foreign key references Departments(Department_ID)
19 )
20 Go
21 
22 --------------------------------------------插入數據----------------------------------------------------------------------------------
23 ----------------------------------部門表-------------------------------------------------------------------
24 SET IDENTITY_INSERT departments ON
25 insert departments(Department_ID,Department_Name) values( 1             ,    N'財務部'                                                                                                                                                                                                                                                           )
26 insert departments(Department_ID,Department_Name) values( 2             ,    N'行政部'                                                                                                                                                                                                                                                           )
27 insert departments(Department_ID,Department_Name) values( 3             ,    N'開發部'                                                                                                                                                                                                                                                           )
28 insert departments(Department_ID,Department_Name) values( 4             ,    N'市場部'                                                                                                                                                                                                                                                           )
29 SET IDENTITY_INSERT departments OFF
30 ------------------------=============================員工表================================================================================================
31 SET IDENTITY_INSERT employees ON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 1           ,    N'曹操'                                                                                                                                                                                                                                                            ,    N'組長'                                                                                                                                                                                                                                                            ,    20000.00              ,    1             )
32 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 2           ,    N'劉備'                                                                                                                                                                                                                                                            ,    N'經理'                                                                                                                                                                                                                                                            ,    30000.00              ,    3             )
33 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 3           ,    N'諸葛亮'                                                                                                                                                                                                                                                           ,    N'CEO'                                                                                                                                                                                                                                                           ,    10000.00              ,    2             )
34 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 4           ,    N'黃月英'                                                                                                                                                                                                                                                           ,    N'職員'                                                                                                                                                                                                                                                            ,    5000.00               ,    1             )
35 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 5           ,    N'關羽'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    8000.00               ,    3             )
36 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 6           ,    N'張飛'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    8000.00               ,    3             )
37 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 7           ,    N'趙雲'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    7000.00               ,    3             )
38 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 8           ,    N'馬謖'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    4000.00               ,    3             )
39 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 9           ,    N'宋江'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    13000.00              ,    3             )
40 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 10          ,    N'林沖'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    7600.00               ,    3             )
41 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 11          ,    N'魯智深'                                                                                                                                                                                                                                                           ,    N'職員'                                                                                                                                                                                                                                                            ,    8000.00               ,    2             )
42 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 12          ,    N'李逵'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    820.00                ,    1             )
43 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 13          ,    N'吳用'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    8300.00               ,    3             )
44 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 14          ,    N'張順'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    6200.00               ,    3             )
45 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 15          ,    N'時遷'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    600.00                ,    2             )
46 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 16          ,    N'石秀'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    1900.00               ,    1             )
47 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 17          ,    N'孫悟空'                                                                                                                                                                                                                                                           ,    N'職員'                                                                                                                                                                                                                                                            ,    8000.00               ,    1             )
48 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 18          ,    N'唐僧'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    17000.00              ,    3             )
49 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 19          ,    N'諸葛亮'                                                                                                                                                                                                                                                           ,    N'職員'                                                                                                                                                                                                                                                            ,    10000.00              ,    2             )
50 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 20          ,    N'黃月英'                                                                                                                                                                                                                                                           ,    N'職員'                                                                                                                                                                                                                                                            ,    5000.00               ,    1             )
51 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 21          ,    N'關羽'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    8000.00               ,    3             )
52 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 22          ,    N'張飛'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    8000.00               ,    3             )
53 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 23          ,    N'趙雲'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    7000.00               ,    3             )
54 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 24          ,    N'馬謖'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    4000.00               ,    3             )
55 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 25          ,    N'宋江'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    13000.00              ,    3             )
56 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 26          ,    N'林沖'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    7600.00               ,    3             )
57 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 27          ,    N'魯智深'                                                                                                                                                                                                                                                           ,    N'職員'                                                                                                                                                                                                                                                            ,    8000.00               ,    2             )
58 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 28          ,    N'李逵'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    820.00                ,    1             )
59 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 29          ,    N'吳用'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    8300.00               ,    3             )
60 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 30          ,    N'張順'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    6200.00               ,    3             )
61 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 31          ,    N'時遷'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    600.00                ,    2             )
62 insert employees(Employee_Id,Employee_Name,Employee_Job,Salary,Department_Id) values( 32          ,    N'石秀'                                                                                                                                                                                                                                                            ,    N'職員'                                                                                                                                                                                                                                                            ,    1900.00               ,    1             )
63 
64 SET IDENTITY_INSERT employees OFF
View Code

上面是建立表和數據庫的代碼數據庫

use MyCompanyTest
go
select * from dbo.Departments
select * from Employees

--1.列出EMPLOYEES表中各部門的:部門編號,最高工資,
select e.department_Id 部門編號, MAX(e.Salary) 最高工資,MIN(e.salary)最低工資
from Employees e
group by e.department_Id 

--2.列出EMPLOYEES表中各部門的:部門編號、部門名稱、最高工資、最低工資
  
  select 部門編號, 最高工資,最低工資 ,d.Department_Name from
      (select e.Department_ID 部門編號, max(e.Salary)最高工資,min(e.Salary)最低工資
     from Employees e
    group by e.Department_Id )as t join Departments d
on t.部門編號=d.Department_ID


--3.列出EMPLOYEES表中各部門中'職員'(Employee_job爲'職員')的:最低工資,最高工資和部門Id

select min(Salary)最低工資,MAX(Salary) 最高工資,Department_Id 部門Id from Employees
where Employee_Job='職員'
group by Department_Id

--4.對於EMPLOYEES中最低工資小於1000的部門,列出EMPLOYEE_JOB爲'職員'的:部門編號,最低工資,最高工資

select * from(
    select Department_Id,MIN(e.Salary)最低工資,MAX(e.Salary)最高工資  from Employees e 
    where e.Employee_Job='職員'
    group by e.Department_Id) as t
    join Departments d on d.Department_ID =t.Department_Id
    where t.最低工資<1000

--5.根據部門編號由高到低,工資由低到高,列出每一個員工的姓名,部門號,工資
        select * from Employees
        order by Department_Id desc , Salary asc
--6.列出'吳用'所在部門中每一個員工的姓名與部門號
    select * from Employees where Department_Id in (
    select   Department_Id  from Employees where Employee_Name='吳用'
    )
--7.列出每一個員工的姓名,頭銜,部門號,部門名
    select e.Employee_Name,e.Employee_Job,d.Department_ID,d.Department_Name
     from Employees e join Departments d
    on e.Department_Id=d.Department_ID
--8.列出EMPLOYEES中頭銜爲'職員'的員工的姓名,工做,部門號,部門名

        select * from Employees e 
        join Departments d on e.Department_Id=d.Department_ID
        where e.Employee_Job='職員'
--9.對於DEPARTMENTS表中,列出全部(說明是左聯):部門名稱,部門編號,以及該部門的:員工姓名與頭銜
    select * from Departments d left join Employees e
    on d.Department_ID=e.Department_Id
--10.列出工資高於本部門工資平均水平的員工的部門編號,姓名,工資,而且按部門編號排序。
select * from Employees e join(
            select Department_Id, AVG(Salary)as 平均工資 from Employees  e
            group by e.Department_Id)as t --求出各個部門的平均工資
    on e.Department_Id=t.Department_Id
    where e.Salary > t.平均工資
    order by e.Department_Id
    
    ---相關子查詢
    select * from employees as emp
    where 
    exists(
     select department_id,avg(salary) as avg_salary 
       from employees as emp_sub
        group by department_id
    having emp_sub.department_id=emp.department_id and emp.salary>avg(salary)
    )

----
select * 
from EMPLOYEES as e
where 
e.SALARY >(select avg(SALARY) from EMPLOYEES as b where e.DEPARTMENT_ID = b.DEPARTMENT_ID)
order by e.DEPARTMENT_ID
--11.對於EMPLOYEES,列出各個部門中工資高於本部門平均水平的員工 數和部門號,按部門號排序
select
        emp.department_id as 部門編號,
        count(*) as 員工數
from Employees as emp
where emp.salary > 
        (select avg(salary) from employees  emp_sub 
      where emp_sub.department_id=emp.department_id)
group by emp.department_id
order by emp.department_id


--12.請找出部門中具備2人以上,員工工資大於所在部門平均工資的:部門的id與這些人的人數。
--分解:
--1>.部門中有人的工資比部門的平均工資還高
--2>而且這些人在2人以上
--3>查詢出這些部門Id,與工資高於部門平均工資的人的人數。
select
        emp.department_id as 部門編號,
        count(*) as 員工數
from Employees as emp
where emp.salary > (select avg(salary) from employees emp_sub where emp_sub.department_id=emp.department_id)
group by emp.department_id
having count(*) >2
order by emp.department_id


--13.對於EMPLOYEES中低於本身工資至少5人的員工,列出其部門號,姓名,工資,
--以及工資少於本身的人數
select
        
        employee_name 姓名,
        salary 工資,
        小於本身工資的人數=(select count(*) from employees as emp_sub where emp_sub.salary<emp.salary)
from employees as emp
where (select count(*) from employees as emp_sub where emp_sub.salary<emp.salary)<5
相關文章
相關標籤/搜索