数据库学习7-23

oracle

第三章

练习1

 1.查询职位为SALESMAN的员工编号、职位、入职日期。

 select empno,job,hiredate  from emp  where job = 'SALESMAN';

 2.查询1985年12月31日之前入职的员工姓名及入职日期。

 select ename,hiredate  from emp  where hiredate = '31-12月-85';

 3.查询部门编号不在10部门的员工姓名、部门编号。

 select ename,deptno  from emp  where not deptno =10;

练习2

 1.查询入职日期在82年至85年的员工姓名,入职日期。

 select ename,hiredate  from emp  where hiredate in ('01-1月-82','31-12月-85');  

2.查询月薪在3000到5000的员工姓名,月薪。

 select ename,sal  from emp  where sal in (3000,5000);

 3.查询部门编号为10或者20的员工姓名,部门编号。

 select ename,deptno  from emp  where deptno in (10,20);  --where deptno =10 or deptno = 20;

 4.查询经理编号为7902, 7566, 7788的员工姓名,经理编号。

 select ename,mgr  from emp  where mgr in (7902,7566,7788);  

5.查询员工姓名以W开头的员工姓名。

 select ename  from emp  where ename like 'W%';

 6.查询员工姓名倒数第2个字符为T的员工姓名。

 select ename  from emp  where ename like '%T_';

 7.查询奖金为空的员工姓名,奖金。

 select ename,comm  from emp  where comm is null;

练习3

 1.查询工资超过2000并且职位是MANAGER,或者职位是SALESMAN的员工姓名、职位、工资

 select ename,job,sal  from emp  where (sal>2000 and job ='MANAGER') or job = 'SALESMAN';

 2.查询工资超过2000并且职位是 MANAGER或SALESMAN的员工姓名、职位、工资。

 select ename,job,sal  from emp  where sal>2000 and (job ='MANAGER' and job ='SALSMAN');  

3.查询部门在10或者20,并且工资在3000到5000之间的员工姓名、部门、工资。

 select ename,deptno,sal  from emp  where deptno in (10,20) and sal in (3000,5000);  

4.查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位。

 select ename,hiredate,job  from emp  where hiredate in ('01-1月-81','31-12月-81') and job not like 'SALES%';  

5.查询职位为SALESMAN或MANAGER,部门编号为10或者20,姓名包含A的员工姓名、职位、部门编号。

 select ename,job,deptno  from emp  where job = 'SALESMAN' or job='MANAGER' and deptno in(10,20) and ename like '%A%';

练习4

 1.查询部门在20或30的员工姓名,部门编号,并按照工资升序排序。

 select ename,deptno  from emp  where deptno in(10,20)  order by sal;

 2.查询工资在2000-3000之间,部门不在10号的员工姓名,部门编号,工资,并按照部门升序,工资降序排序。

 select ename,deptno,sal  from emp  where sal in(2000,3000) and not deptno =10  order by deptno,sal desc;

 3.查询入职日期在82年至83年之间,职位以SALES或者MAN开头的员工姓名,入职日期,职位,并按照入职日期降序排。

 select ename,hiredate,job  from emp  where hiredate in('01-1月-82','31-12月-83') and (job like 'SALES%'or job like 'MAN%')  order by hiredate desc;

课后作业 [必做题]

1.查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名、入职时间、职位。

 select ename,hiredate,job  from emp  where hiredate>'09=7月-82' and not job ='SALESMAN';

2.查询员工姓名的第三个字母是a的员工姓名。

 select ename  from emp  where ename like '__a%';

3.查询除了10、20号部门以外的员工姓名、部门编号。

 select ename,deptno  from emp  where  not deptno in (10,20);

4.查询部门号为30号员工的信息,先按工资降序排序,再按姓名升序排序。

 select *  from emp  where deptno =30  order by sal desc,ename;

5.查询没有上级管理的员工(经理号为空)的员工姓名、上级编号。

 select ename,mgr  from emp  where mgr is null;

6.查询工资大于等于4500并且部门为50或者60的员工的姓名\工资、部门编号。

 select ename,sal,deptno  from emp  where sal>=4500 and deptno in (50,60);

 

第五章

练习1

 1.写一个查询,显示所有员工姓名,部门编号,部门名称。

 select ename,emp.deptno,dname    from emp,dept    where emp.deptno=dept.deptno;

 2.写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金

 select ename,loc,comm    from emp,dept    where emp.deptno = dept.deptno and (loc = 'CHICAGO' )and not ( comm  is null);

 3.写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点  

select ename,loc  from emp,dept  where emp.deptno = dept.deptno and ename like '%A%';

 

练习2  

1.查询每个员工的编号,姓名,工资,工资等级,所在工作城市,按照工资等级进行升序排序。

 select empno,ename,sal,grade,loc  from emp,dept,salgrade  where emp.deptno = dept.deptno and emp.sal between salgrade.losal and salgrade.hisal  order by grade;

