表結(jié)構(gòu)
DROP DATABASE IF EXISTS test1;
CREATE DATABASE test1;
USE test1;
##部門表
#DROP IF EXISTS TABLE DEPT;
CREATE TABLE DEPT(
DEPTNO int PRIMARY KEY,##部門編號
DNAME VARCHAR(14) , ##部門名稱
LOC VARCHAR(13) ##部門地址
) ;
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
##員工表
#DROP IF EXISTS TABLE EMP;
CREATE TABLE EMP(
EMPNO int PRIMARY KEY, #員工編號
ENAME VARCHAR(10), #員工姓名
JOB VARCHAR(9), #員工工作
MGR int, #員工直屬領(lǐng)導編號
HIREDATE DATE, #入職時間
SAL double, #工資
COMM double, #獎金
DEPTNO int #對應dept表的外鍵
);
## 添加 部門 和 員工 之間的主外鍵關(guān)系
ALTER TABLE EMP ADD CONSTRAINT FOREIGN KEY EMP(DEPTNO) REFERENCES DEPT (DEPTNO);
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 EMP VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO EMP VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO EMP VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO EMP VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO EMP VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO EMP VALUES(7788,'SCOTT','ANALYST',7566,'1987-07-03',3000,NULL,20);
INSERT INTO EMP VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO EMP VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO EMP VALUES(7876,'ADAMS','CLERK',7788,'1987-07-13',1100,NULL,20);
INSERT INTO EMP VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO EMP VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO EMP VALUES(7934,'MILLER','CLERK',7782,'1981-01-23',1300,NULL,10);
#工資等級表
#DROP IF EXISTS TABLE SALGRADE;
CREATE TABLE SALGRADE(
GRADE int, #等級
LOSAL double, #最低工資
HISAL double ); #最高工資
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
單表查詢題目
1. 查找部門30中員工的詳細信息。
2.找出從事clerk工作的員工的編號、姓名贯要、部門號兵怯。
3. 檢索出獎金多于基本工資的員工信息树枫。
4.檢索出獎金多于基本工資60%的員工信息。
5.找出10部門的經(jīng)理、20部門的職員的員工信息。
6.找出10部門的經(jīng)理贰拿、20部門的職員或者既不是經(jīng)理也不是職員但是工資高于2000元的員工信息。
7.找出獲得獎金的員工的工作熄云。
8.找出獎金少于100或者沒有獲得獎金的員工的信息膨更。
9.找出姓名以A、B缴允、S開始的員工信息荚守。
10.找到名字長度為6個字符的員工信息。
11.名字中不包含R字符的員工信息癌椿。
12.返回員工的詳細信息并按姓名排序健蕊。
13.返回員工的信息并按工作降序工資升序排列。
14.計算員工的日薪(按30天)踢俄。
15. 找出姓名中包含A的員工信息。
多表查詢題目
返回擁有員工的部門名晴及、部門號都办。
2.工資水平多于smith的員工信息。
3.返回員工和所屬經(jīng)理的姓名虑稼。
or
(沒有經(jīng)理是否顯示)
4.返回雇員的雇傭日期早于其經(jīng)理雇傭日期的員工及其經(jīng)理姓名
5. 返回員工姓名及其所在的部門名稱琳钉。
6. 返回從事clerk工作的員工姓名和所在部門名稱。
7. 返回部門號及其本部門的最低工資蛛倦。
8. 返回銷售部(sales)所有員工的姓名歌懒。
9.返回工資水平多于平均工資的員工。
10. 返回與SCOTT從事相同工作的員工溯壶。
如果不包含自己
11.返回與30部門員工工資水平相同的員工姓名與工資及皂。
12.返回工資高于30部門所有員工工資水平的員工信息甫男。
13.返回部門號、部門名验烧、部門所在位置及其每個部門的員工總數(shù)板驳。
14. 返回員工的姓名、所在部門名及其工資碍拆。
15.返回員工的詳細信息若治。(包括部門名)
16.返回員工工作及其從事此工作的最低工資。
17.計算出員工的年薪感混,并且以年薪排序端幼。
18.返回工資處于第四級別的員工的姓名。
19.返回工資為二等級的職員名字弧满、部門所在地婆跑、和二等級的最低工資和最高工資
20.工資等級多于smith的員工信息。
單表查詢答案
#1谱秽、查找部門30中員工的詳細信息洽蛀。
select * from emp where deptno = 30;
#2、找出從事clerk工作的員工的編號疟赊、姓名郊供、部門號。
select empno,ename,deptno from emp where job = 'clerk';
#3近哟、檢索出獎金多于基本工資的員工信息驮审。
select * from emp where comm > sal;
#4、檢索出獎金多于基本工資60%的員工信息吉执。
select * from emp where comm > sal * 0.6;
#5疯淫、找出10部門的經(jīng)理、20部門的職員 的員工信息戳玫。
select * from emp where deptno = 10 and job='MANAGER' or deptno = 20 and job = 'CLERK';
#6熙掺、找出10部門的經(jīng)理、20部門的職員 或者既不是經(jīng)理也不是職員但是工資高于2000元的員工信息咕宿。
select * from emp
where deptno = 10 and job='MANAGER'
or deptno = 20 and job = 'CLERK'
or job!='MANAGER' and job != 'CLERK' and sal > 2000 ;
## job not in ('MANAGER','CLERK')
#7币绩、找出獲得獎金的員工的工作。
select * from emp where comm > 0;
#8府阀、找出獎金少于100或者沒有獲得獎金的員工的信息缆镣。
select * from emp where comm < 100 or comm is null;
#9、找出姓名以A试浙、B董瞻、S開始的員工信息。
select * from emp where ename like 'A%' or ename like 'B%' or ename like 'S%';
#10田巴、找到名字長度為6個字符的員工信息钠糊。
select * from emp where length(ename) = 6;
#select * from emp where ename like '______';
#11挟秤、名字中不包含R字符的員工信息。
select * from emp where ename not like '%R%';
#12眠蚂、返回員工的詳細信息并按姓名排序煞聪。
select * from emp order by ename asc;
#13、返回員工的信息并按工作降序工資升序排列逝慧。
select * from emp order by job desc , sal asc;
#14昔脯、計算員工的日薪(按30天)。
select ename,sal/30 as '日薪' from emp;
select ename,truncate(sal/30,2) '日薪' from emp;
#15笛臣、找出姓名中包含A的員工信息云稚。
select * from emp where ename like '%A%';
多表查詢答案
#1、返回擁有員工的部門名沈堡、部門號静陈。
select distinct d.dname, d.deptno from dept d,emp e where d.deptno = e.deptno;
#2、工資水平多于smith的員工信息诞丽。
select *from emp where sal > (select sal from emp where ename = 'smith');
#3鲸拥、返回員工和所屬經(jīng)理的姓名。
select e.ename,m.ename from emp e
left outer join emp m on e.mgr = m.empno;
select e.ename ,(select m.ename from emp m where m.empno = e.mgr) ename from emp e;
select e.ename , m.ename from emp e , emp m where e.mgr = m.empno;
#4僧免、返回雇員的雇傭日期早于其經(jīng)理雇傭日期的員工及其經(jīng)理姓名刑赶。
select e.ename,m.ename from emp e
inner join emp m on e.mgr = m.empno
where e.hiredate < m.hiredate;
select e.ename,m.ename from emp e,emp m
where e.mgr=m.empno
and e.hiredate < m.hiredate;
#5、返回員工姓名及其所在的部門名稱懂衩。
select e.ename,d.dname from emp e , dept d where e.deptno = d.deptno;
#6撞叨、返回從事clerk工作的員工姓名和所在部門名稱。
select e.ename,d.dname
from emp e , dept d
where e.deptno = d.deptno and e.job = 'CLERK';
#7浊洞、返回部門號及其本部門的最低工資牵敷。
select deptno ,min(sal) sal
from emp
group by deptno
#8、返回銷售部(sales)所有員工的姓名法希。
select e.ename from emp e,dept d
where e.deptno = d.deptno and d.dname = 'sales';
select ename from emp where deptno=(select deptno from dept where dname='sales');
#9枷餐、返回工資水平多于平均工資的員工。
select * from emp e
where e.sal > (select avg(sal) from emp);
#10苫亦、返回與SCOTT從事相同工作的員工尖淘。
select * from emp
where job = (select job from emp where ename = 'scott');
select e1.* from emp e1 , (select empno,job from emp where ename = 'scott') e2
where e1.job = e2.job and e1.empno != e2.empno;
#11、返回與30部門員工工資水平相同的員工姓名與工資著觉。
select ename,sal from emp
where sal in (select sal from emp where deptno = 30);
#12、返回工資高于30部門所有員工工資水平的員工信息惊暴。
select * from emp
where sal > all(select sal from emp where deptno = 30);
select * from emp
where sal > (select max(sal) from emp where deptno = 30);
#13饼丘、返回部門號、部門名辽话、部門所在位置及其每個部門的員工總數(shù)肄鸽。
select dept.deptno,dept.dname,dept.loc,count(emp.deptno) number from dept,emp
where dept.deptno = emp.deptno
group by emp.deptno;
#14卫病、返回員工的姓名、所在部門名及其工資典徘。
select ename,dname,sal from emp ,dept
where emp.deptno = dept.deptno;
#15蟀苛、返回員工的詳細信息。(包括部門名)
select e.* , d.dname from emp e, dept d
where e.deptno = d.deptno;
#16逮诲、返回員工工作及其從事此工作的最低工資帜平。
select job , min(sal) sal from emp
group by job
#17、計算出員工的年薪梅鹦,并且以年薪排序裆甩。
select ename, sal * 12 as ySalary from emp order by ySalary;
#18、返回工資處于第四級別的員工的姓名齐唆。
select ename,sal from emp e ,salgrade s
where e.sal >= s.losal and e.sal <= s.hisal
and s.grade = 4;
select emp.ename,emp.sal from
emp ,(select losal,hisal from salgrade where grade=4) g
where emp.sal between g.losal and g.hisal;
#19嗤栓、返回工資為二等級的職員名字、部門所在地箍邮、和二等級的最低工資和最高工資
select ename ,dname ,sal ,losal,hisal from emp,dept,salgrade
where emp.deptno = dept.deptno and grade = 2
and sal >= losal and sal < hisal;
#20.工資等級多于smith的員工信息茉帅。
select grade from salgrade s ,emp e
where s.losal < e.sal and s.hisal > e.sal and e.ename = 'smith';
select e.* from emp e, salgrade s
where s.hisal < e.sal and s.grade = 1;
select e.* from emp e, salgrade s
where s.hisal < e.sal and s.grade = (select grade from salgrade s ,emp e
where s.losal < e.sal and s.hisal > e.sal and e.ename = 'smith');