MySQL數據庫07 複雜查詢練習題

1、 列出與“SCOTT”從事相同工作的所有員工及部門名稱,部門人數。

# 按照部門分組 , 求出部門名稱和人數
select e.deptno ,dname, count(empno) ct from emp e, dept d where e.deptno = d.deptno group by e.deptno, d.dname
# 單表查詢所有員工
select  from emp where job = (select job from emp where ename = 'SCOTT');

# 多表聯查
select e.*,nt.dname, nt.ct 
from emp e , (select e.deptno ,dname, count(empno) ct from emp e, dept 
   d where e.deptno = d.deptno group by e.deptno, d.dname) nt  
where e.deptno = nt.deptno and job = (select job from emp where ename = 'SCOTT');

2、 列出公司各個工資等級僱員的數量、平均工資。

select s.grade,count(empno), avg(sal)
from emp e , salgrade s
where e.sal between s.losal and s.hisal 
group by s.grade

3、 列出薪金高於在部門30工作的所有員工的薪金的員工姓名和薪金、部門名稱。

#在部門30工作的所有員工的薪金
select sal from emp where deptno = 30

select e.ename, e.sal , d.dname
from emp e join dept d on e.deptno = d.deptno
where sal > all(select sal from emp where deptno = 30);

4、 列出在每個部門工作的員工數量、平均工資和平均服務期限。

select deptno, count(empno),avg(sal) , avg(datediff(now(),hiredate)/365)
from emp
group by deptno

# 第二種更加精確的方式
select deptno, count(empno),avg(sal) , avg(timestampdiff(year,hiredate,now()))
from emp
group by deptno

5、 列出所有員工的姓名、部門名稱和工資。

select ename, dname, sal from emp e join dept d on e.deptno = d.deptno

6、 列出所有部門的詳細信息和部門人數。

# 1- 部門人數
select deptno , count(1) ct from emp group by deptno
# 2- 使用子查詢+ 多表查詢
select d.*, nt.ct
from dept d left join (select deptno , count(1) ct from emp group by deptno) nt 
on d.deptno = nt.deptno

7、 列出各種工作的最低工資及從事此工作的僱員姓名。

# 各種工作的最低工資 該最低工資的僱員
select ename from emp where sal in (select min(sal) from emp group by job);

8、 列出各個部門的MANAGER(經理)的最低薪金、姓名、部門名稱、部門人數。

# 1- 各個部門的MANAGER(經理)的最低薪金
select deptno, min(sal) min_sal from emp where job = 'MANAGER' group by deptno;
# 2- 統計部門人數
select deptno , count(1) ct from emp group by deptno;
# 3- 四表聯合查詢
select nt_sal.min_sal 最低薪金,e.ename, d.dname,nt_ct.ct
from emp e,dept d,
	(select deptno, min(sal) min_sal from emp where job = 'MANAGER' group by deptno) nt_sal ,
	(select deptno , count(1) ct from emp group by deptno) nt_ct
where e.deptno = d.deptno 
    and e.deptno = nt_sal.deptno 
    and e.deptno = nt_ct.deptno 
    and e.job = 'MANAGER'

9、 列出所有員工的年工資,所在部門名稱,按年薪從低到高排序。

select e.sal + ifnull(comm,0) 年薪, d.dname 
from emp e join dept d on e.deptno = d.deptno order by 年薪;

10、查出某個員工的上級主管及所在部門名稱,並要求這些主管的薪水超過3000

# 員工姓名, 主管姓名 主管所在部門名稱, 主管sal > 3000
select e.ename, m.ename, d.dname
from emp e join emp m on e.mgr = m.empno join dept d on m.deptno = d.deptno
where m.sal >= 3000
# 
select e.ename, m.ename, d.dname
from emp e,emp m,dept d
where  e.mgr = m.empno and m.deptno = d.deptno and m.sal >= 3000

11、求出部門名稱中,帶‘S’字符的部門員工的、工資合計、部門人數。


12、給任職日期超過30年或者在87年僱傭的僱員加薪,加薪原則:10部門增長10%,20部門增長20%,30部門增長30%,依次類推。


13.列出至少有一個員工的所有部門的信息:


14.列出薪金比SMITH對的所有員工:


15.列出所有員工的姓名以及其直接上級的姓名:


16.列出受僱日期早於其直接上級的所有員工的編號、姓名,部門名稱

17.列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門

18.列出所有"CLERK(職員)"的姓名以及部門名稱,部門的人數

19.列出最低薪金大於1500的各種工作以及從事此工作的全部僱員人數

20.列出在部門"SALES"工作的員工的姓名,假定不知道銷售部的部門編號

21.列出薪金高於公司平均薪金的所有員工,所在部門,上級領導,公司的工資等級

  1. 列出至少有一個員工的所有部門編號、名稱,並統計出這些部門的平均工資、最低工資、最高工資。
  2. 列出薪金比“SMITH”或“ALLEN”多的所有員工的編號、姓名、部門名稱、其領導姓名。
  3. 列出所有員工的編號、姓名及其直接上級的編號、姓名,顯示的結果按領導年工資的降序排列。

25.列出受僱日期早於其直接上級的所有員工的編號、姓名、部門名稱、部門位置、部門人數。

  1. 列出部門名稱和這些部門的員工信息(數量、平均工資),同時列出那些沒有員工的部門。
  2. 列出所有“CLERK”(辦事員)的姓名及其部門名稱,部門的人數,工資等級。
  3. 列出最低薪金大於1500的各種工作及此從事此工作的全部僱員人數及所在部門名稱、位置、平均工資。
  4. 列出在部門“SALES”(銷售部)工作的員工的姓名、基本工資、僱傭日期、部門名稱,假定不知道銷售部的部門編號。
  5. 列出薪金高於公司平均薪金的所有員工,所在部門,上級領導,公司的工資等級。 31. 列出與“SCOTT”從事相同工作的所有員工及部門名稱,部門人數。

32.查詢dept表的結構

33.檢索emp表,用is a 這個字符串來連接員工姓名和工種兩個字段

34.檢索emp表中有提成的員工姓名、月收入及提成。

35.創建my_employee表,向表中插入下列數據
ID FIRST_NAME LAST_NAME USERID SALARY
1 patel Ralph Rpatel 895
2 Dancs Betty Bdancs 860
3 Biri Ben Bbiri 1100
4 Newman Chad Cnewman 750
5 Ropeburn Audrey Aropebur 1550

36.將3號員工的last_name修改爲"drelxer"

37.將所有工資少於900的員工的工資修改爲1000
38.刪除所有數據

39.清空表my_employee
40. 創建表dept
列名 Null? type
id Number(7)
name Varchar2(25)

41.將表emp中的數據插入表dept中

42.創建表emp2
name Null? type
id Number(7)
First_name Varchar2(25)
Last_name Varchar2(25)
Dept_id Number(7)

43.直接刪除表emp2中的列dept_id

44.將列Last_name的長度增加到50
45.根據表emp創建employees2

46.將表employees2重命名爲emp3
47.在表dept和emp中添加新列test_column(varchar2(50)),並檢查所作的操作
48.向表emp的id列中添加PRIMARY KEY約束

49.向表emp中添加列dept_id,並在其中定義FOREIGN KEY約束,與之相關聯的列是dept表中的id列。
50.向表dept的id列中添加PRIMARY KEY約束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章