Oracle数据库查询练习及答案
- 格式:doc
- 大小:32.00 KB
- 文档页数:6
史上最全Oracle数据库基本操作练习题(含答案)oracle基本操作练习题使用表格:员工表(emp):部:(deptnonumber(2)notnull,--部门编号dnamevarchar2(14),--部门名称locvarchar2(13)―部门地址)注:添加、删除和修改相对简单。
这些练习旨在进行数据查询。
查询主要使用函数、运算符、模糊查询、排序、分组、变量关联、子查询、分页查询等。
建表脚本(根据需要使用):创建表脚本1练习:2.找出部门10中所有经理(manager)和部门20中所有办事员(clerk)的详细资料。
从empwhere(job='manager'和deptno=10)或(job='clerk'和deptno=20)中选择*;3.统计各部门的薪水总和。
按deptno从empgroup中选择deptno,sum(sal);4.找出部门10中所有理(manager),部门20中所有办事员(clerk)以及既不是经理又不是办事员但其薪水大于或等2000的所有员工的详细资料。
从empwhere(job='manager'和deptno=10)或(job='clerk'和deptno=20)或(jobnotin('manager','clerk')和sal>2000)中选择*;5.列出各种工作的最低工资。
从empgroupbyjob中选择job,min(sal);26.列出每个部门经理的最低工资。
selectdeptno,min(sal)fromempwherejob='manager'groupbydeptno;7.了解领取奖金的员工的不同工作。
9.找出各月最后一天受雇的所有员工。
选择*fromempwherehiredate=最后一天(hiredate);10.显示所有员工的姓名,首字母大写。
oracle 数据库增删改查练习50例-答案一、建表--学生表drop table student;create table student (sno varchar2(10,sname varchar2(10,sage date,ssex varchar2(10;insert into student values('01','赵雷',to_date('1990/01/01','yyyy/mm/dd','男';insert into student values('02','钱电',to_date('1990/12/21','yyyy/mm/dd','男';insert into student values('03','孙风',to_date('1990/05/20','yyyy/mm/dd','男';insert into student values('04','李云',to_date('1990/08/06','yyyy/mm/dd','男';insert into student values('05','周梅',to_date('1991/12/01','yyyy/mm/dd','女';insert into student values('06','吴兰',to_date('1992/03/01','yyyy/mm/dd','女';insert into student values('07','郑竹',to_date('1989/07/01','yyyy/mm/dd','女';insert into student values('08','王菊',to_date('1990/01/20','yyyy/mm/dd','女';--课程表drop table course;create table course (cno varchar2(10,cname varchar2(10,tno varchar2(10;insert into course values ('01','语文','02';insert into course values ('02','数学','01';insert into course values ('03','英语','03';--教师表drop table teacher;create table teacher (tno varchar2(10,tnamevarchar2(10;insert into teacher values('01','张三';insert into teacher values('02','李四';insert into teacher values('03','王五';--成绩表drop table sc;create table sc (sno varchar2(10,cno varchar2(10,score number(18,1;insert into sc values('01','01',80.0;insert into sc values('01','02',90.0;insert into sc values('01','03',99.0;insert into sc values('02','01',70.0;insert into scvalues('02','02',60.0;insert into sc values('02','03',80.0;insert into scvalues('03','01',80.0;insert into sc values('03','02',80.0;insert into scvalues('03','03',80.0;insert into sc values('04','01',50.0;insert into scvalues('04','02',30.0;insert into sc values('04','03',20.0;insert into scvalues('05','01',76.0;insert into sc values('05','02',87.0;insert into scvalues('06','01',31.0;insert into sc values('06','03',34.0;insert into scvalues('07','02',89.0;insert into sc values('07','03',98.0;commit;二、查询1.1、查询同时存在"01"课程和"02"课程的情况select s.sno, s.sname, s.sage, s.ssex, sc1.score, sc2.score from student s, sc sc1, sc sc2 where s.sno = sc1.sno and s.sno = sc2.sno and o = '01' and o = '02';1.2、查询必须存在"01"课程,"02"课程可以没有的情况select t.*, s.score_01, s.score_02 from student t inner join (select a.sno, a.score score_01, b.score score_02 from sc a left join (select * from sc where cno = '02' b on (a.sno = b.sno where o = '01' s on (t.sno = s.sno;2.1、查询同时'01'课程比'02'课程分数低的数据select s.sno, s.sname, s.sage, s.ssex, sc1.score, sc2.score from student s, sc sc1, sc sc2 where s.sno = sc1.sno and s.sno = sc2.sno and o = '01' and o = '02' and sc1.score < sc2.score;2.2、查询同时'01'课程比'02'课程分数低或'01'缺考的数据select s.sno, s.sname, s.sage, s.ssex, t.score_01, t.score_02 from student s, (select b.sno, a.score score_01,b.score score_02 from (select * from sc where cno = '01' a, (select * from sc where cno = '02' b where a.sno(+ = b.sno t where s.sno = t.sno and (t.score_01 < t.score_02 ort.score_01 is null;3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩select s.sno, s.sname, t.avg_score avg_score from student s, (select sno, round(avg(score, 2 avg_score from sc group by sno having avg(score >= 60 order by sno t where s.sno = t.sno;4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩4.1、有考试成绩,且小于60分select s.sno, s.sname, t.avg_score avg_score from student s,(select sno, round(avg(score, 2 avg_score from sc group by sno having avg(score < 60 order by sno t where s.sno = t.sno;4.2、包括没有考试成绩的数据select g.* from (select s.sno, s.sname,nvl(t.avg_score, 0 avg_score from student s, (select sno, round(avg(score, 2 avg_score from sc group by sno order by sno t where s.sno = t.sno(+ g where g.avg_score < 60;5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩5.1、查询所有成绩的(不含缺考的)。
oracle练习及答案测试⼀1.SQL*PLUS命令可以控制数据库(no)2.下⾯的语句是否可以执⾏成功(yes)select last_name , job_id , salary as salfrom employees;3.下⾯的语句是否可以执⾏成功(yes)select * from employees;4.找出下⾯语句中的错误select employee_id , last_namesal * 12 ANNUAL SALARYfrom employees;列于列之间未⽤逗号分隔别名应⽤引号括起来5.显⽰表departments的结构,并查询其中的全部数据desc departmentsselect * from departments;6.显⽰出表employees中的全部job_id(不能重复)select distinct job_idfrom employees;7.显⽰出表employees的全部列,各个列之间⽤逗号连接,列头显⽰成OUT_PUTselect EMPLOYEE_ID||','|| FIRST_NAME||','||LAST_NAME||','||EMAIL||','||PHONE_NUMBER||','||HIRE_DATE||','||JOB_ID||','||SALARY||','||COMMISSION_PCT||','||MANAGER_ID||','|| DEPARTMENT_ID as "OUT_PUT" from employees;测试⼆1.查询⼯资⼤于12000的员⼯姓名和⼯资SELECT FIRST_NAME, salaryFROM employeesWHERE salary > 12000;2.查询员⼯号为176的员⼯的姓名和部门号SELECT FIRST_NAME, department_idFROM employeesWHERE employee_id = 176;3.选择⼯资不在5000到12000的员⼯的姓名和⼯资SELECT FIRST_NAME, salaryFROM employeesWHERE salary NOT BETWEEN 5000 AND 12000;4.选择雇⽤时间在1998-02-01到1998-05-01之间的员⼯姓名,job_id和雇⽤时间SELECT FIRST_NAME, job_id, hire_dateFROM employeesWHERE hire_date BETWEEN '01-2⽉-98' AND '01-5⽉-98';5.选择在20和50号部门⼯作的员⼯姓名和部门号SELECT FIRST_NAME, department_idFROM employeesWHERE department_id IN (20, 50);6.选择在1994年雇⽤的员⼯的姓名和雇⽤时间SELECT FIRST_NAME, hire_dateFROM employeesWHERE hire_date LIKE '%94';7.选择公司中没有管理者的员⼯姓名及job_idSELECT FIRST_NAME, job_idFROM employeesWHERE manager_id IS NULL;8.选择公司中有奖⾦的员⼯姓名,⼯资和奖⾦SELECT FIRST_NAME, salary, commission_pctFROM employeesWHERE commission_pct IS NOT NULL;9.选择员⼯姓名的第三个字母是a的员⼯姓名SELECT FIRST_NAMEFROM employeesWHERE FIRST_NAME LIKE '__a%';10.选择姓名中有字母a和e的员⼯姓名SELECT FIRST_NAMEFROM employeesWHERE (FIRST_NAME LIKE '%e%a%' OR FIRST_NAME LIKE '%a%e%')测试三1.显⽰系统时间Select sysdate "Date" from dual2.查询员⼯号,姓名,⼯资,以及⼯资提⾼百分之20%后的结果(new salary)select empno,ename,sal, round(sal*1.20,0) as“new salary” from emp;3.将员⼯的姓名按⾸字母排序,并写出姓名的长度(length)select ename "Name" ,length(ename) "Length" from emp order by substr(ename,1,1);4.查询各员⼯的姓名,并显⽰出各员⼯在公司⼯作的⽉份数(worked_month)。
Oracle查询练习及答案分类:技术文档2012-09-16 15:30 383人阅读评论(0) 收藏举报oracletableinsertdelete工作null--1 显示所有部门名select dnamefrom dept--2 显示所有雇员名及其全年收入(工资+补助),并指定列别名"年收入"select ename,nvl2(comm,sal+comm,sal) as 年收入from emp--3 显示存在雇员的所有部门号select distinct deptnofrom emp--4 显示工资超过2850的雇员名和工资select ename,salfrom empwhere sal > 2850--5 显示工资不在1500到2850之间的所有雇员名及工资select ename,salfrom empwhere sal not between 1500 and 2850--6 显示雇员代码为7566的雇员名及所在部门号select ename,deptnofrom empwhere empno = 7566--7 显示部门代码为10和30中工资超过1500的雇员名及工资select ename,salfrom empwhere sal > 1500 and deptno in (10,30)--8 显示无管理者的雇员名及岗位select ename,jobfrom empwhere mgr is null--9 显示所有雇员的平均工资、总计工资、最高工资、最低工资select avg(sal) as 平均工资,sum(sal) as 总计工资max(sal) as 最高工资min(sal) as 最低工资from emp--10 显示每种岗位的雇员总数、平均工资select job,count(*),avg(sal)from empgroup by job--11 显示雇员总数,以及获得补助的雇员数select count(*),count(comm)from emp--12 显示管理者的总人数select count(distinct mgr)from emp--13 显示雇员工资的最大差额select max(sal) - min(sal)from emp--14 显示部门代码为20的部门号,以及该部门的所有雇员名、雇员工资及岗位select ename,sal,jobfrom empwhere deptno = 20--15 显示获得补助的所有雇员名、补助额以及所在部门号select deptno,ename,commfrom empwhere comm is not null--16 显示所有雇员的姓名、部门编号、工资,并且列名要显示为中文select ename as 姓名,deptno as 部门编号,sal as 工资from emp--17 显示每个部门每个岗位的平均工资、每个部门的平均工资、每个岗位的平均工资select deptno,job,avg(sal)from empgroup by cube(deptno,job)--18 显示工资大于1500的雇员名和工资,并且按照工资的降序排列select ename,salfrom empwhere sal > 1500order by sal desc--19 显示雇员部门编号为10或20的信息(要求使用IN关键字)select *from empwhere deptno in (10,20)--20 显示雇员名的第二个字母为A的信息select enamefrom empwhere ename like '_A%'--21 显示没有发放补助的雇员信息select *from empwhere comm is null--22 显示雇员表中记录总数select count(*)from emp以scott/tiger登录数据库,完成以下题目--1 显示所有雇员名、雇员工资及所在部门名select d.dname,e.ename,e.salfrom dept d,emp ewhere d.deptno = e.deptno--2 显示部门代码为20的部门名,以及该部门的所有雇员名、雇员工资及岗位select d.dname,e.ename,e.salfrom dept d,emp ewhere d.deptno = e.deptnoand d.deptno = 20--3 显示所有雇员名、雇员工资及工资级别select e.ename,e.sal,s.gradefrom emp e,salgrade swhere e.sal >= s.losal and e.sal <= s.hisal--4 显示雇员"SCOTT"的管理者名select m.enamefrom emp e,emp mwhere e.mgr = m.empnoand e.ename = 'SCOTT'--5 显示获得补助的所有雇员名、补助额以及所在部门名select d.dname,e.ename,mfrom dept d,emp ewhere d.deptno = e.deptnoand m is not null--6 查询EMP表和SALGRADE表,显示部门代码为20的雇员名、工资及其工资级别select e.ename,e.sal,s.gradefrom emp e,salgrade swhere e.sal >= s.losal and e.sal <= s.hisaland e.deptno = 20--7 显示部门代码为10的所有雇员名、部门名,以及其他部门名select e.ename,d.dnamefrom dept d,emp ewhere d.deptno = e.deptno(+)and e.deptno(+) = 10--8 显示部门代码为10的所有雇员名、部门名,以及其他雇员名select e.ename,d.dnamefrom dept d,emp ewhere d.deptno(+) = e.deptnoand d.deptno(+) = 10--9 显示部门代码为10的所有雇员名、部门名,以及其他部门名和雇员名select e.ename,d.dnamefrom dept d full join emp eon d.deptno = e.deptnoand d.deptno = 10--10显示"BLAKE"同部门的所有雇员,但不显示"BLAKE"select e.ename,e.deptnofrom emp e,emp bwhere e.deptno = b.deptnoand e.ename <> 'BLAKE'and b.ename = 'BLAKE'--01 按以下格式显示下面的信息,条件是工资大于1500的。
简单查询1.查询customers表中的所有记录的c_name, c_truename, c_address,c_mobile列。
SELECT c_name, c_truename, c_address, c_mobile FROM Customers2.在会员信息表中查询年龄在20岁到30之间的会员信息。
SELECT*from Customers year(getdate())-year(birthdate)between 20 and303.查询会员所有的地址,即不重复的地址。
sELECT DISTINCT c_Address FROM Customers4.查询会员电话区号为0731的会员信息。
SELECT*FROM Customers WHERE c_Phone LIKE'0731%'5.查询VIP会员信息。
SELECT*FROM Customers where c_Type='VIP'6.统计商品类别数。
SELECT count(*)FROM Types7.在商品信息表中查询三星的产品信息。
SELECT*FROM Goods where g_Name like'三星_%'8.在商品信息表中查询价格在2000-3000区间的商品信息。
SELECT*FROM Goods WHERE g_Price between 2000 and 30009.在商品信息表以价格降序查询商品信息。
SELECT*FROM Goods ORDER BY g_Price DESC10.在商品信息表中查询商品类别为02的所有商品的商品名称,商品单价,并根据商品价格进行升序排序。
SELECT g_Name g_Price FROM Goods WHERE t_ID like'02%'ORDER BY g_Price ASC11.在商品信息表中查询三星和海尔品牌的商品的详细信息。
Oracle基础练习题及答案(多表查询1)(共5篇)第一篇:Oracle基础练习题及答案(多表查询1)利用scott用户自带的四张表完成如下作业:1.列出至少有一个员工的所有部门select b.deptno,b.dname from emp a,dept b where a.deptno=b.deptno group by b.deptno,b.dname having count(*)>=1;2.列出薪金比SMITH高的所有员工select * from emp where sal>(select sal from emp where ename='SMITH');3.列出所有员工的姓名及其直接上级领导的姓名select a.ename,b.ename “leader” from emp a,emp b wherea.mgr=b.empno;4.列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称select a.empno,a.ename,a.hiredate,c.dname from emp a,emp b,dept c where a.mgr=b.empno and a.deptno=c.deptno anda.hiredate5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门select b.dname,a.* from emp a,dept b wherea.deptno(+)=b.deptno;6.列出所有CLERK(办事员)的姓名,及其部门名称,部门人数select aa.ename,aa.job,bb.dname,(select count(a.deptno)from emp a,dept b where a.deptno=b.deptno and b.dname=bb.dname group by a.deptno)from emp aa,dept bb where aa.deptno(+)=bb.deptno and aa.job='CLERK';7.列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数select a.job,min(sal),count(ename)from emp a,dept b wherea.deptno=b.deptno having min(sal)>1500 group by a.job;8.列出在部门SALES(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
oracle数据库的试题及答案一、选择题1. Oracle数据库是一种()数据库管理系统。
A. 非关系型B. 关系型C. 分布式D. 图形化2. 数据库中,将所有数据进行分类和组织的基本单位是()。
A. 表B. 字段C. 记录D. 数据库3. 在Oracle数据库中,用于删除表中所有数据的操作是()。
A. DELETEB. REMOVEC. DROPD. TRUNCATE4. 在Oracle数据库中,用于更新表中数据的操作是()。
A. UPDATEB. MODIFYC. ALTERD. REPLACE5. 在Oracle数据库中,用于查询数据的操作是()。
A. SELECTB. SEARCHC. FINDD. WHERE二、简答题1. 请简述Oracle数据库的特点。
Oracle数据库具有以下特点:- 完整性:通过约束和触发器来保证数据的完整性。
- 可扩展性:支持集群部署和分布式数据库,可以动态扩展数据库的容量。
- 安全性:提供了严格的数据权限管理和用户认证机制,保护数据免受未经授权的访问。
- 可靠性:支持数据备份和恢复功能,保障数据的持久性和可靠性。
- 高性能:采用多线程和缓存技术,提高数据库的读写性能和响应速度。
2. 在Oracle数据库中,什么是事务?事务是指逻辑上的一组操作,这组操作要么全部成功执行,要么全部失败回滚。
事务具有以下特性:- 原子性:事务中的操作要么全部执行成功,要么全部回滚,不会出现部分执行的情况。
- 一致性:事务执行前后,数据库的状态保持一致性,不会破坏数据的完整性。
- 隔离性:事务之间相互独立,每个事务都认为自己是唯一在操作数据库的。
- 持久性:事务一旦提交,其对数据库的修改将永久保存,不会被回滚。
3. 请说明Oracle数据库中的索引是什么,并简要介绍索引的作用。
索引是一种特殊的数据库对象,用于快速查找数据库中的数据。
索引基于一个或多个列值创建,并按照特定的排序规则存储列值和对应的行指针。
--1.列出至少有一个雇员的所有部门。
SELECT * FROM DEPTWHERE DEPTNO IN (SELECT DISTINCT DEPTNO FROM EMP);--2.列出薪金比“SMITH”多的所有雇员。
SELECT * FROM EMP WHERE SAL>(SELECT SAL FROM EMP WHERE ENAME='SMITH');--3.列出所有雇员的姓名及其上级的姓名。
SELECT AS empName, AS mgrNameFROM emp ygb,emp sjbWHERE =;--4.列出入职日期早于其直接上级的所有雇员。
【SELECT * FROM emp ygbWHERE hiredate<(SELECT hiredate FROM emp sjb WHERE =;--5.列出所有部门的名称和这些部门的雇员编号及姓名(没有雇员的部门包含在内)SELECT dname,enameFROM dept a LEFT JOIN emp b ON =; --6.列出所有JOB为“CLERK”(办事员)的员工姓名及其部门名称SELECT ename,dnameFROM dept a,emp bWHERE = AND job='CLERK';--7.列出各种类型的最低薪金,并使最低薪金大于。
SELECT job,MIN(sal)—FROM empGROUP BY jobHAVING MIN(sal)>1500;--8.列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号。
SELECT ename FROM empWHERE deptno=(SELECT deptno FROM dept WHERE dname='SALES'); --9.列出薪金高于公司平均水平的所有雇员。
SELECT * FROM EMP WHERE SAL>(SELECT AVG(SAL) FROM EMP);--10.列出与“SCOTT”从事相同工作的所有雇员。
一、现有学生表stuInfo,班级表classInfo,表结构如下:stuInfo表:sid学号,sname姓名,sex性别,birthday生日,age入学年龄,smoney缴费,cid班级IDclassInfo表:班级编号cid,班级名称cname1、查询入学年龄在18-20的女生或者未输入性别的学生信息,且年龄小的排在后面。
Select * from stuInfo where age between 18 and 20 or sex is null order by age desc;2、查询班级名称、学生姓名、性别、缴费(要求显示单位:元),相同班级的要放在一起,再按姓名升序排列。
Select cname,sname,sex,smoney||’元’ from stuInfo,classInfo where stuInfo.cid=classInfo.cid order by cid,sname;3、查询各班名称和人数。
Select cname,count(*) from stuInfo,classInfo where stuInfo.cid=classInfo.cid group by cname;4、查询各班名称和人数,但人数必须不少于2,且人数多的放在前面。
Select cname,count(*) from stuInfo,classInfo where stuInfo.cid=classInfo.cid group by cname having count(*)>=2 order by count(*) desc;5、查询1980年出生的有哪些学生。
Select * from stuInfo where to_char(birthday,’yyyy’)=’1980’;6、查询男生和女生人数,没有输入性别的当作男生计算。
Select sex,count(nvl(sex,’男’)) from stuInfo group by sex;7、查询没有人员的班级。
1 找出佣金高于薪金60%的雇员。
SELECT * FROM emp WHERE comm>sal*;2 找出部门10中所有经理和部门20中所有办事员的详细资料。
SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK';3 找出部门10中所有经理,部门20中所有办事员以及既不是经理又不是办事员但其薪金大于或等2000的所有雇员的详细资料。
SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR JOB NOT IN('MANAGER','CLERK') AND SAL>=2000;SELECT * FROM emp WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR (JOB<>'MANAGER' AND JOB<>'MANAGER' AND SAL>=2000);4 找出收取佣金的雇员的不同工作。
SELECT DISTINCT JOB FROM EMP WHERE COMM IS NOT NULL;5 找出不收取佣金或收取的佣金低于300的雇员。
SELECT * FROM EMP WHERE COMM IS NULL OR COMM<300;6 找出各月最后一天受雇的所有雇员。
SELECT * FROM EMP WHERE HIREDATE=LAST_DAY(HIREDATE);--找出各月最后受雇的所有雇员SELECT * FROM emp WHERE hiredate IN (SELECT maxh FROM (SELECT MAX(HIREDATE) maxh,EXTRACT(MONTH FROM hiredate)FROM EMP GROUP BY EXTRACT(MONTH FROM hiredate)));7 找出晚于26年之前受雇的雇员。
SELECT * FROM emp WHERE months_between(SYSDATE,hiredate)<=26*12;8 显示只有首字母大写的的所有雇员的姓名。
SELECT * FROM emp WHERE ename=initcap(ename);9 显示正好为5个字符的雇员的姓名。
SELECT * FROM emp WHERE length(ename)=5;10显示不带有“R”的雇员姓名。
SELECT * FROM emp WHERE instr(ename,'R')=0;SELECT * FROM emp WHERE ename NOT LIKE '%R%';11显示所有雇员的姓名的前三个字符。
SELECT substr(ename,1,3) AS en3 FROM emp;12显所有雇员的姓名,用a替换所有“A”。
SELECT REPLACE(ename,'A','a') FROM emp;13显示所有雇员的姓名以及满10年服务年限的日期。
SELECT ENAME,HIREDATE,ADD_MONTHS(HIREDATE,120) AS H_10Y FROM EMP;14显示雇员的详细资料,按姓名排序。
SELECT * FROM EMP ORDER BY ENAME;15显示雇员姓名,根据其服务年限,将最老的雇员排在最前面。
SELECT ENAME,HIREDATE FROM EMP ORDER BY HIREDATE;16显示所有雇员的姓名、工作和薪金,按工作内的工作的降序顺序顺序排序,而工作按薪金排序。
SELECT ENAME,JOB,SAL FROM EMP ORDER BY JOB DESC,SAL;17显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,并将最早年份的项目排在最前面。
SELECT ENAME,TO_CHAR(HIREDATE,'YYYY-MM') AS Y_M FROM EMP ORDER BY TO_CHAR(HIREDATE,'MM'),TO_CHAR(HIREDATE,'YYYY');18显示在一个月为30天的情况下所有雇员的日薪金,取整。
SELECT ROUND(SAL/30) AS SAL FROM EMP;19找出在(任何年份的)2月受聘的所有雇员。
SELECT * FROM EMP WHERE TO_CHAR(HIREDATE,'MM')='02';20对于每个雇员,显示其加入公司的天数。
SELECT CEIL(SYSDATE-HIREDATE) AS DY FROM EMP;21显示姓名字段的任何位置,包含“A”的所有雇员的姓名。
SELECT ENAME FROM EMP WHERE ENAME LIKE '%A%';SELECT ENAME FROM EMP WHERE INSTR(ENAME,'A')>0;22以年、月和日显示所有雇员的服务年限。
SELECT HIREDATE,FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12) AS Y,MOD(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE)),12) AS M,MOD(FLOOR(SYSDATE-HIREDATE),30) AS D FROM EMP;23列出至少有一个雇员的所有部门。
SELECT * FROM DEPT WHERE DEPTNO IN (SELECT DISTINCT DEPTNO FROM EMP);24列出薪金比“SMITH”多的所有雇员。
SELECT * FROM EMP WHERE SAL>(SELECT SAL FROM EMP WHERE ENAME='SMITH');25列出所有雇员的姓名及其上级的姓名。
SELECT AS empnm, AS mgrnm FROM emp ygb,emp sjb WHERE =;26列出入职日期早于其直接上级的所有雇员。
SELECT * FROM emp ygb WHERE hiredate<(SELECT hiredate FROM emp sjb WHERE =;27列出部门和这些部门的雇员,同时列出那些没有雇员的部门。
SELECT * FROM dept WHERE deptno IN (SELECT DISTINCT deptno FROM emp)UNIONSELECT * FROM dept WHERE deptno NOT IN (SELECT DISTINCT deptno FROM emp)SELECT dname,ename FROM dept a LEFT JOIN emp b ON =;28列出所有“CLERK”(办事员)的姓名及其部门名称。
SELECT ename,dname FROM dept a,emp b WHERE = AND job='CLERK';29列出各种类型的最低薪金,并使最低薪金大于1500。
SELECT job,MIN(sal) FROM emp GROUP BY job HAVING MIN(sal)>1500;30列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号。
SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE dname='SALES');31列出薪金高于公司平均水平的所有雇员。
SELECT * FROM EMP WHERE SAL>(SELECT AVG(SAL) FROM EMP);32列出与“SCOTT”从事相同工作的所有雇员。
SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME='SCOTT') AND ENAME<>'SCOTT';33列出薪金等于在部门30工作的所有雇员的姓名和薪金。
SELECT * FROM EMP WHERE SAL IN(SELECT SAL FROM EMP WHERE DEPTNO=30);34列出薪金高于在部门30工作的所有雇员的姓名和薪金。
SELECT * FROM EMP WHERE SAL >ALL(SELECT SAL FROM EMP WHERE DEPTNO=30);35列出在每个部门工作的雇员的经理以及其他信息。
SELECT A.*,B.* FROM DEPT A,EMP B WHERE = AND JOB='MANAGER';SELECT A.*,B.* FROM (SELECT * FROM EMP WHERE JOB<>'MANAGER') A,(SELECT * FROM EMP WHERE JOB='MANAGER') B WHERE = AND ='MANAGER'ORDER BY ;36列出所有雇员的雇员名称、部门名称和薪金。
SELECT ENAME,DNAME,SAL FROM DEPT A,EMP B WHERE =;37列出从事同一种工作但属于不同部门的雇员的不同组合。
SELECT * FROM emp ORDER BY job,deptno;38列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员。
SELECT * FROM dept WHERE deptno IN (SELECT DISTINCT deptno FROM emp)UNIONSELECT * FROM dept WHERE deptno NOT IN (SELECT DISTINCT deptno FROM emp)39列出各种类型工作的最低工资。
SELECT job,MIN(sal) FROM emp GROUP BY job;40列出各个部门的MANAGER(经理)的最低薪金。