多表查詢練習題

2021-09-29 20:33:39 字數 4827 閱讀 5390

– 部門表

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);

select *from dept;

select *from emp;

select *from job;

select *from salarygrade;

– 需求:

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

select

t1.id, – 員工編號

t1.ename, – 員工姓名

t1.salary,-- 工資

t2.jname, – 職務名稱

t2.description– 職務描述

from

emp t1, job t2

where

t1.job_id= t2.id

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

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.idand t1.dept_id= t3.id;

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

select

e.ename,

e.salary,

s.*from emp e, salarygrade s

where e.salarybetween s.losalaryand s.hisalary;

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

select

e.ename,

e.salary,

j.jname,

j.description,

d.dname,

d.loc,

s.grade

from

emp e,job j,dept d,salarygrade s

where

e.job_id= j.id

and e.dept_id= d.id

and e.salarybetween s.losalaryand s.hisalary;

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

– 分析:1>部門編號、部門名稱、部門位置dept表 部門人數 emp表

– 2>使用分組查詢,按照emp.dept_id完成分組,查詢count(id)

– 3>使用子查詢將第2部的查詢結果和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.查詢所有員工的姓名及其直接上級的姓名,沒有領導的員工也需要查詢

分析:1>姓名 emp , 直接上級的姓名emp

emp表的id和mgr是自關聯

2>條件:emp.id=emp.mgr

3>查詢左表的所有資料和交集資料使用左外連線查詢.

select

t1.ename,

t1.mgr,

t2.id,

t2.ename

from emp t1

left join emp t2

on t1.mgr= t2.id;

pl sql多表查詢練習題01

1,多表連線查詢時,若兩個表有同名的列,必須使用表的別名對列名進行引用,否則出錯!2,查詢公司員工的last name,department name,city select last name,department name,city from departments s,employees e,...

pl sql多表查詢練習題02

1.顯示所有員工的姓名,部門號和部門名稱 select last name,department id,department name from employees e,departments d where e.department id d.department id select last n...

多表連線sql語句 練習題

等值連線 查詢所有員工的員工編號,姓名,部門編號,部門名稱,部門位址 select empno,emp.deptno,dname,loc from emp,dept where emp.deptno dept.deptno 寫乙個查詢,顯示所有工作在chicago並且獎金不為空的員工姓名,工作地點,...