多表查詢練習

2021-10-10 23:13:57 字數 4947 閱讀 3524

-- 部門表

create table dept (

id int primary key primary key, -- 部門id

dname varchar(50), -- 部門名稱

loc varchar(50) -- 部門所在地);

-- 新增4個部門

insert into dept(id,dname,loc) values

(10,'教研部','北京'

),(20,'學工部','上海'

),(30,'銷售部','廣州'

),(40,'財務部','深圳');

-- 職務表,職務名稱,職務描述

create table job (

id int primary key,

jname varchar(20),

description varchar(50));

-- 新增4個職務

insert into job (id, jname, description) values

(1, '董事長', '管理整個公司,接單'

),(2, '經理', '管理部門員工'

),(3, '銷售員', '向客人推銷產品'

),(4, '文員', '使用辦公軟體');

-- 員工表

create table emp (

id int primary key, -- 員工id

ename varchar(50), -- 員工姓名

job_id int, -- 職務id

mgr int , -- 上級領導

joindate date, -- 入職日期

salary decimal(7,2), -- 工資

bonus decimal(7,2), -- 獎金

dept_id int, -- 所在部門編號

constraint emp_jobid_ref_job_id_fk foreign key (job_id) references job (id),

constraint emp_deptid_ref_dept_id_fk foreign key (dept_id) references dept (id));

-- 新增員工

insert into emp(id,ename,job_id,mgr,joindate,salary,bonus,dept_id) values

(1001,'孫悟空',4,1004,'2000-12-17','8000.00',null,20),

(1002,'盧俊義',3,1006,'2001-02-20','16000.00','3000.00',30),

(1003,'林沖',3,1006,'2001-02-22','12500.00','5000.00',30),

(1004,'唐僧',2,1009,'2001-04-02','29750.00',null,20),

(1005,'李逵',4,1006,'2001-09-28','12500.00','14000.00',30),

(1006,'宋江',2,1009,'2001-05-01','28500.00',null,30),

(1007,'劉備',2,1009,'2001-09-01','24500.00',null,10),

(1008,'豬八戒',4,1004,'2007-04-19','30000.00',null,20),

(1009,'羅貫中',1,null,'2001-11-17','50000.00',null,10),

(1010,'吳用',3,1006,'2001-09-08','15000.00','0.00',30),

(1011,'沙僧',4,1004,'2007-05-23','11000.00',null,20),

(1012,'李逵',4,1006,'2001-12-03','9500.00',null,30),

(1013,'小白龍',4,1004,'2001-12-03','30000.00',null,20),

(1014,'關羽',4,1007,'2002-01-23','13000.00',null,10)

;-- 工資等級表

create table salarygrade (

grade int primary key, -- 級別

losalary int, -- 最低工資

hisalary int -- 最高工資);

-- 新增5個工資等級

insert into salarygrade(grade,losalary,hisalary) values

(1,7000,12000),

(2,12010,14000),

(3,14010,20000),

(4,20010,30000),

(5,30010,99990)

;

– 需求:

– 1.查詢所有員工資訊。查詢員工編號,員工姓名,工資,職務名稱,職務描述

/*分析:員工編號,員工姓名,工資-查詢emp ,職務名稱,職務描述-查詢job表

查詢的條件 emp.job_id =job.id

*/

select

t1.`id`

, t1.`ename`

, t1.`salary`

, t2.`jname`

, t2.`description`

from

emp t1,job t2

where

t1.`job_id`

=t2.`id`

;

– 2.查詢員工編號,員工姓名,工資,職務名稱,職務描述,部門名稱,部門位置

/*分析:

1.員工編號,員工姓名,工資emp,職務名稱,職務描述job,部門名稱位置dept

emp.job_id =job.id and emp.dept_id =dept.id

*/

select

t1.`id`

, t1.`ename`

, t1.`salary`

, t2.`jname`

, t2.`description`

, t3.`dname`

, t3.`loc`

from

emp t1,job t2,dept t3

where

t1.`job_id`

=t2.`id`

and t1.`dept_id`

=t3.`id`

;

– 3.查詢員工姓名,工資,工資等級

/*分析:

員工姓名,工資emp,工資等級salarygrade

emp.salarygrade between losalary and hisalary

*/

select

t1.`ename`

, t1.`salary`

, t2.*

from

emp t1, salarygrade t2

where

t1.`salary`

between t2.`losalary`

and t2.`hisalary`

;

– 4.查詢員工姓名,工資,職務名稱,職務描述,部門名稱,部門位置,工資等級

/*分析:員工姓名,工資emp,職務名稱,職務描述job,

部門名稱,部門位置dept 工資等級salarygrade

條件:emp.job_id =job.id and emp.dept_id =dept.id and emp.salarygrade between losalary and hisalary

*/

select

t1.`ename`

, t1.`salary`

, t2.`jname`

, t2.`description`

, t3.`dname`

, t3.`loc`

, t4.*

from

emp t1 ,job t2,dept t3,salarygrade t4

where

t1.`job_id`

=t2.`id`

and t1.`dept_id`

=t3.`id`

and t1.`salary`

between t4.`losalary`

and t4.`hisalary`

;

– 5.查詢出部門編號、部門名稱、部門位置、部門人數

/*使用分組查詢,按照emp.dept_id完成分組,查詢人數

使用子查詢上一步的結果和dept表進行關聯查詢

*/

select 

t1.`id`

,t1.`dname`

,t1.`loc`

,t2.total

from

dept t1,

(select

dept_id,count(id)total

from

empgroup by dept_id)t2

where t1.`id`

= t2.dept_id;

– 6.查詢所有員工的姓名及其直接上級的姓名,沒有領導的員工也需要查詢

/*分析:姓名emp 直接上級名字emp

emp表的id和mgr自關聯

條件emp.id =emp.mgr

需要查詢左表的所有資料和交集資料

使用左外連線查詢

*/

select

t1.`ename`

, t1.`mgr`

, t2.`id`

, t2.`ename`

from emp t1

left join emp t2

on t1.`mgr`

=t2.`id`

;

多表查詢練習

1.查詢所有員工資訊。查詢員工編號,員工姓名,工資,職務名稱,職務描述 分析 員工編號,員工姓名,工資 用到emp 職務名稱,職務描述 用到了job emp.job id job.id 隱式內連線 select emp.id,emp.ename,emp.salary,job.jname,job.de...

多表子查詢練習

insert into emp values 7369,smith clerk 7902,1980 12 17 800,null,20 insert into emp values 7499,allen salesman 7698,1981 02 20 1600,300,30 insert into...

多表查詢練習題

部門表 create table dept id int primary key primary key,部門id dname varchar 50 部門名稱 loc varchar 50 部門所在地 新增4個部門 insert into dept id,dname,loc values 10,教學...