Oracle基础查询关联查询练习题
史上最全Oracle数据库基本操作练习题(含答案)

史上最全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基础练习题及答案(多表查询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查询练习及答案分类:技术文档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数据库查询练习任务

简单查询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自测题-第3章_SQL语言基础与查询语句

第3章SQL语言基础与查询语句选择题1、执行以下语句出错的行是()SELECT deptno,dname,ename,salFROM emp,deptWHERE emp.deptno=dept.deptnoAND sal>1000;A. 第一行B. 第二行C. 第三行D. 第四行2、如果在where子句中有两个条件要同时满足,应该用哪个逻辑符来连接()A.ORB.NOTC.ANDD.NONE3、外连接的条件可以放在以下的那一个子句中()A.FROMB. WEHREC. SELECTD. HAVING4、在从两个表中查询数据时,连接条件要放在哪个子句中()A. FROMB. WHEREC. SELECTD. HAVING5、用以下哪个子句来限制分组统计结果信息的显示()A. FROMB. WEHREC. SELECTD. HAVING6、以下需求中哪个需要用分组函数来实现?()A. 把ORDER表中的定单时间显示成'DD MON YYYY' 格式B. 把字符串'JANUARY 28, 2000' 转换成日期格式C. 显示PRODUCT 表中的COST 列值总量D. 把PRODUCT表中的DESCRIPTION列用小写形式显示7、用以下的SQL语句查询数据库:SELECT id_number "Part Number", SUM(price * quantity) TOTAL, description FROM inventoryWHERE price > 5.00ORDER BY "Part Number", 3;哪一句会产生错误? ()A. FROM INVENTORYB. WHERE PRICE > 5.00C. ORDER BY "PART NUMBER", 3;D. SELECT id_number "Part Number", SUM(price * quantity) TOTAL, description8、以下操作符中哪个可以用做单行简单查询的操作符()A. =B. INC. LIKED. BETWEEN9、以下那些命令可以暗含提交操作?()A. GRANTB. UPDATEC. SELECTD. ROLLBACK10、Mr. King 是公司的总裁,手下有五个经理,每个经理手下都有若干下属。
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 有关emp表的简单查询练习题

SQL练习训练一1、查询dept表的结构在命令窗口输入:desc dept;2、检索dept表中的所有列信息select * from dept3、检索emp表中的员工姓名、月收入及部门编号select ename "员工姓名",sal "月收入",empno "部门编号" from emp注意查询字段用分号隔开。
4、检索emp表中员工姓名、及雇佣时间日期数据的默认显示格式为“DD-MM-YY",如果希望使用其他显示格式(YYYY-MM-DD),那么必须使用TO_CHAR函数进行转换。
select ename "员工姓名", hiredate "雇用时间1",to_char(hiredate,'YYYY-MM-DD') "雇用时间2" from emp注意:第一个时间是日期类型的,在Oracle的查询界面它的旁边带有一个日历。
第二个时间是字符型的。
易错点:不要将YYYY-MM-DD使用双引号5、使用distinct去掉重复行。
检索emp表中的部门编号及工种,并去掉重复行。
select distinct deptno "部门编号",job "工种" from emp order by deptno注意distinct放的位置为什么不放在from的前面?翻译成汉语就明白了应该是:选择不重复的部门编号和工种从emp表。
而不是:选择部门编号和工种不重复地从emp表。
这还是人话么O(∩_∩)O哈哈~6、使用表达式来显示列检索emp表中的员工姓名及全年的月收入select ename "员工姓名", (sal+nvl(comm,0))*12 "全年收入" from emp 注意:防止提成comm为空的操作,使用nvl函数7、使用列别名用姓名显示员工姓名,用年收入显示全年月收入。
Oracle10g数据库基础教程课后练习题含答案

Oracle10g数据库基础教程课后练习题含答案1. 简单查询练习1.1查询指定表的全部内容。
SELECT*FROM table_name;练习1.2按照指定列的顺序查询指定表的全部内容。
SELECT column1, column2, ..., columnN FROM table_name;练习1.3按照指定条件过滤查询指定表的内容。
SELECT*FROM table_name WHERE condition;2. 排序和聚合练习2.1按照指定列升序排序查询指定表的全部内容。
SELECT*FROM table_name ORDER BY column ASC;练习2.2按照指定列降序排序查询指定表的全部内容。
SELECT*FROM table_name ORDER BY column DESC;按照指定列进行聚合并查询结果。
SELECT COUNT(column), SUM(column), AVG(column), MAX(column), MIN(column) F ROM table_name;3. 连接表查询练习3.1查询指定表与另一张表的交集部分。
SELECT*FROM table1 INNER JOIN table2 ON condition;练习3.2查询指定表与另一张表的并集部分。
SELECT*FROM table1 LEFT OUTER JOIN table2 ON condition UNION SELECT*FR OM table1 RIGHT OUTER JOIN table2 ON condition;练习3.3查询指定表与另一张表的差集部分。
SELECT*FROM table1 LEFT OUTER JOIN table2 ON condition WHERE t2.column I S NULL;4. 插入、更新和删除数据练习4.1在指定表中插入一条新数据。
INSERT INTO table_name (column1, column2, ..., columnN) VALUES (value1, va lue2, ..., valueN);更新指定表中符合条件的数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 Oracle基础查询综合示例有职员表emp,表结构如表-1所示:表-1 职员表emp 信息emp 表中的示例数据如图-1所示:图-1有部门表dept,表结构如表-2所示:表-2 部门表dept 信息dept表中的示例数据如图-2所示:图-2需要完成如下查询:1、查询职员表中,在20和30号部门工作的员工姓名和部门号。
select ename,deptno from empwhere deptno in(20,30);2、查询职员表中,没有管理者的员工姓名及职位,并按职位排序。
select ename,job from empwhere mgr is nullorder by job;3、查询职员表中,有绩效的员工姓名、薪资和绩效,并按工资倒序排列。
select ename,sal,comm from emporder by sal desc;4、查询职员表中,员工姓名的第三个字母是A的员工姓名。
select ename from empwhere ename like'__a%';5、查询职员表中的职员名字、职位、薪资,并显示为如图-3所示效果:select ename||','||job||','||sal out_put from emp;图-3提示:列之间用逗号连接,列头显示成OUT_PUT。
6、查询职员表中员工号、姓名、工资,以及工资提高百分之20%后的结果。
select empno,ename,sal,sal*1.2from emp;7、查询员工的姓名和工资,条件限定为:工资必须大于1200,并对查询结果按入职时间进行排列,早入职排在前面,晚入职排在后面。
select ename,sal from empwhere sal>1200order by hiredate asc;8、查询ACCOUNT部门以外的其他部门的编号、名称以及所在地。
select deptno,dname,loc from deptwhere dname not in'accounting';2 Oracle分组查询综合示例对于如前所示的职员表emp,需要完成如下查询:1、查询每个部门中每个职位的最高薪水。
select max(sal),deptno,job from empgroup by deptno,job;2、有SQL语句如下所示:SELECT a.ename, a.sal, a.deptno, b.maxsalFROM emp a,(SELECT deptno, max(sal) maxsalFROM empGROUP BY deptno) bWHERE a.deptno = b.deptnoAND a. sal < b.maxsal;此SQL 语句的功能是什么?写出其查询结果。
查询小于每个部门工资最高的员工的姓名,工资。
3、假设员工表中,员工和管理者中间只有一个层级,也就是说,每个员工最多只有一个上级,作为管理者的员工不再有上级管理者,并且,上级管理者相同的员工,他们属于同一个部门。
找出EMP 中那些工资高于他们所在部门的管理者工资的员工。
select e1.ename from emp e1 join emp e2on e1.mgr = e2.empnowhere e1.sal>any(e2.sal)and e1.mgr = e2.empno;4、找出EMP 中那些工资高于他们所在部门普通员工平均工资的员工。
select e.ename,e.sal,e.deptno,d.avgsal from emp e,(select deptno ,avg(sal) avgsalfrom empgroup by deptno) dwhere e.sal>d.avgsaland e.deptno= d.deptno;3 Oracle分组查询综合示例(提高题,选做)1、下列SQL语句出错的原因是(B)。
SELECT classid, AVG(MONTHS_BETWEEN(SYSDATE,entertime))FROM studentWHERE AVG( MONTHS_BETWEEN (SYSDATE, entertime))>12GROUP BY classidORDER BY AVG(MONTHS_BETWEEN (SYSDATE, entertime));A) select短语中不能出现组函数。
B) where短语中不能限制分组结果。
C) order by子句中不能包含组函数。
D) 组函数中不能包含单行函数。
2、有学员表Student,该表的结构如表-3所示:表- 3 学员表Student 信息编写SQL 语句,查询每班中每个科目的最高成绩。
select classid,subject,max(score)from student group by classid,subject;3、针对表-3所示的Student 表,执行下述SQL语句:1) SELECT , a.score, a.classid, b.avgscore2) FROM student a,3) (SELECT classid, avg(score) avgscore4) FROM student5) GROUP BY classid) b6) WHERE a.classid = b.classid7) AND a.score > b. avgscore;关于运行结果,下列描述正确的是(D)。
A) 第一行出现错误B) 第三行出现错误C) 第六行出现错误D) 语句正常执行4 Oracle关联查询综合示例1、有职员表emp,若需列出所有薪水高于平均薪水值的员工信息,则有SQL语句如下:SELECT ename, job FROM emp WHERE sal > avg(sal);上述语句是否正确?如果有错,写出正确的SQL语句。
select a.ename,a.job from emp a,(select avg(sal)sal from emp) bwhere a.sal>b.sal;2、有学员分数表,如图-5所示:图-5编写一条SQL 语句,查询出每门课都大于80 分的学生姓名。
select name count(*)from studentwhere fenshu >80group by namehaving count(*)=3;select distinct Sname from S where Sname not in (select distinct Sname from S where grade<=80)3、有USERLIST 表如图-6所示:图-6有CHAEGE 表如图-7所示:图-7请用最少的SQL 语句,产生如表-4所示的查询结果:表-4 查询结果其中,数据是经过USERLIST、CHAEGE 表进行合适的连接,并以ACCOUNT 字段为关键字分组求和得到。
特别注意:电话号码421004 在USERLIST 表中有一条记录,在CHARGE 表中并没有记录。
但是,在查询结果中,合同CCCC 具有一条记录。
4、有两个表emp和taxgrade,其字段分别为:emp(员工)表: empname,empno,saltaxgrade(税别)表:taxmin,taxmax,grade上述字段中,除字段empname外,其他字段均为数值类型。
emp 表的数据如表-5所示:表-5 emp表示例数据taxgrade 表的数据如表-6所示:表-6 taxgrade表示例数据编写SQL语句,查询编号为1的员工的税别。
select grade from taxgradewhere taxmax<(select sal from empwhere empno =1;)and taxmin>(select sal from empwhere empno =1;);5、有学员表student,用于记录:学号,姓名,性别,年龄,组织部门;有课程表course,用于记录:课程编号,课程名称;还有选课表sc,用于记录:学号,课程编号,成绩。
三表的结构以及关联如图-8所示:图-8完成如下要求的SQL 语句:1)写一个SQL语句,查询选修了’计算机原理’的学生学号和姓名select Sno,Sname from studentwhere Sno in(select Sno from SCwhere cno =(select cno from Coursewhere cname ='计算机原理'));2)写一个SQL语句,查询’周星驰’同学选修了的课程名字select cname from Coursewhere cno in(select cno from Scwhere Sno =(select Sno from Studentwhere Sname ='周星驰'));6、有表test ,表结构如表-7所示:表-7 test表编写SQL 语句,查询所有年龄比所属主管年龄大的人的ID和NAME。
select a.ID, from test a join test b on a.MANAGER = b.IDwhere a.AGE > b.AGE;7、有表city 记载城市信息,如表-8所示:表-8 city表有表state,记载省份信息,如表-9所示:表-9 state表欲得到如表-10所示的查询结果:表-10 查询结果请编写相应的SQL语句。
select CityNo,CityName,StateNo,StateName from city c full join state swhere c.StateNo = s.StateNo;5 Oracle关联查询综合示例(提高题,选做)有科目表,记载学员的学习科目数据,如表-11所示:表-11 t_subject表(科目表)有学员表,记载学员的信息,如表-12所示:表-12 t_student表(学员表)有考核规则表,记载考核规则,如表-13所示:表-13 t_assess_rule表(考核规则表)有学员成绩表,如表-14所示(注,各科的成绩计算方法根据考核规则中占有的比率计算):表-14 t_performance表(成绩表)1、如何算出一班(class_id=1)每个学生各科的成绩?2、请对一班(class_id=1)每个学生各科成绩的总分进行排序。