多表查詢的一些綜合案例

2021-08-27 05:22:39 字數 4847 閱讀 2933

— 部門表

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表查後面兩個

*/ select

t1.id, – 員工編號

t1.ename, – 員工姓名

t1.salary, – 工資

t2.jname, – 職務名稱

t2.description– 職務描述

from

emp t1,

job t2

where

t1.job_id=t2.id;

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

/* emp_id emp_ename emp_bonus job_jname job_descripition dept_dname dept_loc

*/ 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.查詢員工姓名,工資, 工資等級

– emp_ename emp_bonus salarygrade中判斷

select

t1.ename,

t1.salary,

t2.grade

from

emp t1, salarygrade t2

where

t1.salarybetween t2.losalaryand t2.hisalary;

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

– ename salary jname description dname loc salarydrade

select

t1.ename,

t1.salary,

t2.jname,

t2.description,

t3.dname,

t3.loc,

t4.grade

from

emp t1, job t2, dept t3, salarygrade t4

where t1.job_id=t2.id– 用了and連線就不用 ,

and t1.dept_id=t3.id

and t1.salarybetween t4.losalaryand t4.hisalary;

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

– dept iddept dname dept loc 使用子迴圈巢狀

select

t1.id, t1.dname, t1.loc, t2.total

from

dept t1,

(select dept_id ,count(id) total

from emp

group by dept_id) t2

where

t1.id= t2.dept_id ;

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

select

t1.ename, t1.mgr,t2.id,t2.ename

from

emp t1 left join emp t2

on t1.mgr=t2.id`;– 左連線 left join …on ….

Oracle的查詢 多表查詢中的一些概念

笛卡爾積 select from emp e,dept d 等值連線 select from emp e,dept d where e.deptno d.deptno 內連線 select from emp e inner join dept d on e.deptno d.deptno 查詢出所有...

綜合Vagrant的一些坑

1 mac上的virtualbox突然提示effctive uid is not root 直接在命令列下sudo執行virtualbox是可以開啟的,但是vagrant仍然無法執行,說明還是沒有許可權 解決方法是在命令列下輸入 for bin in virtualbox virtualboxvm ...

一些for迴圈案例

1 請在控制台輸出滿足如下條件的五位數 個位等於萬位 十位等於千位 個位 十位 千位 萬位 百位 2 請統計1 1000之間同時滿足如下條件的資料有多少個 對3整除餘2 對5整除餘3 對7整除餘2 3 一張紙的厚度大約是0.08mm,對折多少次之後能達到珠穆朗瑪峰的高度 8848.13公尺 4 計算...