oracle两表查询练习附答案
Oracle经典练习题及标准答案
oracle经典练习sql/*1、选择在部门30中员工的所有信息*/select * from scott.emp where deptno = '30'/*2、列出职位为(MANAGER)的员工的编号,姓名*/select empno, ename from scott.emp where job = 'MANAGER'/*3、找出奖金高于工资的员工*/select * from scott.emp where comm > sal/*4、找出每个员工奖金和工资的总和*/select ename, sal + nvl(comm, 0) from scott.emp/*5、找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK) */select *from scott.empwhere deptno = '10'and job = 'MANAGER'unionselect *from scott.empwhere job = 'CLERK'and deptno = '20'/*6、找出部门10中既不是经理也不是普通员工,而且工资大于等于2000的员工*/ select *from scott.empwhere job != 'MANAGER'and job != 'CLERK'and sal > 2000/*7、找出有奖金的员工的不同工作*/select distinct(job) from scott.emp where comm is not null/*8、找出没有奖金或者奖金低于500的员工*/select *from scott.empwhere comm is not nulland comm > 500/*9、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面*/select enamefrom scott.emporder by (months_between(sysdate, hiredate) / 12) descselect ename,hiredate from scott.emp order by hiredate/*10、找出每个月倒数第三天受雇的员工*/select * from scott.emp where hiredate = last_day(hiredate) - 2/*11、分别用case和decode函数列出员工所在的部门,deptno=10显示'部门10',deptno=20显示'部门20'deptno=30显示'部门30'deptno=40显示'部门40'否则为'其他部门'*/select ename,case deptnowhen 10 then'部门10'when 20 then'部门20'when 30 then'部门30'when 40 then'部门40'else'其他部门'end 工资情况from scott.empselect ename,decode(deptno,10,'部门10',20,'部门20',30,'部门30',40,'部门40','其他部门') 工资情况from scott.emp/*12、分组统计各部门下工资>500的员工的平均工资*/select avg(sal) from scott.emp where sal > 500 group by deptno/*13、统计各部门下平均工资大于500的部门*/select deptno from scott.emp group by deptno having avg(sal) > 500 /*14、算出部门30中得到最多奖金的员工奖金*/select max(comm) from scott.emp where deptno = 30/*15、算出部门30中得到最多奖金的员工姓名*/select enamefrom scott.empwhere deptno = 30and comm = (select max(comm) from scott.emp where deptno = 30) /*16、算出每个职位的员工数和最低工资*/select count(ename), min(sal), job from scott.emp group by job/*17、列出员工表中每个部门的员工数,和部门no */select count(ename), deptno from scott.emp group by deptno/*18、得到工资大于自己部门平均工资的员工信息*/select *from scott.emp ewhere sal > (select avg(sal) from scott.emp where e.deptno = deptno)select *from scott.emp e1,(select avg(sal) sals, deptno from scott.emp group by deptno) e2where sal > salsand e1.deptno = e2.deptno/*19、分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金) */select avg(nvl(comm,0)), sum(sal + nvl(comm, 0))from scott.empgroup by deptno,job/*20、笛卡尔集*/select * from scott.emp, scott.dept/*21、显示员工ID,名字,直属主管ID,名字*/select empno,ename,mgr,(select ename from scott.emp e1 where e1.empno = e2.mgr) 直属主管名字from scott.emp e2/*22、DEPT表按照部门跟EMP表左关联*/select *fromscott.dept, scott.empwherescott.dept.deptno = scott.emp.deptno(+)/*23、使用此语句重复的内容不再显示了*/select distinct (job) from scott.emp/*24、重复的内容依然显示*/select *from scott.empUNION ALLselect * from scott.emp/*23和24题和22题是一样的*//*25、只显示了两个表中彼此重复的记录。
Oracle基础练习题及答案(多表查询2)
多表查询1.显示所有员工的姓名ename,部门号deptno和部门名称dname。
select ename,a.deptno,dname from emp a,dept b where a.deptno=b.deptno;2.查询20号部门员工的job和20号部门的locselect ename,job,loc from emp a,dept b where a.deptno=b.deptno and a.deptno=20;3.选择所有有奖金comm的员工的ename , dname , locselect ename,dname,loc from emp a,dept b where a.deptno=b.deptno and comm is not null;4.选择在DALLAS工作的员工的ename , job , deptno, dnameselect ename,job,a.deptno,dname from emp a,dept b where a.deptno=b.deptno and loc='DALLAS';5.选择所有员工的姓名ename,员工号deptno,以及他的管理者mgr的姓名ename和员工号deptno,结果类似于下面的格式employees Emp# manager Mgr#SMITH 7369 FORD 7902select a.ename "employees",a.empno "Emp#",b.ename "manager",b.empno "Mgr#" from emp a,emp b where a.mgr=b.empno;6. 查询各部门员工姓名和他们所在位置,结果类似于下面的格式Deptno Ename Loc20 SMITH DALLASselect a.deptno "Deptno",ename "Ename",loc "Loc" from emp a,dept b where a.deptno=b.deptno;。
oracle练习及答案
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查询练习及答案
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的。
oracle练习题及答案
oracle练习题及答案Oracle练习题及答案Oracle是一种强大的关系数据库管理系统,被广泛应用于企业级应用程序和数据管理中。
为了帮助大家更好地掌握Oracle数据库的知识,以下是一些Oracle练习题及答案,希望能够帮助大家更好地理解和掌握Oracle数据库的知识。
1. 什么是Oracle数据库?Oracle数据库是一种关系数据库管理系统,由美国Oracle公司开发。
它是一种高性能、可靠性高的数据库系统,被广泛应用于企业级应用程序和数据管理中。
2. Oracle数据库的特点有哪些?Oracle数据库具有以下特点:高性能、高可用性、可伸缩性、安全性高、灵活性强、易管理等。
3. 如何创建一个新的数据库用户?在Oracle数据库中,可以使用以下SQL语句来创建一个新的数据库用户:```CREATE USER username IDENTIFIED BY password;```4. 如何查看Oracle数据库中所有的表?可以使用以下SQL语句来查看Oracle数据库中所有的表:```SELECT table_name FROM user_tables;```5. 如何在Oracle数据库中插入一条新的记录?可以使用以下SQL语句来在Oracle数据库中插入一条新的记录:```INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);```6. 如何在Oracle数据库中更新一条记录?可以使用以下SQL语句来在Oracle数据库中更新一条记录:```UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;```7. 如何在Oracle数据库中删除一条记录?可以使用以下SQL语句来在Oracle数据库中删除一条记录:```DELETE FROM table_name WHERE condition;```通过以上Oracle练习题及答案的学习,相信大家对Oracle数据库有了更深入的了解。
Oracle基础练习题及答案(基本查询)
Oracle基础练习题及答案(基本查询)练习题使用SQL PLUS工具登陆,用户名用scott。
1.1 在emp表中查询出所有记录的姓名、部门编号、薪水,并且列名要显示为中文。
select empno"员工编号",ename"员工姓名",job"职位",mgr"上级领导",hiredate"入职日期",sal"薪资",comm"奖金",deptno"部门编号" from emp;1.2 在emp表中查询出薪水大于1500的记录,并且按照薪水的降序排列。
select * from emp where sal>1500order by sal desc;1.3 在emp表中查询出comm字段为空值的记录。
select * from emp where comm is null;1.4 查询出emp表中含有几个部门的记录。
(用DISTINCT去除重复记录)select distinct deptno from emp;1.5 在emp表中查询出部门编号为10或20的记录(要求使用IN 关键字)select * from emp where deptno in(10,20);1.6 在emp表中查询出姓名的第二个字母为A的记录。
select ename from emp where ename like'_A%';1.7 查询出emp表中总共有多少条记录。
select count(*) from emp;1.8 查询emp表中出每个部门的部门代码、薪水之和、平均薪水。
select deptno,sum(sal),avg(sal) from emp group by deptno;使用scott用户登录,利用原有的四张表完成如下作业1.选择部门30的所有员工select * from emp where deptno=30;2.列出所有办事员(CLERK)的姓名,编号和部门编号select ename,empno,deptno from emp where job='CLERK';3.找出佣金高于薪金的所有员工select * from emp where comm>sal;4.找出佣金高于薪金30%的所有员工select * from emp where comm>(sal*0.3);5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料select* from emp where(deptno=10and job='MANAGER')or(deptno=20and job='CLERK');6.找出部门10中所有经理(MANAGER),部门20 中所有办事员(CLERK),既不是经理又不是办事员(CLERK)但其薪金大于或等于2000的所有员工的详细资料。
Oracle基础练习题及答案(多表查询1)(共5篇)
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课后习题答案
练习62.实训题(2)Create table exer_class(CNO number(2) primary key,CNAME varchar2(20),NUM number(3));Create table exer_student(SNO number(4) primary key,SNAME varchar2(10) unique,SAGE number,SEX char(2),CNO number(2));(3)Alter table exer_student add constraint ck_sage check (sage>0 and sage<=100);(4)Alter table exer_student add constraint ck_stu check(sex='M' or sex='F') modify sex default 'M';(5)Create unique index ind_cname on exer_class(cname);(6)Create view stu_class_view (e_sno,e_sname,e_cno,e_cname) ASselect sno,sname,cno,cnameFrom exer_student;(7)Create sequence exer_student_seqstart with 100000001nocyclenocache;(8)Create table exer_student_range(sno number(4) primary key,sname varchar2(10),sage number,sex char(2),cno number(2))partition by range(sage)(partition part1 values less than(20) tablespace example,partition part2 values less than(30) tablespace orcltbs1,partition part3 values less than(maxvalue) tablespace orcltbs2);(9)Create table exer_student_list(sno number(4) primary key,sname varchar2(10),sage number,sex char(2),cno number(2))partition by list(sex)(partition man values('M') tablespace orcltbs1,partition woman values('F') tablespace orcltbs2);(10)题目修改为“为exer_student_range表的SAGE列上创建本地分区索引。
Oracle基础查询关联查询练习题
1 Oracle根底查询综合示例有职员表emp,表结构如表-1所示:表-1 职员表emp 信息emp 表中的示例数据如图-1所示:图-1有部门表dept,表结构如表-2所示:表-2 部门表dept 信息dept表中的示例数据如图-2所示:图-2需要完成如下查询:1、查询职员表中,在20和30号部门工作的员工某某和部门号。
select ename,deptno from emp where deptno in(20,30);2、查询职员表中,没有管理者的员工某某与职位,并按职位排序。
select ename,job from emp where mgr isnullorderby job;3、查询职员表中,有绩效的员工某某、薪资和绩效,并按工资倒序排列。
select ename,sal,m from emp orderby sal desc;4、查询职员表中,员工某某的第三个字母是A的员工某某。
select ename from emp where ename like'__a%';5、查询职员表中的职员名字、职位、薪资,并显示为如图-3所示效果:select ename||','||job||','||sal out_put from emp;图-3提示:列之间用逗号连接,列头显示成OUT_PUT。
6、查询职员表中员工号、某某、工资,以与工资提高百分之20%后的结果。
select empno,ename,sal,sal*from emp;7、查询员工的某某和工资,条件限定为:工资必须大于1200,并对查询结果按入职时间进展排列,早入职排在前面,晚入职排在后面。
select ename,sal from emp where sal>1200orderby hiredate asc;8、查询ACCOUNT部门以外的其他部门的编号、名称以与所在地。
最新oracle练习-答案资料
实验一练习1、请查询表DEPT中所有部门的情况。
select * from dept;练习2、查询表DEPT中的部门号、部门名称两个字段的所有信息。
select deptno,dname from dept;练习3、请从表EMP中查询10号部门工作的雇员姓名和工资。
select ename,sal from emp where deptno=10;练习4、请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名、工资。
select ename,sal from emp where job='CLERK' or job='MANAGER';练习5、请在EMP表中查找部门号在10-30之间的雇员的姓名、部门号、工资、工作。
select ename,deptno,sal,job from emp where deptno between 10 and 30;练习6、请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。
select ename,sal,job from emp where ename like 'J%';练习7、请从表EMP中查找工资低于2000的雇员的姓名、工作、工资,并按工资降序排列。
select ename,job,sal from emp where sal<=2000 order by sal desc;练习8、请从表中查询工作是CLERK的所有人的姓名、工资、部门号、部门名称以及部门地址的信息。
select ename,sal,emp.deptno,dname,loc from emp,dept where emp.deptno=dept.deptno and job=’CLERK’;练习9、查询表EMP中所有的工资大于等于2000的雇员姓名和他的经理的名字。
select a.ename,b.ename from emp a,emp b where a.mgr=b.empno(+) and a.sal>=2000;练习10、在表EMP中查询所有工资高于JONES的所有雇员姓名、工作和工资。
Oracle查询题集-答案
一、现有学生表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、查询没有人员的班级。
Oracle简单Scott用户表练习带答案
Oracle简单Scott用户表练习带答案一、使用scott/tiger用户下的emp表和dept表完成下列练习,表的结构说明如下:emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号) dept部门表(deptno部门编号/dname部门名称/loc地点)工资=薪金+佣金1. 列出在每个部门工作的员工数量、平均工资和平均服务期限。
Select deptno,count(*),avg(sal+nvl(comm,0)),avg(sysdate-hiredate) from emp group by deptno;2. 列出所有员工的姓名、部门名称和工资。
Select ename,bname,sal+nvl(comm,0) from dept,emp where dept.deptno=emp.deptno;3. 列出从事同一种工作但属于不同部门的员工的一种组合。
Select distinct a.ename ,a.job,a.deptno from emp a,emp b where (a.deptno>b.deptno) or (a.deptno<="" and="" by="" order="" p="">4. 列出所有部门的详细信息和部门人数。
[*]selecta.deptno,a.dname,a.loc,count(b.empno )from dept a,emp b where a.deptno = b.deptno group bya.deptno,a.dname,a.loc;5. 列出各种工作的最低工资。
select deptno,min(sal+nvl(comm,0) from emp group by deptno;6. 列出各个部门的MANAGER(经理)的最低薪金。
oracle联合查询作业
oracle 有关emp表的简单查询练习题使用scott/tiger用户下的emp表和dept表完成下列练习,表的结构说明如下emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)dept部门表(deptno部门编号/dname部门名称/loc地点)工资=薪金+佣金--1、1.显示所有员工的姓名,部门号和部门名称(dname)。
联合查询emp, dept.两个表中都有deptno字段SQL> select ename,e.deptno ,dname from emp e,dept d wheree.deptno=d.deptno order by dname;--2、不重复地查询10号部门员工的job和部门的locselect distinct e.job,d.loc from emp e,dept d wheree.deptno=d.deptno and e.deptno=10;--3、选择所有有奖金的(奖金非空并且大于0)员工的ename , dname , loc , cityselect ename,e.dname ,loc,tity from emp e,dept d wheree.deptno=d.deptno order by dname;(请参考dept表的结构,并根据需要创建表LOCATION,其中包含字段loc varchar2(30),city varchar2(20))create table LOCATION(loc varchar2(30),city varchar2(20))SQL> Insert into location values('NEW YORK','A');SQL> Insert into location values(' DALLAS','B');Insert into location values('CHICAGO’,’C’);Insert into location values('DALLAS,'D');CHICAGO--4、选择在NEW YORK(一个city)工作的员工的ename , job , deptno , dname--5、查询各部门员工姓名和他们的同事(在同一个部门工作的其他人)姓名--6、查询和SMITH相同部门的其他员工姓名和雇用日期--7、查询管理者是KING的员工姓名和工资--8、列出薪金比"SMITH"多的所有雇员--9、列出入职日期早于其直接上级的所有雇员--10、列出所有“CLERK”(办事员)的姓名及其部门名称--11、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号--12、列出与“SCOTT”从事相同工作的所有雇员--13、列出从事同一种工作但属于不同部门的雇员的不同组合。
oracle 练习有答案
insert into SC values('02' , '03' , 80)
insert into SC values('03' , '01' , 80)
insert into SC values('03' , '02' , 80)
--3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
select Student.S#,Student.Sname,avg(Score)
from Student,SC
where Student.S#=SC.S#
group by Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S#
group by Student.S#,Student.Sname
having avg(score)<60;
--5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
select Student.S#,Student.Sname,count(SC.C#),sum(score)
insert into Teacher values('01' , N'张三')
insert into Teacher values('02' , N'李四')
insert into Teacher values('03' , N'王五')
oracle练习题及答案
oracle练习题及答案Oracle练习题及答案Oracle数据库是全球最受欢迎的关系型数据库管理系统之一,广泛应用于企业级应用程序开发和数据管理。
为了提高对Oracle数据库的理解和应用能力,下面将提供一些常见的Oracle练习题及其答案。
1. 查询表中的所有数据答案:使用SELECT语句可以查询表中的所有数据,例如:SELECT * FROM 表名;2. 查询表中的特定列数据答案:使用SELECT语句并指定需要查询的列名,例如:SELECT 列名1, 列名2 FROM 表名;3. 查询表中满足特定条件的数据答案:使用SELECT语句并使用WHERE子句来指定条件,例如:SELECT * FROM 表名 WHERE 列名 = 值;4. 对查询结果进行排序答案:使用SELECT语句并使用ORDER BY子句来指定排序的列和排序方式,例如:SELECT * FROM 表名 ORDER BY 列名 ASC/DESC;5. 对查询结果进行分组答案:使用SELECT语句并使用GROUP BY子句来指定分组的列,例如:SELECT 列名1, 列名2 FROM 表名 GROUP BY 列名1;6. 查询表中的唯一数据答案:使用SELECT DISTINCT语句可以查询表中的唯一数据,例如:SELECT DISTINCT 列名 FROM 表名;7. 查询表中的前N条数据答案:使用SELECT语句并使用ROWNUM关键字来限制查询结果的行数,例如:SELECT * FROM 表名 WHERE ROWNUM <= N;8. 使用聚合函数进行数据统计答案:使用聚合函数如SUM、AVG、COUNT等可以对数据进行统计,例如:SELECT COUNT(*) FROM 表名;9. 进行多表查询答案:使用SELECT语句并使用JOIN关键字来连接多个表,例如:SELECT * FROM 表名1 JOIN 表名2 ON 表名1.列名 = 表名2.列名;10. 更新表中的数据答案:使用UPDATE语句可以更新表中的数据,例如:UPDATE 表名 SET 列名 = 值 WHERE 条件;11. 删除表中的数据答案:使用DELETE语句可以删除表中的数据,例如:DELETE FROM 表名 WHERE 条件;12. 创建新表答案:使用CREATE TABLE语句可以创建新表,例如:CREATE TABLE 表名 (列名1 数据类型, 列名2 数据类型, ...);13. 修改表结构答案:使用ALTER TABLE语句可以修改表的结构,例如:ALTER TABLE 表名 ADD 列名数据类型;14. 删除表答案:使用DROP TABLE语句可以删除表,例如:DROP TABLE 表名;以上是一些常见的Oracle练习题及其答案,希望能够帮助读者更好地理解和应用Oracle数据库。
oracle练习题及答案
oracle练习题及答案Oracle练习题及答案Oracle是一种广泛使用的关系型数据库管理系统,它具有强大的数据处理和管理能力。
对于想要提升自己的数据库技能的人来说,练习题是一个非常有效的学习方法。
通过解答一系列的练习题,可以帮助我们更好地理解Oracle的使用和原理。
下面是一些常见的Oracle练习题及其答案,供大家参考。
1. 查询一个表中所有的数据答案:可以使用SELECT语句来查询一个表中的所有数据。
例如,假设我们有一个名为"employees"的表,可以使用以下语句来查询所有的数据:SELECT * FROM employees;2. 查询一个表中特定列的数据答案:如果我们只想查询一个表中特定列的数据,可以使用SELECT语句,并在其中指定要查询的列名。
例如,如果我们只想查询"employees"表中的"first_name"和"last_name"列,可以使用以下语句:SELECT first_name, last_name FROM employees;3. 查询满足特定条件的数据答案:如果我们只想查询满足特定条件的数据,可以在SELECT语句中使用WHERE子句来指定条件。
例如,如果我们只想查询"employees"表中工资大于5000的员工,可以使用以下语句:SELECT * FROM employees WHERE salary > 5000;4. 对查询结果进行排序答案:如果我们想对查询结果进行排序,可以在SELECT语句中使用ORDER BY子句,并指定要排序的列名。
例如,如果我们想按照"employees"表中的"last_name"列进行升序排序,可以使用以下语句:SELECT * FROM employees ORDER BY last_name ASC;5. 对查询结果进行分组答案:如果我们想对查询结果进行分组,可以在SELECT语句中使用GROUP BY 子句,并指定要分组的列名。
oracle两表查询练习附答案
Sutdent表的定义字段名字段描述数据类型主键外键非空唯一自增Id学号INT(10)是否是是是Name姓名VARCHAR(20)否否是否否Sex性别VARCHAR(4)否否否否否Birth出生年份YEAR否否否否否Department院系VARCHAR(20)否否是否否Address家庭住址VARCHAR(50)否否否否否Score表的定义字段名字段描述数据类型主键外键非空唯一自增Id编号INT(10)是否是是是Stu_id学号INT(10)否否是否否C_name课程名VARCHAR(20)否否否否否Grade分数INT(10)否否否否否1.创建student和score表create table student(id number(10)not null primary key,name varchar2(20)not null,sex varchar2(4),birth number,department varchar2(20)not null,address varchar2(50));create table score(id number(10)not null primary key,stu_id number(10)not null,c_name varchar2(20),grade number(10));2.为student表和score表增加记录向student表插入记录的INSERT语句如下:Insert into student values(100101,'张三','男',23,'计算机系','北京市朝阳区');Insert into student values(100102,'李四','男',21,'英语系','北京市海淀区');Insert into student values(100103,'王五','女',19,'建工系','北京市昌平区');Insert into student values(100104,'孙六','女',21,'化学系','北京市苏州桥');Insert into student values(100105,'齐七','男',23,'英语系','北京市海淀区');向score表插入记录的INSERT语句如下:Insert into score values(001,100101,'计算机基础',89);Insert into score values(002,100101,'英语',93);Insert into score values(003,100101,'数学',87);Insert into score values(004,100102,'计算机基础',83);Insert into score values(005,100102,'英语',81);Insert into score values(006,100102,'数学',77);Insert into score values(007,100103,'计算机基础',91);Insert into score values(008,100103,'英语',85);Insert into score values(009,100103,'数学',88);Insert into score values(010,100104,'计算机基础',84);Insert into score values(011,100104,'英语',71);Insert into score values(012,100104,'数学',83);3.查询student表的所有记录select*from student;4.查询student表的第2条到4条记录1.select *,rownum as con from student where rownum<=4 and rownum>=2;(select*from student where rownum<=4)minus(select*from student where rownum<=1);1、Minus:两个查询,MINUS是从第一个查询结果减去第二个查询结果,如果有相交部分就减去相交部分;否则和第一个查询结果没有区别. INTERSECT是两个查询结果的交集,UNION ALL是两个查询的并集;2、Rownum:对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum 不能以任何表的名称作为前缀。
Oracle数据库查询练习及答案
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 (SELECTmaxh FROM (SELECTMAX(HIREDATE) maxh,EXTRACT(MONTH FROM hiredate)FROM EMP GROUP BY EXTRACT(MONTH FROM hiredate)));7 找出晚于26 年之前受雇的雇员。
oracle多表查询练习题-答案
any
all
select job,count(empno)
from emp
where job in (select job from emp group by job having min(sal)>1500) group by job ;
8、列出在部门“sales”(销售部)工作的员工的姓名,假定不知道销售部的部门编号
5、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
左右连接
selecept d
where e.deptno(+)=d.deptno;
6、列出所有“CLERK”的姓名及其部门名称,部门的人数
select ename,deptno from emp where job='CLERK';
from emp group by deptno)ed
where d.deptno=ed.deptno(+);
16、列出各种工作的最低工资以及从事此工作的雇员姓名
分析:按工作分组,求出最低工资 min()
select job,min(sal) m from emp group by job;
from emp
group by deptno;
平均服务期限
hiredate
sysdate
select deptno,count(empno),round(avg(sal)) 平均工资,round(avg(months_between(sysdate,hiredate)/12)) 平均服务期限
where e.deptno=d.deptno
group by d.dname;
史上最全Oracle数据库基本操作练习试题[含答案解析]
史上最全Oracle数据库基本操作练习试题[含答案解析] Oracle基本操作练习题使⽤表:员⼯表(emp):(empno NUMBER(4)notnull,--员⼯编号,表⽰唯⼀ename VARCHAR2(10),--员⼯姓名job VARCHAR2(9),--员⼯⼯作职位mgr NUMBER(4),--员⼯上级领导编号hiredate DATE,--员⼯⼊职⽇期sal NUMBER(7,2),--员⼯薪⽔comm NUMBER(7,2),--员⼯奖⾦deptno NUMBER(2)—员⼯部门编号)部门表(dept):(deptno NUMBER(2)notnull,--部门编号dname VARCHAR2(14),--部门名称loc VARCHAR2(13)—部门地址)说明:增删改较简单,这些练习都是针对数据查询,查询主要⽤到函数、运算符、模糊查询、排序、分组、多变关联、⼦查询、分页查询等。
建表脚本.txt建表脚本(根据需要使⽤):练习题:1.找出奖⾦⾼于薪⽔60%的员⼯信息。
SELECT * FROM emp WHERE comm>sal*0.6;2.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。
SELECT * FROM emp WHERE (JOB='MANAGER' AND DEPTNO=10) OR (JOB='CLERK' AND DEPTNO=20);3.统计各部门的薪⽔总和。
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;4.找出部门10中所有理(MANAGER),部门20中所有办事员(CLERK)以及既不是经理⼜不是办事员但其薪⽔⼤于或等2000的所有员⼯的详细资料。
SELECT * FROM emp WHERE (JOB='MANAGER' AND DEPTNO=10) OR (JOB='CLERK' AND DEPTNO=20) OR (JOB NOT IN('MANAGER','CLERK') AND SAL>2000);5.列出各种⼯作的最低⼯资。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sutdent表的定义字段名字段描述数据类型主键外键非空唯一自增Id学号INT(10)是否是是是Name姓名VARCHAR(20)否否是否否Sex性别VARCHAR(4)否否否否否Birth出生年份YEAR否否否否否Department院系VARCHAR(20)否否是否否Address家庭住址VARCHAR(50)否否否否否Score表的定义字段名字段描述数据类型主键外键非空唯一自增Id编号INT(10)是否是是是Stu_id学号INT(10)否否是否否C_name课程名VARCHAR(20)否否否否否Grade分数INT(10)否否否否否1.创建student和score表create table student(id number(10)not null primary key,name varchar2(20)not null,sex varchar2(4),birth number,department varchar2(20)not null,address varchar2(50));create table score(id number(10)not null primary key,stu_id number(10)not null,c_name varchar2(20),grade number(10));2.为student表和score表增加记录向student表插入记录的INSERT语句如下:Insert into student values(100101,'张三','男',23,'计算机系','北京市朝阳区');Insert into student values(100102,'李四','男',21,'英语系','北京市海淀区');Insert into student values(100103,'王五','女',19,'建工系','北京市昌平区');Insert into student values(100104,'孙六','女',21,'化学系','北京市苏州桥');Insert into student values(100105,'齐七','男',23,'英语系','北京市海淀区');向score表插入记录的INSERT语句如下:Insert into score values(001,100101,'计算机基础',89);Insert into score values(002,100101,'英语',93);Insert into score values(003,100101,'数学',87);Insert into score values(004,100102,'计算机基础',83);Insert into score values(005,100102,'英语',81);Insert into score values(006,100102,'数学',77);Insert into score values(007,100103,'计算机基础',91);Insert into score values(008,100103,'英语',85);Insert into score values(009,100103,'数学',88);Insert into score values(010,100104,'计算机基础',84);Insert into score values(011,100104,'英语',71);Insert into score values(012,100104,'数学',83);3.查询student表的所有记录select*from student;4.查询student表的第2条到4条记录1.select *,rownum as con from student where rownum<=4 and rownum>=2;(select*from student where rownum<=4)minus(select*from student where rownum<=1);1、Minus:两个查询,MINUS是从第一个查询结果减去第二个查询结果,如果有相交部分就减去相交部分;否则和第一个查询结果没有区别. INTERSECT是两个查询结果的交集,UNION ALL是两个查询的并集;2、Rownum:对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum 不能以任何表的名称作为前缀。
5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息select id,name,department from student;6.从student表中查询计算机系和英语系的学生的信息select*from student where address='计算机系'or address='英语系';7.从student表中查询年龄18~22岁的学生信息select*from student where birth between18and22;8.从student表中查询每个院系有多少人select department,count(*)学院人数from student group by department;9.从score表中查询每个科目的最高分select c_name,max(grade)最高分from score group by c_name;10.查询李四的考试科目(c_name)和考试成绩(grade)select c_name, grade from score where stu_id in(select id from student where name='李四');11.用连接的方式查询所有学生的信息和考试信息select st.*, sc.*from student st full join score sc on st.id = stu_id;12.计算每个学生的总成绩select name,sum(grade) 总成绩from student st, score sc where st.id = sc.stu_id group by name;13.计算每个考试科目的平均成绩select c_name,avg(nvl(grade,0))平均成绩from score group by c_name;14.查询计算机成绩低于95的学生信息select*from student where id in(select stu_id from score where grade<95and c_name ='计算机基础');15.查询同时参加计算机和英语考试的学生的信息Select*from student st,(select stu_id from score where c_name ='计算机')s1,(select stu_id from score where c_name ='英语')s2 where st.id = s1.stu_id and st.id = s2.stu_id;16.将计算机考试成绩按从高到低进行排序(1)、select grade 计算机成绩from score where c_name='计算机基础' order by grade desc; (2)、select st.id 学号, 姓名,grade 计算机成绩from student st,score sc where c_name='计算机基础'and st.id=sc.stu_id order by grade desc;17.从student表和score表中查询出学生的学号,然后合并查询结果select id from student union select stu_id from score;18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩select ,st.department,sc.c_name,sc.grade from student st,score sc where like '张%'or like'王%'and st.id= sc.stu_id;没有出来结果,但是不知道哪里不对啊Like模糊查询,正学写法如下:select ,st.department,sc.c_name,sc.grade from student st,score sc where( like '张%'or like'王%')and st.id= sc.stu_id;19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩select , st.birth, st.department, sc.c_name, sc.grade from student st, score sc where address like'湖南%'and st.id = sc.stu_id;。