数据库查询的练习

已知三张表:部门表、员工表、工资等级表

-- 部门表 [部门编号deptno, 部门名称dname, 部门地址loc]
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');
-- 员工表emp [员工编号empno, 员工姓名ename, 员工工作job, 员工直属领导编号mgr, 入职时间hiredate, 工资sal, 奖金comm, 部门编号deptno]
CREATE TABLE emp(
empno int PRIMARY KEY,
ename VARCHAR(10), 
job VARCHAR(9),
mgr int, 
hiredate DATE,
sal double,
comm double,
deptno int 
);
-- 添加数据
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);
-- 工资等级表salgrade 【等级 grade, 最低工资 lowsal, 最高工资 hisal】
CREATE TABLE salgrade(
grade int,
lowsal 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.找出姓名以a、b、s开始的员工信息

 select * from emp where ename regexp '^[a,b,s]'; 

2.返回员工的详细信息并按姓名排序

 select * from emp order by ename;

3.返回员工的信息并按工作降序工资升序排列

select * from emp order by job desc, sal ;  

4.返回拥有员工的部门名、部门号

 select distinct  dname,dept.deptno from dept inner join emp on dept.deptno = emp.deptno; 

5.工资高于smith的员工信息

select * from emp where sal >(select sal from emp where ename = 'smith') ;

6.返回员工和所属经理的姓名

create view v_mgr as select distinct ename,empno from emp where empno in (select mgr from emp); 
select emp.ename,v_mgr.ename from emp inner join v_mgr on emp.mgr=v_mgr.empno; 

7.返回雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名

select v_mgr.ename as 经理,group_concat(emp.ename)as 下属 from emp inner join v_mgr on emp.mgr = v_mgr.empno and emp.hiredate < v_mgr.hiredate group by emp.mgr; 

8.返回员工姓名及其所在的部门名称

 select ename,dname from emp inner join dept on emp.deptno in(select deptno from dept)and emp.deptno = dept.deptno ; 

9.返回从事clerk工作的员工姓名和所在部门名称

select ename,dname from emp inner join dept on emp.deptno in(select deptno from dept)and emp.deptno = dept.deptno and emp.job = 'clerk'; 

10.返回部门号及其本部门的最低工资

 select deptno as 部门,min(sal) as 最低工资 from emp group by deptno; 

11.返回销售部(sales)所有员工的姓名

 select ename as 销售部 from dept inner join emp on dname='sales' and emp.deptno=dept.deptno ; 

12.返回与scott从事相同工作的员工

select ename from emp where job=(select job from emp where ename='scott')and enam
                                e!='scott'; 

13.返回员工的详细信息(包括部门名称及部门地址)

select emp.*,dname,loc from emp inner join dept on emp.deptno=dept.deptno; 

14.返回员工工作及其从事此工作的最低工资

select group_concat(ename),job as 工作名称,min(sal)as 最低工资 from emp group by job; 

15.返回工资处于第四级别的员工的姓名

select emp.ename from emp inner join salgrade on emp.sal between salgrade.lowsal and salgrade.hisal and salgrade.grade =4; 

16.返回工资为二等级的职员名字、部门所在地、和二等级的最低工资和最高工资

 create view v_es as select emp.*,salgrade.grade from emp inner join salgrade on emp.sal between salgrade.lowsal and salgrade.hisal and salgrade.grade =2; 
 select v_es.*,loc from v_es inner join dept on v_es.deptno = dept.deptno; 

17.工资等级高于smith的员工信息

select v_es.*,loc from v_es inner join dept on v_es.deptno = dept.deptno  and v_es.grade>(select grade from v_es where ename = 'smith' ) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值