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);更新指定表中符合条件的数据。
Oracle基础(习题卷12)
Oracle基础(习题卷12)说明:答案和解析在试卷最后第1部分:单项选择题,共63题,每题只有一个正确答案,多选或少选均不得分。
1.[单选题]SELECT语句中FOR UPDATE子句的作用是:( )A)确定要更新哪个表B)对查询出来的结果集中的记录进行加锁,阻止其它事务或会话的修改C)通过查询对数据进行更新D)在查询的表整体进行加锁2.[单选题]在Oracle数据库的逻辑结构中有以下组件:A 表空间 B 数据块 C 区 D 段这些组件从大到小依次是A)D→A→C→BB)A→C→B→DC)A→D→C→BD)A→B→C→D3.[单选题]Oracle内置程序包由( )用户所有A)sysB)systemC)scottD)Pub lic4.[单选题]Which two statements about packages are true?A)Packages can be nested.B)You can pass parameters to packages.C)A package is loaded into memory each time it is invoked.D)The contents of packages can be shared by many applications5.[单选题]DBA可以使用下列哪一个命令查看当前归档状态( )。
A)ARCHIVE LOG LISTB)FROMARCHIVE LOGSC)SELECT * FROM V$THREADD)SELECT * FROM ARCHIVE_LOG_LIST6.[单选题]下列哪个CREATE TABLE 语法是有效的?( )A)CREATE TABLE emp9$# (emp_no NUMBER (4));B)CREATE TABLE 9emp$# (emp_no NUMBER(4));C)CREATE TABLE emp*123 (emp_no NUMBER(4));D)CREATE TABLE emp9$# (emp_no NUMBER(4), date DATE);7.[单选题]在DOS命令行输入以下哪一行命令,不能正确连接SQL *Plus( ) 。
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)
Oracle基础(习题卷1)第1部分:单项选择题,共63题,每题只有一个正确答案,多选或少选均不得分。
1.[单选题]以下()用户默认拥有SYSDBA权限A)A-SYSTEMB)B-SYSC)C-SAD)D-DBADMIN答案:B解析:2.[单选题]你使用 IMMEDIATE 选项关闭数据库实例。
考虑打开数据库需要执行的步骤:1. 分配 SGA2. 读取控制文件3. 读取日志文件4. 开始实例恢复5. 启动后台进程6. 检查数据文件一致性7. 读取 spfile 或者 pfile哪个选项是正确的关于这些步骤()A)7, 1, 5, 2, 3, 6, 4B)1, 5, 7, 2, 3, 6; step 4 is not requiredC)7, 1, 5, 2, 3, 6 step 4 is not requiredD)1, 2, 3, 5, 6, 4; step 7 is not required答案:C解析:3.[单选题]执行下面的命令备份 USERS 表空间SQL> ALTER TABLESPACE users BEGIN BACKUP;ALTER TABLESPACE users BEGIN BACKUP*ERROR at line 1:ORA-01123: cannot start online backup;media recovery not enabled什么原因导致整个错误()A)MTTR Advisor 禁用B)数据库处于 NOARCHIVELOG 模式C)表空间已经处于备份模式D)Flash Recovery Area 没有配置答案:B解析:4.[单选题]当执行介质数据库恢复时,有个归档日志文件丢失或者损坏,那么此时只能执行哪种操作?什么A)Until SCNB)Until timeC)Recover using backup control file.D)Until cancel答案:D解析:5.[单选题]oracle逻辑存储结构正确的是( )A)tablespace--segment--osblock--blockB)tablespace--segment--extent--blockC)tablespace--extent--segment--blockD)tablespace--extent--block -segment答案:B解析:6.[单选题]如何将变量v_row 定义为emp表的记录类型( )A)v_row emp%type;B)v_row emp%record;C)v_row emp%tabletype;D)v_row emp%rowtype;答案:D解析:7.[单选题]The schema SALES exists in two databases, ORCL1 and ORCL2, and has the same password,SALES123. User SALES has CREATE DATABASE LINK and CREATE SESSION privileges on bothDatabases.Eaxmine these command:Conn SALES/SALES123CREATE DATABASE LINK orcl2 USING ‘orcl12’;What is the outcome of executing these commands in the ORCL1 database?A)ORCL2 is created as a shared database link to connect multiple sessions to the SALES schema in the ORCL2 databaseB)ORCL2 database link creation failsC)ORCL2 is created as a private database link to connect to only the SALES schema in the ORCL2 databaseD)ORCL2 is created as a public link to connect a single session to the SALES schema in the ORCL2 database答案:C解析:8.[单选题]分析以下的SQL 命令:SELECT manufacturer_idFROM inventoryWHERE manufacturer_id LIKE '%N\%P\%O%' ESCAPE '\';命令执行的返回结果是( )。
oracle 查询练习题
oracle 查询练习题1. 查询employee表中所有员工的姓名和工资。
SELECT name, salary FROM employee;2. 查询department表中所有部门的名称和员工数量。
SELECT department_name, COUNT(*) AS employee_countFROM departmentGROUP BY department_name;3. 查询employee表中工资大于5000的员工的姓名和工资,并按工资降序排序。
SELECT name, salary FROM employeeWHERE salary > 5000ORDER BY salary DESC;4. 查询employee表中工资在5000到10000之间的员工的姓名和工资,并按工资升序排序。
SELECT name, salary FROM employeeWHERE salary BETWEEN 5000 AND 10000ORDER BY salary ASC;5. 查询employee表中所有员工的姓名和入职日期,入职日期格式为YYYY-MM-DD。
SELECT name, TO_CHAR(hire_date, 'YYYY-MM-DD') AS hire_date FROM employee;6. 查询employee表中员工姓名以'A'开头的员工的姓名和工资。
SELECT name, salary FROM employeeWHERE name LIKE 'A%';7. 查询employee表中工资排名前三的员工的姓名和工资。
SELECT name, salary FROM (SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS salary_rank FROM employee) WHERE salary_rank <= 3;8. 查询每个部门中工资最高的员工的姓名、部门名称和工资。
Oraclep324查询练习及答案
Oraclep324查询练习及答案(1) 查询20号部门的所有员工信息;(2) 查询所有工种为CLERK 的员工的员工号、员工名和部门号;(3) 查询奖金COMM 高于工资SAL 的员工信息;(4) 查询奖金高于工资的20%的员工信息;(5) 查询10号部门中工种为MANAGER 和20号部门中工种为CLERK 的员工的信息;(6) 查询所有公众不是MANAGER 和CLERK ,且工资大于或等于2000的员工的详细信息;(7) 查询有奖金的员工的不同工种;(8) 查询所有员工工作与奖金的和;(9) 查询没有奖金或奖金低于100的员工信息;(10)查询各月倒数第二天入职的员工信息;(11)查询工龄大于或等于10年的员工信息;(12)查询员工信息,要求以首字母大写的方式显示所有员工的姓名;(13)查询员工名正好为6个字母的员工信息;(14)查询员工名字中不包含字母S 的员工;(15)查询员工姓名的第二个字母为M 的员工信息;(16)查询所有员工姓名的前三个字符;(17)查询所有员工的姓名,如果包含字母s ,则用S 替换;(18)查询员工的姓名和入职日期,并按入职日期从先到后进行排序;(19)显示所有员工的姓名、工种、工资和京津,按工种降序排序,若工种相同则按工资升序排序;(20)显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,若月份相同则按入职的年份排序;(21)查询在2月份入职的所有员工信息;(22)查询所有员工入职以来的工作期限,用“**年**月**日”的形式表示;(23)查询至少有一个员工的部门信息;(24)查询工资比SMITH 员工工资高的所有员工信息;(25)查询所有员工的姓名及其直接上级的姓名;(26)查询入职日期早于其上级领导的所有员工信息;(27)查询所有部门及其员工信息,包括那些没有员工的部门;(28)查询所有员工及其部门信息,包括那些还不属于任何部门的员工;(29)查询所有工种为CLERK 的员工的姓名及其部门名称;(30)查询最低工资大于2500的各种工作;(31)查询平均工资低于2000的部门及其员工信息;(32)查询在SALES 部门工作的员工的姓名信息;(33)查询工资高于公司平均工资的所有员工信息;(34)查询与SMITH 员工从事相同工作的所有员工信息;(35)列出工资等于30号部门中某个员工工资的所有员工的姓名和工资;(36)查询工资高于30号部门中工作的所有员工的工资的员工姓名和工资;(37)查询每个部门中的员工数量、平均工资和平均工作年限;(38)查询不同部门的同一种工作;(39)查询各个部门的详细信息以及部门人数、部门平均工资;(40)查询各种工作的最低工资;(41)查询各个部门中不同工种的最高工资;(42)查询10号部门员工及其领导的信息;(43)查询各个部门的人数及平均工资;(44)查询工资为某个部门平均工资的员工信息;(45)查询工资高于本部门平均工资的员工信息;(46)查询工资高于本部门平均工资的员工信息及其部门的平均工资;(47)查询工资高于20号部门某个员工工资的员工的信息;(48)统计各个工种的员工人数与平均工资;(49)统计每个部门中各工种的人数与平均工资;(50)查询工资、奖金与10号部门某员工工资、奖金都相同的员工信息;(51)查询部门人数大于5的部门的员工信息;(52)查询所有员工工资都大于2000的部门的信息;(53)查询所有员工工资都大于2000的部门的信息及其员工的信息;(54)查询所有员工工资都在2000~3000之间的部门的信息;(55)查询所有工资在2000~3000之间的员工所在的部门的员工信息;(56)查询每个员工的领导所在部门的信息;(57)查询人数最多的部门信息;(58)查询30号部门中工资排序前3名的员工信息;(59)查询所有员工中工资排序在5~10名之间的员工信息;(60)查询SMITH 员工及其所有直接、间接下属员工的信息;(61)查询SCOTT 员工及其直接、间接上级员工的信息;(62)以树状结构查询所有员工与领导之间的层次关系;(63)向emp 表中插入一条记录,员工号为1357,名字为oracle ,工资为2050,部门号为20,入职日期为2002年5月10日;(64)向emp 表中插入一条记录,员工名为FAN,号为8000,其他信息与SMITH员工的信息相同;(65)将各个部门员工的工资修改为该员工所在部门平均工资加1000;1、select * from emp where deptno=20;2、select empno,ename,deptno from emp where job=‘CLERK’3、select * from emp where comm>sal;4、select * from emp where comm.>sal*0.25、select * from emp where job=’MANAGER’and deptno=10 or job=’CLERK’and deptno=206、select * from emp where sal>=2000minusselect * from emp where job=’MANAGER’ or job=’CLERK’select * from mep where job!=’MANAGER’ and job!=’CLERK’ and sal>=20007、select distinct job from emp where comm is not null8、select ename,empno sal+nvl(comm.,0) from emp;9、select * from emp where comm is null or comm<100;10、select * from emp where hiredate in (select last_day(hiredate)-1 from emp);11、select empno,ename,hiredate from emp where (sysdate-hiredate)/365>=10;12、select initcap(ename),empno,sal from emp;13、select * from emp where length(ename)=6;14、select * from emp where ename not like ‘%S%’;15、select * from emp where ename like ‘_M%’;16、select substr(ename,1,3) from mep;17、select replace(ename,’s’,’S’) from emp;18、select ename,hiredate from emp order by hiredate19、select ename,job,sal,comm. From emp order by job desc,sal20、select ename,extract(month from hiredate) month,extract(year from hiredate) year from emp order by month,year;select ename,to_char(hiredate,'yyyy') year,to_char(hiredate,'mm') month from emp order by month,year21.select * from emp where extract(month from hiredate)=’2’;22. select floor((sysdate-hiredate)/365)||'年'||floor(mod(sysdate-hiredate,365)/30)||'月'||floor(mod(mod(sysdate-hiredate,365),30))||'日' worktimefrom emp23.select dname,deptno,loc from dept where deptno in (select deptno from emp group by deptno having count(*)>1);24.select * from emp where sal>(select sal form emp where ename=’SMITH’);25. select a.ename,b.ename from emp a,emp bwhere a.mgr=b.empno26. select a.ename,a.hiredate from emp awhere hiredate<(select hiredate from emp b whereb.empno=a.mgr)27.select dept.deptno,dname,ename,empno,sal from dept left join emp on dept.deptno=emp.deptno;28.select empno,ename,sal,emp.deptno,dname from dept right join emp on dept.deptno=emp.deptno;29.select ename,dname fro m emp,dept where job=’CLERK’ and emp.deptno=dept.deptno;30.select job from emp group by job having min(sal)>2500;31.select deptno,empno,ename,sal from emp where deptno in (select deptno from emp group by deptno having avg(sal)<2000);32.select ename from emp,dept where dname=’SALES’ and dept.deptno=emp.deptno;33.select * from emp where sal>(select avg(sal) from emp);34.select * from emp where job=(select job from emp where ename=’SMITH’);35.select ename,sal from emp where sal in (select sal from emp where deptno=30);36.select ename,sal from emp where sal>all(select sal from emp where deptno=30);37.select count(*),avg(sal),avg((sysdate-hiredate)/365) from emp group by deptno;38.select distinct job,deptno from emp;查询同部门同工种员工信息select ename,emp.job,emp.deptno from emp,(select deptno,job from emp group by (deptno,job) having count(*)>1) awhere emp.deptno=a.deptno and emp.job=a.joborder by ename39.select dept.deptno,dname,d.amount,d.avgsal from dept,(select deptno,count(*)amount,avg(sal) avgsal from emp group by deptno) d where dept.deptno=d.deptno;40.select job,min(sal) from emp group by job;41. select deptno,job,max(sal) from emp group by deptno,job42. select a.ename,b.ename from emp a,emp bwhere a.mgr=b.empno and a.deptno=10;43.select deptno,count(empno),avg(sal) from emp group by deptno;44.select * from emp where sal in (select avg(sal) from emp group by deptno);45.select * from emp e where sal>(select avg(sal) from emp where deptno=e.deptno);46.select ename,empno,sal d.avgsal from emp e,(select empno,avg(sal) avgsal from emp) d where sal>(select avg(sal) from emp where deptno=e.deptno) and d.deptno=e.deptno47.select * from emp where sal>any(select sal from empwhere deptno=20);48.select job,count(empno),avg(sal) from emp group by job;49. select deptno, job,count(empno), avg(sal) from emp group by deptno,job;50. select * from emp where (sal,comm) in (select sal,comm from emp where deptno=10);51. select * from emp where deptno in (select deptno from emp group by deptno having count(empno)>5);52. select deptno,dname,loc from dept where deptno in (select deptno from emp group by deptno having min(sal)>2000);53.select emp.deptno,dname,ename,empno,sal from emp,dept where emp.deptno in(select deptno from emp group by deptno having min(sal)>2000)and emp.deptno=dept.deptno;54. select dname,deptno,loc from deptwhere deptno not in (select deptno from emp where sal<2000 OR SAL>3000)55. select *from emp where deptno in (select deptno from emp where saL BETWEEN 2000 AND 3000)56.select a.deptno,dname,loc from dept a,emp b,emp c where a.deptno=b.deptno andb.mgr=c.empno57.select deptno,dname,loc from dept where deptno in(select deptno from emp group by deptno having count(empno)>=all(select max(count(*))from emp group by deptno));58.select *from emp where deptno=30 and rownum<=3 order by sal;58.select rownum,a.empno,a.sal from (select * from emp order by sal desc) aWhere rownum<=3 and deptno=3059. select rownum,a.empno,a.sal from(select * from emp order by sal desc) a where rownum<=10minusselect rownum,a.empno,a.sal from (select * from emp order by sal desc) awhere rownum<563.insert into emp (empno,ename,sal,deptno,hiredate) values (1357,’oracle’,2050,20,to_date(‘2002-5-10’,’YYYY-MM-DD’));64.insert into emp select8000,’FAN’,job,mgr,hire date,sal,comm.,deptno from emp where ename=’SMITH’;65.update emp set sal=1000+(select avg(sal) from emp e where emp.deptno=e.deptnogroup by deptno);SQL> SELECT EXTRACT(DAY FROM NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’)) DAY,2 EXTRACT(HOUR FROM NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’)) HOUR,3 EXTRACT(MINUTE FROM NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’)) MINUTE,4 NUMTODSINTERVAL(SYSDATE-HIREDATE,’DAY’) DETAIL5 FROM EMP;原意是给出两个日期,获取两个日期之间的间隔数值,返回形如格式:x年x月x日,类似倒计时工具计时器。
Oracle数据库查询练习及答案
O r a c l e数据库查询练习及答案(共6页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--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 找出各月最后一天受雇的所有雇员。
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练习题及答案
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_关联查询_原始资料
ORACLE数据库开发培训(二)课后试题有如下表格:学生:t_studentstudent_id class_id student_name1 1 刘一2 1 陈二3 1 张三4 1 李四5 2 王五6 2 赵六考核规则:t_assess_rulerule_id class_id assess_type scale(%) desc1 1 test_score 70 成绩(固定)2 1 check_in 10 考勤3 1 task_scale 10 作业完成率4 1 task_score 10 作业成绩5 2 test_score 70 成绩(固定)6 2 check_in 15 考勤7 2 task_scale 15 作业完成率注:各科的成绩计算方法根据考核规则中占有的比率计算科目:t_subjectsubject_id subject_name1 语文2 数学成绩:t_performanceperformance_id student_id subject_id test_score check_in task_scale task_score1 1 1 90 100 100 902 1 2 67 100 100 783 2 1 71 100 100 804 2 2 100 100 100 955 3 1 85 100 100 906 3 2 88 100 100 907 4 1 81 100 100 908 4 2 78 100 100 889 5 1 63 95 100 6610 5 2 87 95 100 9011 6 1 84 91 100 8212 6 2 72 91 100 70一、如何算出一班(class_id=1)每个学生各科的成绩?(15分)select s.student_name, sub.subject_name, p.test_scorefrom t_student s join t_performance pon s.student_id = p.student_idjoin t_subject subon sub.subject_id = p.subject_idwhere s.class_id = 1;二、请对一班(class_id=1)每个学生各科成绩的总分进行排序。
oracle查询练习题
oracle查询练习题Oracle查询练习题数据库技术在现代信息管理中扮演着至关重要的角色。
Oracle作为一种流行的关系型数据库管理系统,被广泛应用于企业级应用程序和数据仓库。
为了更好地掌握Oracle查询语言,下面将提供一些查询练习题,帮助读者巩固和提高自己的查询技能。
查询练习题一:学生信息假设我们有一个学生信息表,其中包含以下字段:学生ID、姓名、性别、年龄、所在班级。
请编写SQL查询语句,找出年龄大于等于18岁的男生的姓名和所在班级。
解答:```sqlSELECT 姓名, 所在班级FROM 学生信息WHERE 年龄 >= 18 AND 性别 = '男';```查询练习题二:订单信息假设我们有一个订单信息表,其中包含以下字段:订单ID、客户ID、订单日期、订单金额。
请编写SQL查询语句,找出每个客户的订单总金额,并按照订单金额的降序排列。
解答:```sqlSELECT 客户ID, SUM(订单金额) AS 订单总金额FROM 订单信息GROUP BY 客户IDORDER BY 订单总金额 DESC;```查询练习题三:产品销售假设我们有一个产品销售表,其中包含以下字段:销售ID、产品ID、销售日期、销售数量、销售金额。
请编写SQL查询语句,找出每个产品的总销售数量和总销售金额,并按照产品ID的升序排列。
解答:```sqlSELECT 产品ID, SUM(销售数量) AS 总销售数量, SUM(销售金额) AS 总销售金额FROM 产品销售GROUP BY 产品IDORDER BY 产品ID ASC;```查询练习题四:员工薪资假设我们有一个员工薪资表,其中包含以下字段:员工ID、姓名、部门、薪资。
请编写SQL查询语句,找出每个部门的平均薪资,并按照部门的字母顺序排列。
解答:```sqlSELECT 部门, AVG(薪资) AS 平均薪资FROM 员工薪资GROUP BY 部门ORDER BY 部门 ASC;```通过以上查询练习题,读者可以加深对Oracle查询语言的理解和应用。
Oracle基础练习题及答案(基本查询)
O r a c l e基础练习题及答案(基本查询)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March练习题使用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*;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查询题集-答案
一、现有学生表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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 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)每个学生各科成绩的总分进行排序。