表結構
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, #員工直屬領導編號
HIREDATE DATE, #入職時間
SAL double, #工資
COMM double, #獎金
DEPTNO int #對應dept表的外鍵
);
## 添加 部門 和 員工 之間的主外鍵關系
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部門的經理、20部門的職員的員工信息。
6.找出10部門的經理、20部門的職員或者既不是經理也不是職員但是工資高于2000元的員工信息。
7.找出獲得獎金的員工的工作。
8.找出獎金少于100或者沒有獲得獎金的員工的信息。
9.找出姓名以A、B、S開始的員工信息。
10.找到名字長度為6個字符的員工信息。
11.名字中不包含R字符的員工信息。
12.返回員工的詳細信息并按姓名排序。
13.返回員工的信息并按工作降序工資升序排列。
14.計算員工的日薪(按30天)。
15. 找出姓名中包含A的員工信息。
多表查詢題目
返回擁有員工的部門名、部門號。
2.工資水平多于smith的員工信息。
3.返回員工和所屬經理的姓名。
or
(沒有經理是否顯示)
4.返回雇員的雇傭日期早于其經理雇傭日期的員工及其經理姓名
5. 返回員工姓名及其所在的部門名稱。
6. 返回從事clerk工作的員工姓名和所在部門名稱。
7. 返回部門號及其本部門的最低工資。
8. 返回銷售部(sales)所有員工的姓名。
9.返回工資水平多于平均工資的員工。
10. 返回與SCOTT從事相同工作的員工。
如果不包含自己
11.返回與30部門員工工資水平相同的員工姓名與工資。
12.返回工資高于30部門所有員工工資水平的員工信息。
13.返回部門號、部門名、部門所在位置及其每個部門的員工總數。
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部門的經理、20部門的職員 的員工信息。
select * from emp where deptno = 10 and job='MANAGER' or deptno = 20 and job = 'CLERK';
#6、找出10部門的經理、20部門的職員 或者既不是經理也不是職員但是工資高于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、返回員工和所屬經理的姓名。
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、返回雇員的雇傭日期早于其經理雇傭日期的員工及其經理姓名。
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、返回部門號、部門名、部門所在位置及其每個部門的員工總數。
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');