练习3

 1. 查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号  

select a.ename,a.empno,b.ename,b.empno  from emp a,emp b,dept  where a.mgr=b.empno and loc in('NEWYORK','CHICAGO');

 2.第上一题的基础上,添加没有经理的员工King,并按照员工编号排序  

select a.ename,a.empno,b.ename,b.empno   from emp a,emp b    where a.mgr=b.empno(+)    order by a.empno;

 

练习4

 使用SQL-99写法,完成如下练习

 1.创建一个员工表和部门表的交叉连接。

 select * from emp CROSS join dept;

 2.使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期

 select ename,dname,hiredate from emp NATURAL join dept   where  hiredate >'01-5月-80';  

3.使用USING子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点

 select ename,dname,loc from emp join dept  using(deptno) where loc='CHICAGO';

 4.使用ON子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点,薪资等级

 select ename,dname,loc,grade from emp  join dept on emp.deptno=dept.deptno   join salgrade on sal between losal and hisal and loc='CHICAGO';

 5.使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。

 select a.ename ,b.ename  from emp a left outer join emp b  on a.mgr = b.empno;       

 6.使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。

 select a.ename,b.ename  from emp a right outer join emp b  on a.empno=b.mgr;

 

课后作业

 1.显示员工SMITH的姓名,部门名称,直接上级名称

 select a.ename,a.deptno,b.ename  from emp a,emp b  where a.mgr=b.empno and a.ename ='SMITH';  

 2.显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。

 select ename,dname,sal,grade  from emp,dept,salgrade  where emp.deptno=dept.deptno and sal between losal and hisal and grade>4;

 3.显示员工KING和FORD管理的员工姓名及其经理姓名。

 select a.ename,b.ename,c.ename  from emp a,emp b,emp c  where (a.ename='KING'or a.ename='FORD')  and (a.empno=b.mgr) and (a.mgr=c.empno(+));

 4.显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。

 select a.ename,a.hiredate,b.ename,b.hiredate  from emp a,emp b  where a.mgr=b.empno and a.hiredate<b.hiredate;

 

mysql

第六章

练习1

1.写一个查询,显示所有员工姓名,部门编号,部门名称。

 select ename,emp.deptno,dname  from emp,dept  where emp.deptno=dept.deptno;

2.写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金

 select ename,loc,comm  from emp,dept  where emp.deptno=dept.deptno and loc='CHICAGO' and comm is null;

3.写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。

 select ename,loc  from emp,dept  where emp.deptno= dept.deptno and ename like '%A%';

 

练习2

1.查询每个员工的编号,姓名,工资,工资等级,所在工作城市,按照工资等级进行升序排序。  

select empno,ename,sal,grade,loc  from emp,dept,salgrade  where emp.deptno=dept.deptno and sal between losal and hisal  order by grade;

 

练习3

1.查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号。

 select a.ename,a.empno,b.ename,b.empno  from emp a,emp b,dept  where (loc ='NEW YORK' or loc ='CHICAGO') and (a.deptno=dept.deptno) and a.mgr=b.empno ;

 

练习4

1.使用SQL-99写法,完成如下练习 1.创建一个员工表和部门表的交叉连接。

 select * from emp CROSS join dept;

2.使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期

 select emp.ename,dept.dname,emp.hiredate  from emp NATURNAL join dept  where emp.deptno=dept.deptno and emp.hiredate>'1980-5-1';

3.使用USING子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点

 select ename,dname,loc  from emp join dept  using(deptno) where loc='CHICAGO';

4.使用ON子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点,薪资等级

 select ename ,dname,loc,grade  from emp join dept on emp.deptno=dept.deptno  join salgrade on sal between losal and hisal and loc='CHICAGO';

5.使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。

 select a.ename,b.ename  from emp a left outer join emp b  on a.mgr=b.empno;

6.使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。

 select a.ename,b.ename  from emp a right outer join emp b  on a.empno= b.mgr;

 

课后作业

1.显示员工SMITH的姓名,部门名称,直接上级名称

 select a.ename,dname,b.ename  from emp a,emp b,dept  where a.deptno=dept.deptno and a.mgr=b.empno and a.ename = 'SMITH';

2.显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。

 select ename,dname,sal,grade  from emp,dept,salgrade  where emp.deptno=dept.deptno and sal between losal and hisal and grade>4;

 3.显示员工KING和FORD管理的员工姓名及其经理姓名。

select a.ename,b.ename,c.ename from emp a  join emp b on (b.empno=a.mgr) left outer join emp c on  b.mgr=c.empno where b.ename ='KING' or a.ename= 'FORD';

4.显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。

 select a.ename,a.hiredate,b.ename,b.hiredate  from emp a,emp b  on a.mgr=b.empno and a.hiredate<b.hiredate;

posted on 2019-07-23 20:52  一只小白two  阅读(1453)  评论(0编辑  收藏  举报