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;