oracle_sql练习题及答案
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 sql练习题
oracle sql练习题1. 编写一个SQL查询,找出员工表中工资最高的员工的姓名和工资。
```SELECT ename, salFROM empWHERE sal = (SELECT MAX(sal) FROM emp);```2. 编写一个SQL查询,计算出每个部门的平均工资,并按照平均工资降序排列。
```SELECT deptno, AVG(sal) as avg_salaryFROM empGROUP BY deptnoORDER BY avg_salary DESC;```3. 编写一个SQL查询,找出没有任何员工的部门(即部门中没有员工记录的部门)。
```SELECT d.deptno, d.dnameFROM dept dLEFT JOIN emp e ON d.deptno = e.deptnoWHERE e.deptno IS NULL;```4. 编写一个SQL查询,找出在每个部门中薪资排名第二高的员工的姓名和工资。
```SELECT d.dname, e.ename, e.salFROM emp eINNER JOIN dept d ON e.deptno = d.deptnoWHERE e.sal = (SELECT DISTINCT salFROM empWHERE deptno = e.deptnoORDER BY sal DESCOFFSET 1 ROW FETCH FIRST 1 ROW ONLY);```5. 编写一个SQL查询,找出拥有部门管理权限(即至少管理一个部门)且工资不超过5000的员工的姓名。
```SELECT enameFROM empWHERE empno IN (SELECT DISTINCT mgrFROM empWHERE sal <= 5000);```6. 编写一个SQL查询,找出在工资表中有重复记录的员工姓名和工资。
```SELECT ename, salFROM empGROUP BY ename, salHAVING COUNT(*) > 1;```7. 编写一个SQL查询,找出至少在两个部门工作过的员工的姓名。
oracle 复杂sql练习题
oracle 复杂sql练习题Oracle 复杂 SQL 练习题在数据库管理系统中,SQL(Structured Query Language)是一种用于管理和操作关系数据库的标准语言。
Oracle是一种常用的关系数据库管理系统,它支持SQL语言的广泛应用。
本文将介绍一些复杂的Oracle SQL练习题,旨在提高读者对SQL语言的理解和应用能力。
1. 学生成绩统计假设有两张表:学生表(Student)和成绩表(Score)。
学生表包含学生的姓名(Name)和学号(ID),成绩表包含学生的学号(ID)和对应的科目(Subject)及成绩(Grade)。
现在需要统计每个学生的总分和平均分,并按照平均分从高到低排序。
解决方案:```sqlSELECT , SUM(sc.Grade) AS TotalGrade, AVG(sc.Grade) AS AverageGrade FROM Student sJOIN Score sc ON s.ID = sc.IDGROUP BY ORDER BY AverageGrade DESC;```2. 部门工资排名假设有两张表:员工表(Employee)和部门表(Department)。
员工表包含员工的姓名(Name)、工号(ID)和所属部门(DeptID),部门表包含部门的名称(DeptName)和部门编号(DeptID)。
现在需要统计每个部门的平均工资,并按照平均工资从高到低排序。
解决方案:```sqlSELECT d.DeptName, AVG(e.Salary) AS AverageSalaryFROM Department dJOIN Employee e ON d.DeptID = e.DeptIDGROUP BY d.DeptNameORDER BY AverageSalary DESC;```3. 订单统计假设有三张表:订单表(Order)、订单详情表(OrderDetail)和商品表(Product)。
ORACLE数据库及SQL语言考试题一(含答案)
ORACLE 数据库及SQL 语言考试题及答案考试试题说明:试题包括三类,名词解释、ORACLE 数据库知识问答、SQL 语句编写,主要用于考察新同事ORACLE 数据库知识和SQL 语言掌握情况。
名词解释可以在回答中阐明名词的定义和你所了解的任何相关信息,没有字数限制,但避免长篇大论,简要描述即可。
ORACLE 数据库知识问答,重点在于切中要害,回答按点给分,每题2分。
SQL 语句编写检查大家的实际SQL 语句编写能力及掌握情况,注意格式规范,要清晰易读。
一、名词解释一、名词解释1. 数据库数据库是按照数据结构来组织、存储和管理数据的仓库。
2. 实例实例是一组Oracle 后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。
3. 表空间表空间是数据库的逻辑划分,用于存放数据库对象,主要是数据表,所以称作表空间。
ORACLE 自身存在一些表空间,如system 、user 和undo 表空间。
数据库用户也可以自己定义自己的表空间,并为每个表空间分配对应的数据文件。
4. 索引索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
索引不论逻辑上和物理上都与相关的表的数据无关,索引需要独立的存储空间,所以索引在创建之初就需要设置对应的表空间。
二、ORACLE 数据库知识问答1. 数据表Pirmary Key 和Unique Key 的作用和区别作用:Pirmary Key 和Unique Key 都是为数据表提供唯一性约束。
区别:Primary key 的1个或多个列必须为NOT NULL ,如果列为NULL ,在增加PRIMARY KEY 时,列自动更改为NOT NULL 。
而UNIQUE KEY 对列没有此要求。
一个表只能有一个PRIMARY KEY ,但可以有多个UNIQUE KEY 。
2. dos 模式下数据库用户备份、恢复命令数据库备份:exp 用户名/密码@连接标识符数据库恢复:imp 用户名/密码@连接标识符3. 列举五个常用的集合函数max,min,sum,avg,count4. round 与trunc 在处理数字方面的区别,并举例说明round 返回四舍五入后的值,而trunc 返回截取后的值,不进行四舍五入。
oracle试题
oracle试题一、选择题1. 在Oracle数据库中,用于创建表的语句是什么?A. CREATE DATABASEB. CREATE TABLEC. CREATE INDEXD. CREATE VIEW答案:B2. 下列哪个命令可以用于查询当前数据库中的所有表?A. DESCB. SHOW TABLESC. LIST TABLESD. SELECT * FROM ALL_TABLES答案:C3. 在Oracle中,如何删除一个表?A. REMOVE TABLE table_name;B. DELETE TABLE table_name;C. DROP TABLE table_name;D. ERASE TABLE table_name;答案:C4. 在Oracle SQL中,哪个关键字用于选择所有列?A. ALLB. EACHC. EVERYD. ALL COLUMNS答案:A5. 如何在Oracle SQL查询中对结果进行排序?A. ORDER BY column_name ASC/DESC;B. SORT BY column_name ASC/DESC;C. ARRANGE BY column_name ASC/DESC;D. CLASSIFY BY column_name ASC/DESC;答案:A二、填空题1. 在Oracle数据库中,用来创建视图的关键字是_______。
答案:CREATE VIEW2. 若要在Oracle中为表添加一个新的列,应使用_______语句。
答案:ALTER TABLE3. 在Oracle SQL中,用于合并两个或多个查询结果的关键字是_______。
答案:UNION4. 若要在Oracle数据库中重命名表,应使用_______语句。
答案:RENAME5. 在Oracle中,用来删除表中的行的语句是_______。
答案:DELETE三、简答题1. 请简述Oracle数据库中的事务是什么?答:事务是一组SQL语句的集合,它们作为一个单一的工作单元执行。
oracle的sql练习题
oracle的sql练习题1. 编写SQL查询语句,从员工表(EMPLOYEES)中选择工资(SALARY)大于5000的员工信息,按照工资的降序排列。
```sqlSELECT * FROM EMPLOYEES WHERE SALARY > 5000 ORDER BY SALARY DESC;```2. 编写SQL查询语句,从部门表(DEPARTMENTS)中选择部门名称(DEPARTMENT_NAME)、部门位置(LOCATION_ID)以及该部门员工的数量,按照员工数量的升序排列。
```sqlSELECT DEPARTMENT_NAME, LOCATION_ID, COUNT(*) AS EMPLOYEE_COUNTFROM DEPARTMENTSJOIN EMPLOYEES ON DEPARTMENTS.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_IDGROUP BY DEPARTMENT_NAME, LOCATION_IDORDER BY EMPLOYEE_COUNT ASC;```3. 编写SQL查询语句,从员工表(EMPLOYEES)中选择员工的姓名(FIRST_NAME)以及所属部门的名称(DEPARTMENT_NAME),要求只选择属于部门名称以"E"开头的员工信息。
```sqlSELECT FIRST_NAME, DEPARTMENT_NAMEFROM EMPLOYEESJOIN DEPARTMENTS ON EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_IDWHERE DEPARTMENT_NAME LIKE 'E%';```4. 编写SQL查询语句,从员工表(EMPLOYEES)中选择员工的姓名(FIRST_NAME)以及所属部门的名称(DEPARTMENT_NAME),要求只选择属于部门名称以"A"结尾的员工信息,且员工的工资(SALARY)在3000到6000之间。
Oracle的sql语句练习题含答案
Oracle的sql语句练习题含答案--1、选择部门30中的雇员select * from emp where deptno=30;--2、列出所有办事员的姓名、编号和部门select ename,empno,dname from emp e inner join dept d on e.deptno = d.deptno where job=upper('clerk‟);--3、找出佣金高于薪金的雇员select * from emp where comm>sal;--4、找出佣金高于薪金60%的雇员select * from emp where comm>sal*0.6--5、找出部门10中所有经理和部门20中的所有办事员的详细资料select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk '));--6、找出部门10中所有经理、部门20中所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料select * from emp where (deptno=10 and job=upper('manager')) or (deptno=20 and job=upper('clerk ')) or (job<>upper(…manager‟) and job<>upper(…clerk‟) and sal>=2000)--7、找出收取佣金的雇员的不同工作select distinct job from emp where comm>0;--8、找出不收取佣金或收取的佣金低于100的雇员select * from emp where nvl(comm,0)<100;--9、找出各月最后一天受雇的所有雇员select * from emp where hiredate= last_day(hiredate);--10、找出早于25年之前受雇的雇员select * from emp where months_between(sysdate,hiredate)/12>25;select * from emp where hiredate<ADD_MONTHS(SYSDATE,-12*25);< P>--11、显示只有首字母大写的所有雇员的姓名select ename from emp where ename=initcap(ename);--12、显示正好为6个字符的雇员姓名select ename from emp where length(ename)=6--13、显示不带有'R'的雇员姓名Select ename from emp where ename not like …%R%‟;Select ename from emp where instr(ename,‟R‟)=0;--14、显示所有雇员的姓名的前三个字符select substr(ename,1,3) from emp--15、显示所有雇员的姓名,用a替换所有'A'Select replace(ename,‟A‟,‟a‟) from emp--16、显示所有雇员的姓名以及满10年服务年限的日期Select ename,add_months(hiredate,12*10) …服务年限的日期‟ from e mp--17、显示雇员的详细资料,按姓名排序Select * from emp order by ename--18、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面Select ename from emp order by hiredate--19、显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序Select ename,job,sal from emp order by job desc ,sal asc--20、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,将最早年份的项目排在最前面select ename,to_char(hiredate,'yyyy'),to_char(hiredate,'mm') from emp order by hiredate asc--21、显示在一个月为30天的情况下所有雇员的日薪金select ename,sal/30 from emp;--22、找出在(任何年份的)2月受聘的所有雇员select * from emp where to_char(hiredate,'mm')='02';--23、对于每个雇员,显示其加入公司的天数select ename,sysdate-hiredate from emp--24、显示姓名字段的任何位置,包含"A" 的所有雇员的姓名select ename from emp where ename like '%A%';select ename from emp where instr(ename,‟A‟,1)>0;--25、以年、月和日显示所有雇员的服务年限Select months_between(sysdate,hiredate)/12 as “年”,months_between(sysdate,hiredate) as “月”, sysdate-hiredate as “日” from emp--1、列出至少有一个雇员的所有部门select distinct dname from dept where deptno in (select distinct deptno from emp);--2、列出薪金比"SMITH"多的所有雇员select ename,sal from emp where sal>(select sal from emp whereename=upper('smith'));--3、列出所有雇员的姓名及其直接上级的姓名select e.ename,m.ename from emp e,emp m where e.mgr=m.empno(+);--4、列出入职日期早于其直接上级的所有雇员select ename from emp e where hiredate<(select hiredate from emp where empno=e.mgr);--5、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门select dname,ename from dept d left join emp e on d.deptno=e.deptno;--6、列出所有“CLERK”(办事员)的姓名及其部门名称select ename,dname from emp e left join dept d on e.deptno=d.deptno wherejob=upper('clerk');--7、列出各种工作类别的最低薪金,显示最低薪金大于1500的记录select job,min(sal) from emp group by job having min(sal)>1500;--8、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号select ename from emp where deptno = (select deptno from dept wheredname=uppder('SALES'))--9、列出薪金高于公司平均水平的所有雇员select ename from emp where sal>(select avg(sal) from emp);--10、列出与“SCOTT”从事相同工作的所有雇员select ename from emp where job=(select job from emp whereename=upper('scott'));--11、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中任何一个雇员的薪金select ename,sal from emp where sal in (select sal from emp where deptno=30);--12、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30中所有雇员的薪金select ename ,sal from emp where sal>(select max(sal) from emp where deptno=30);--13、列出每个部门的信息以及该部门中雇员的数量select d.deptno,dname,count(ename) from dept d left join emp e on(d.deptno=e.deptno)group by d.deptno,dname--14、列出所有雇员的雇员名称、部门名称和薪金Select e.ename,d.dname,e.sal from emp e left join dept d on (d.deptno=e.deptno)--15、列出从事同一种工作但属于不同部门的雇员的不同组合Select tba.ename,tbb.ename,tba.job,tbb.job,tba.deptno,tba.deptnoFrom emp tba,emp tbbWhere tba.job=tbb.job and tba.deptno<>tbb.deptno--16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员Select dept.deptno,dname,loc,count(empno)From dept,empWhere dept.deptno=emp.deptno(+)Group by dept.deptno,dname,loc--17、列出各种类别工作的最低工资Select min(sal) from emp group by job--18、列出各个部门的MANAGER(经理)的最低薪金Select deptno,min(sal) from emp where job=upper(…manager‟) group by deptno--19、列出按年薪排序的所有雇员的年薪select (sal+nvl(comm,0))*12 as avn from emp order by avn--20、列出薪金水平处于第四位的雇员Select * from (Select ename,sal, rank() over (order by sal desc) as grade from emp) where grade=4。
oracle sql 试题及答案
oracle sql 试题及答案在Oracle数据库管理和开发中,SQL(Structured Query Language)是一种标准化的关系型数据库语言。
在这篇文章中,我们将提供一些Oracle SQL试题及其答案,旨在帮助读者巩固和加深对Oracle SQL语言的理解。
请注意,答案中不再重复题目,仅给出相应的解答。
1. 以下SQL语句中,哪一个用于创建一个名为"Employees"的表?CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,LastName VARCHAR2(50),FirstName VARCHAR2(50),DateOfBirth DATE);2. 在一个名为"Employees"的表中,你想要删除LastName为"Smith"的所有行。
你应该使用以下哪个SQL语句?DELETE FROM Employees WHERE LastName = 'Smith';3. 假设你有一个名为"Employees"的表,你想要增加一个名为"Salary"的列,数据类型为NUMBER(10,2)。
你应该使用以下哪个SQL 语句?ALTER TABLE Employees ADD (Salary NUMBER(10,2));4. 以下SQL查询语句将返回哪些列?SELECT LastName, FirstName FROM Employees;答案:该查询将返回"Employees"表中的LastName和FirstName列。
5. 以下SQL语句将返回"Employees"表中有多少条记录?SELECT COUNT(*) FROM Employees;答案:该查询将返回"Employees"表中的记录数。
oracle数据库sql试题及答案
oracle数据库sql试题及答案Oracle数据库SQL试题及答案1. 如何查询员工表中所有员工的姓名和工资,要求工资从高到低排序?```sqlSELECT name, salaryFROM employeesORDER BY salary DESC;```2. 如何统计每个部门的员工人数?```sqlSELECT department_id, COUNT(*) AS employee_countFROM employeesGROUP BY department_id;```3. 如何查询工资高于平均值的员工信息?```sqlSELECT *FROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);```4. 如何找出没有直属上司的员工?```sqlSELECT *FROM employees e1WHERE NOT EXISTS (SELECT 1FROM employees e2WHERE e1.manager_id = e2.employee_id);```5. 如何查询工资在3000到5000之间的员工姓名和工资?```sqlSELECT name, salaryFROM employeesWHERE salary BETWEEN 3000 AND 5000;```6. 如何删除员工表中所有工资低于3000的员工记录?```sqlDELETE FROM employeesWHERE salary < 3000;```7. 如何更新员工表中所有部门为10的员工的工资,增加10%?```sqlUPDATE employeesSET salary = salary * 1.1WHERE department_id = 10;```8. 如何查询员工表中每个员工的姓名和他们直属上司的姓名?```sqlSELECT AS employee_name, AS manager_name FROM employees e1JOIN employees e2 ON e1.manager_id = e2.employee_id; ```9. 如何查询员工表中每个部门的平均工资?```sqlSELECT department_id, AVG(salary) AS avg_salary FROM employeesGROUP BY department_id;```10. 如何查询员工表中工资最高的员工信息?```sqlSELECT *FROM employeesWHERE salary = (SELECT MAX(salary) FROM employees); ```。
oracle SQL考试试卷
Oracle SQL&PLSQL Test一、选择题(共30题;每题3分)1.Oracle发出下列select语句:SQL> select e.empno, e.ename, d.loc2 from emp e, dept d3 where e.deptno = d.deptno4 and substr(e.ename, 1, 1) = ‘S’;下列哪个语句是Oracle数据库中可用的ANSI兼容等价语句?A.select empno, ename, loc from emp join dept on emp.deptno = dept.deptno where substr(emp.ename, 1, 1) = ‘S’;B.select empno, ename, loc from emp, dept on emp.deptno = dept.deptno where substr(emp.ename, 1, 1) = ‘S’;C.select empno, ename, loc from emp join dept where emp.deptno = dept.deptno and substr(emp.ename, 1, 1) = ‘S’;D.select empno, ename, loc from emp left join dept on emp.deptno = dept.deptno and substr(emp.ename, 1, 1) = ‘S’;2.用下列代码回答问题:Examine the data in the EMPLOYEES and DEPARTMENTS tables.You want to retrieve all employees, whether or not they have matching departments in the departments table. Which query would you use?需要检索出无论雇员是否和部门匹配的记录A. SELECT last_name, department_nameFROM employees , departments(+);B. SELECT last_name, department_nameFROM employees JOIN departments (+);C. SELECT last_name, department_nameFROM employees(+) e JOIN departments dON (e.department_id = d.department_id);D. SELECT last_name, department_nameFROM employees eRIGHT OUTER JOIN departments d ON (e.department_id = d.department_id);E. SELECT last_name, department_nameFROM employees(+) , departmentsON (e.department_id = d.department_id);F. SELECT last_name, department_nameFROM employees e LEFT OUTERJOIN departments d ON (e.department_id = d.department_id);3.公司销售数据库包含一个PROFITS表,按产品名、销售地区和季度列出利润信息。
oracle sql题
Oracle SQL题1. 什么是Oracle SQLOracle SQL是一种用于与Oracle数据库进行交互的编程语言。
它是一种结构化查询语言(Structured Query Language),用于管理和操作关系型数据库中的数据。
Oracle SQL提供了丰富的功能和语法,可以执行各种数据库操作,如查询、插入、更新和删除数据,以及创建和管理数据库对象等。
2. Oracle SQL的基本语法2.1 查询数据在Oracle SQL中,可以使用SELECT语句来查询数据。
以下是一个简单的SELECT语句的示例:SELECT column1, column2, ...FROM table_nameWHERE condition;•column1, column2, …:要查询的列名•table_name:要查询的表名•condition:查询条件例如,要查询一个名为”employees”的表中所有员工的姓名和薪水,可以使用以下SELECT语句:SELECT name, salaryFROM employees;2.2 插入数据要向Oracle数据库中的表中插入数据,可以使用INSERT语句。
以下是一个简单的INSERT语句的示例:INSERT INTO table_name (column1, column2, ...)VALUES (value1, value2, ...);•table_name:要插入数据的表名•column1, column2, …:要插入数据的列名•value1, value2, …:要插入的数据值例如,要向一个名为”employees”的表中插入一条新的员工记录,可以使用以下INSERT语句:INSERT INTO employees (name, salary)VALUES ('John Doe', 5000);2.3 更新数据要更新Oracle数据库中的数据,可以使用UPDATE语句。
oracle sql题
oracle sql题一、题目要求本题目旨在考察对OracleSQL语言的理解和运用能力。
请根据题目要求,完成相应的SQL查询。
二、题目描述请根据以下描述,完成SQL查询:该数据库包含一个名为Employees的表,包含以下列:EmployeeID(员工ID)、Name(姓名)、Department(部门)和Salary(薪资)。
要求完成以下查询:1.按照薪资从高到低排序。
2.只考虑薪资大于等于5000的员工。
3.排除部门为“Sales”的员工。
4.查询结果包括姓名和部门信息。
三、SQL查询语句根据题目要求,以下为对应的SQL查询语句:```sqlSELECTName,DepartmentFROMEmployeesWHERESalary>=5000ANDDepartment<>'Sales'ORDERBYSalaryDESC;```四、答案解析该SQL查询语句通过条件筛选Salary大于等于5000的员工,并且排除部门为“Sales”的员工,最后按照薪资从高到低进行排序,最终返回姓名和部门信息。
五、注意事项1.请确保SQL语句语法正确,符合OracleSQL语言规范。
2.请注意数据表中的真实数据类型和约束条件,避免出现错误。
3.请根据实际情况进行测试,确保查询结果的准确性。
六、额外提示如果需要进一步优化SQL查询,可以考虑使用索引来提高查询性能。
对于Salary列,可以创建索引以提高大于等于5000的筛选速度。
同时,对于Department列,也可以考虑创建索引以优化排除“Sales”部门的性能。
七、参考代码(可选)以下是一个可能的参考代码实现,供参考:```sql--创建Salary索引CREATEINDEXidx_salaryONEmployees(Salary);--执行SQL查询SELECTName,DepartmentFROMEmployeesWHERESalary>=5000ANDDepartment<>'Sales'ORDERBYSalaryDESC;```请注意,这只是参考代码,实际使用时需要根据数据库结构和数据量进行适当的调整。
OraclePLSQL测试题与答案(绝对经典)
Oracle PL/SQL测试题姓名:___ _________ 一、选择题1、Oracle数据库中为新创建的表分配的初始空间通常为多大(B)A、一个块、一个块B、一个区、一个区C、一个段、一个段D、c一个表空间一个表空间2、关于存储过程参数,正确的说法是(B)A、存储过程的输出参数可以是标量类型,也可以是表类型、存储过程的输出参数可以是标量类型,也可以是表类型B、存储过程输入参数可以不输入信息而调用过程、存储过程输入参数可以不输入信息而调用过程C、可以指定字符参数的字符长度(函数的()或者过程的(number/varchar2))D、以上说法都不对、以上说法都不对3、下列说法,正确的说法是(B)A、只要在存储过程中有增删改语句,一定加自治事务、只要在存储过程中有增删改语句,一定加自治事务B、在函数内可以修改表数据、在函数内可以修改表数据C、函数不能递归调用、函数不能递归调用D、以上说法都不对、以上说法都不对4、有一产品表(编号,名称,价格,数量,所属分类),下列语法不正确的是(D)A、select * from 产品表产品表 where价格>1000 产品表B、select sum(价格所属分类 having max(价格价格)>1000 产品表 group by 所属分类价格) from 产品表C、select所属分类,sum(价格) from 产品表所属分类产品表 where 价格>1000 group by 所属分类D、select所属分类,sum(价格) from 产品表所属分类产品表 where max(价格)>1000 group by 所属分类5、关于触发器,下列说法正确的是(B)A、可以在表上创建INSTEAD OF 触发器触发器B、语句级触发器不能使用“:old”和“:new”C、行级触发器不能用于审计功能、行级触发器不能用于审计功能D、触发器可以显式调用、触发器可以显式调用6、下列那些是Oracle的伪列(ACD)A、ROWID B、ROW_NUMBER() C、LEVEL D、ROWNUM E、COLUMN 7、当表的重复行数据很多时,应该创建的索引类型应该是(、当表的重复行数据很多时,应该创建的索引类型应该是( C )A、B树B 、reverse C 、bitmap D 、函数索引、函数索引8、在建表时如果希望某列的值,在一定的范围内,应建什么样的约束?(C )A 、primary key B 、unique C 、check D 、not null 9、利用游标来修改数据时,所用的。
Oracle的sql语句练习题含答案(二).
1、列出至少有一个雇员的所有部门select distinct dname from dept where deptno in (select distinct deptno from emp;2、列出薪金比"SMITH"多的所有雇员select ename,sal from emp where sal>(select sal from emp where ename=upper('smith';3、列出所有雇员的姓名及其直接上级的姓名select e.ename,m.ename from emp e,emp m where e.mgr=m.empno(+;4、列出入职日期早于其直接上级的所有雇员select ename from emp e where hiredate<(select hiredate from emp where empno=e.mgr;5、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门select dname,ename from dept d left join emp e on d.deptno=e.deptno;6、列出所有“CLERK”(办事员)的姓名及其部门名称select ename,dname from emp e left join dept d on e.deptno=d.deptno where job=upper('clerk';7、列出各种工作类别的最低薪金,显示最低薪金大于1500的记录select job,min(sal from emp group by job having min(sal>1500;8、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号select ename from emp where deptno = (select deptno from dept where dname=uppder('SALES'9、列出薪金高于公司平均水平的所有雇员select ename from emp where sal>(select avg(sal from emp; 10、列出与“SCOTT”从事相同工作的所有雇员select ename from emp where job=(select job from emp where ename=upper('scott'; 11、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中任何一个雇员的薪金select ename,sal from emp where sal in (select sal from emp where deptno=30; 12、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30中所有雇员的薪金select ename ,sal from emp where sal>(select max(sal from emp where deptno=30; 13、列出每个部门的信息以及该部门中雇员的数量select d.deptno,dname,count(ename from dept d left join emp e on (d.deptno=e.deptno group by d.deptno,dname 14、列出所有雇员的雇员名称、部门名称和薪金Select e.ename,d.dname,e.sal from emp e left join dept d on (d.deptno=e.deptno 15、列出从事同一种工作但属于不同部门的雇员的不同组合Selecttba.ename,tbb.ename,tba.job,tbb.job,tba.deptno,tba.deptno From emp tba,emp tbb Where tba.job=tbb.job and tba.deptno<>tbb.deptno 16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员Selectdept.deptno,dname,loc,count(empno From dept,emp Wheredept.deptno=emp.deptno(+ Group by dept.deptno,dname,loc 17、列出各种类别工作的最低工资Select min(sal from emp group by job 18、列出各个部门的MANAGER(经理)的最低薪金Select deptno,min(sal from emp where job=upper(‘manager’ group by deptno 19、列出按年薪排序的所有雇员的年薪select (sal+nvl(comm,0*12 as avn from emp order by avn 20、列出薪金水平处于第四位的雇员Select * from (Select ename,sal, rank( over (order by sal desc as grade from emp where grade=4。
Oracle SQL 练习题及答案
42、查询全部学生都选修的课程的课程号和课程名
43、查询没学过“谌燕”老师讲授的任一门课程的学生姓名
44、查询两门以上不及格课程的同学的学号及其平均成绩
45、检索“c004”课程分数小于60,按分数降序排列的同学学号
46、删除“s002”同学的“c001”课程的成绩
10、查询没有学全所有课的同学的学号、姓名;
11、查询至少有一门课与学号为“s001”的同学所学相同的同学的学号和姓名;
12、查询至少学过学号为“s001”同学所有一门课的其他同学学号和姓名;
13、把“SC”表中“谌燕”老师教的课的成绩都更改为此课程的平均成绩;
14、查询和“s001”号的同学学习的课程完全相同的其他同学学号和姓名;
insert into student values ('s004','琴沁',20,'女');
insert into student values ('s005','王丽',20,'女');
insert into student values ('s006','李波',21,'男');
insert into student values ('s007','刘玉',21,'男');
15、删除学习“谌燕”老师课的SC 表记录;
16、向SC 表中插入一些记录,这些记录要求符合以下条件:没有上过编号“c002”课程的同学学号、“c002”号课的平均成绩;
17、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
Oracle PLSQL测试题与答案(绝对经典)
Oracle PL/SQL测试题姓名:___ _________一、选择题1、Oracle数据库中为新创建的表分配的初始空间通常为多大(B)A、一个块B、一个区C、一个段D、c一个表空间2、关于存储过程参数,正确的说法是(B)A、存储过程的输出参数可以是标量类型,也可以是表类型B、存储过程输入参数可以不输入信息而调用过程C、可以指定字符参数的字符长度(函数的()或者过程的(number/varchar2))D、以上说法都不对3、下列说法,正确的说法是(B)A、只要在存储过程中有增删改语句,一定加自治事务B、在函数内可以修改表数据C、函数不能递归调用D、以上说法都不对4、有一产品表(编号,名称,价格,数量,所属分类),下列语法不正确的是(D)A、select * from 产品表where价格>1000B、select sum(价格) from 产品表group by 所属分类having max(价格)>1000C、select所属分类,sum(价格) from 产品表where 价格>1000 group by 所属分类D、select所属分类,sum(价格) from 产品表where max(价格)>1000 group by 所属分类5、关于触发器,下列说法正确的是(B)A、可以在表上创建INSTEAD OF 触发器B、语句级触发器不能使用“:old”和“:new”C、行级触发器不能用于审计功能D、触发器可以显式调用6、下列那些是Oracle的伪列(ACD)A、ROWIDB、ROW_NUMBER()C、LEVELD、ROWNUME、COLUMN7、当表的重复行数据很多时,应该创建的索引类型应该是(C )A、B树B、reverseC、bitmapD、函数索引8、在建表时如果希望某列的值,在一定的范围内,应建什么样的约束?(C )A、primary keyB、uniqueC、checkD、not null9、利用游标来修改数据时,所用的。
oracle-sql入门练习及答案
oracle-sql⼊门练习及答案1,通过命令⾏⽅式打开sqlplus2,执⾏登录命令sqlplus scott/scott@192.168.248.129/orcl3进⾏sqlplus命令测试Set time onSet pagesize 数字Set linesizes 数字Set pause on/offDescribe命令查看表或视图结构也可以descShow 查看相应参数如:show parameter,show user,show error等Get命令把⼀个sql脚本⽂件内容放⼊缓冲区⽤系统编辑程序编辑命令在SQL*PLUS中运⾏操作系统缺省的⽂本编辑程序(EDIT)命令为:edit或者ed将缓存中的sql语句保存到⽂件中:SAVE ⽂件名【具体路径】查看缓存sql:list执⾏⽂件中的sql语句:START my.sql@ my.sql清空缓冲区:clear buffer格式化命令:columncolumn sal format $999,999.00如:SQL> select ename, sal from emp2SQL> /ENAME SAL---------- ------------SMITH $800.00ALLEN $1,600.00WARD $1,250.00JONES $2,975.00MARTIN $1,250.00BLAKE $2,850.00CLARK $2,450.00重置为默认值:clear columns;将屏幕上的内容写⼊到⽂件中spool fileName结束写⼊spool off3.Oracle查询1) 查询EMP表,显⽰部门号为10的所有雇员的NAME 、JOB、SALARY和 DEPTNO,并以岗位降序、⼯资升序进⾏排序。
select ename,job,sal,deptno from emp where deptno=10 order by job desc , sal asc2) 从EMP表中查询所有雇员的NAME和补助(SALARY+COMM),并处理null⾏。
Oracle最新的Sql笔试题及答案
Oracle最新的Sql笔试题及答案部门表(SM_DEPT)字段名称数据类型是否主键注释DEPT_ID NUMBER Y部门IDPARENT_DEPARTMENT_ID NUMBER N上级部门DEPARTMENT_NAME VARCHAR2(50)N部门名称⽤户部门中间表(SM_USER_DEPT)字段名称数据类型是否主键注释ID NUMBER Y主键DEPT_ID NUMBER N部门IDUSER_ID NUMBER N⽤户ID⽤户表(SM_USER)字段名称数据类型是否主键注释USER_ID NUMBER Y⽤户IDUSER_NAME VARCHAR2(50)N⽤户名称LOGON_NAME VARCHAR2(50)N登录名IS_SALES VARCHAR2(1)N是否为业务员客户信息表(CTM_CUSTOMERS)字段名称数据类型是否主键注释CUSTOMER_ID NUMBER Y客户IDCUSTOMER_NAME VARCHAR2(50)N客户姓名CITY VARCHAR2(50)N所属城市STATE VARCHAR2(25)N所属州ZIP_CODE VARCHAR2(10)N邮政编码CONTACT_NAME VARCHAR2(50)N联系⼈ADDRESS VARCHAR2(50)N联系地址TYPE VARCHAR2(50)N客户类型COMMENTS VARCHAR2(100)N备注订单头表(PIM_HEADERS)字段名称数据类型是否主键注释PI_ID NUMBER Y订单IDPI_NO VARCHAR2(50)N订单号CREATION_DATE DATE N创建⽇期CUSTOMER_ID NUMBER N关联客户表的客户IDOPERATOR_ID NUMBER N关联⽤户表的⽤户IDCURRENCY_CODE VARCHAR2(50)N订单币种EXCHAHGE_RATE NUMBER N汇率订单⾏表(PIM_LINES)字段名称数据类型是否主键注释PI_ID NUMBER N订单IDPI_LINES_ID VARCHAR2(50)Y订单⾏IDPRODUCT_CODE NUMBER N产品编码字段名称数据类型是否主键注释QUANTITY NUMBER N产品数量PRICE NUMBER N产品单价问题1.编写SQL语句,查询PIM_HEADERS表,符合⽇期在2011-03-01和2011-03-25之间的PI订单,显⽰订单号,创建⽇志,订单客户名称,订单业务员名称selectt1.PI_NO,t1.CREATION_DATE,t2.CUSTOM_NAME,ER_NAMEfrom (select*from PIM_HEADERSwhere CREATION_DATE betweento_date('2011-03-01','yyyy-mm-dd')andto_date('2011-03-25','yyyy-mm-dd')) t1left join CTM_CUSTOMERS t2on t1.CUSTOMER_ID = t2.CUSTOMER_IDleft join SM_USER t3on t1.OPERATOR_ID = ER_ID2.编写SQL语句,查询所有部门名称及其给部门的业务员的个数,部门在2011-01-01到2011-03-01之间创建的PI订单数select t1._DEPARTMENT_NAME,count(ER_NAME),count(t3.PI_NO)from SM_DEPT t1left join SM_USER_DEPT t2on t1.dept_id = t2.dept_idleft join (select*from PIM_HEADERSwhere CREATION_DATE betweento_date('2011-01-01','yyyy-mm-dd')andto_date('2011-03-01','yyyy-mm-dd')) t3on er_id = t3.OPERATOR_IDgroup by t1.DEPT_ID3.编写SQL语句,查询所有客户及其相关PI订单号,PI创建⽇期,PI订单相关业务员姓名及其业务所属部门名称selectt1.*,t2.PI_NO,t2.CREATION_DATE,ER_NAME,t5.DEPARTMENT_NAMEfrom SM_CUSTOMERS t1left join PIM_HEADERS t2on t1.CUSTOER_ID = t2.CUSTOMER_IDleft join SM_USER t3on t2.OPERATOR_ID = er_idleft join SM_USER_DEPT t4on ER_ID = ER_IDleft join SM_DEPT t5on t4.DEPT_ID = t5.DEPT_ID4.编写SQL语句,更新没有下过PI订单的客户名称的备注为“从未发⽣业务往来”update CTM_CUSTOMERS t1 set COMMENTS = '从未反⽣业务往来'where not exists (select PI_NO from PIM_HEADERS t2where t2.CUSTOMER_ID = t1.CUSTOMER_ID) ;commit;5.编写SQL语句,查询所有客户名称及其所属城市,并按照城市名称降序,⽤户名称升序排序select CUSTOM_NAME,CITYfrom CTM_CUSTOMERSorder by city desc,CUSTOMER_NAME asc6.编写SQL语句,查询出所有的客户的PI订单的下单⾦额,显⽰客户名称,订单币种,订单总数量及订单总额selectt2.CUSTOMER_NAME,t1.CURRENCY_CODE,t3.TOTAL,t4.TOTAL_MONEYfrom PIM_HEADERS t1left join CTM_CUSTOMERS t2on t1.CUSTOMER_ID = t2.CUSTOMER_IDleft join (select PI_ID,sum(QUANTITY) TOTAL,sum(QUANTITY*PRICE) TOTAL_MONEYfrom PIM_LINESgroup by PI_ID) t3on t1.PI_ID = t3.PI_ID;7.编写函数,函数需传⼊部门ID,返回结果部门对应所有业务员姓名连接起来,中间⽤逗号隔开create or replace function getUserByDeptId( dept_id number) return varchar2isres varchar2(200);cursor mycursor(did number) isselect t2.CUSTOMER_NAMEfrom (select *from SM_USER_DEPTwhere dept_id = did) t1left join SM_USER t2on ER_ID = ER_ID ;beginfor c_row in mycursor(dept_id) loopres := res ||','|| c_rowend loop;return res;end;。
oracle的sql语句的练习题及答案(员工表+部门表)
oracle的sql语句的练习题及答案(员⼯表+部门表)⼀、创建表及初始化数据1、表说明:emp员⼯表(empno员⼯号/ename员⼯姓名/job⼯作/mgr上级编号/hiredate受雇⽇期/sal薪⾦/comm佣⾦/deptno部门编号) dept部门表(deptno部门编号/dname部门名称/loc地点)注意:⼯资 = 薪⾦ + 佣⾦2、创建表create table DEPT(DEPTNO NUMBER(2) not null,DNAME VARCHAR2(14),LOC VARCHAR2(13));alter table DEPT add constraint PK_DEPT primary key (DEPTNO);create table EMP(EMPNO NUMBER(4) not null,ENAME VARCHAR2(10),JOB VARCHAR2(9),MGR NUMBER(4),HIREDATE DATE,SAL NUMBER(7,2),COMM NUMBER(7,2),DEPTNO NUMBER(2));alter table EMP add constraint PK_EMP primary key (EMPNO);3、初始化数据insert into DEPT (DEPTNO, DNAME, LOC)values (10, 'ACCOUNTING', 'NEW YORK');insert into DEPT (DEPTNO, DNAME, LOC)values (20, 'RESEARCH', 'DALLAS');insert into DEPT (DEPTNO, DNAME, LOC)values (30, 'SALES', 'CHICAGO');insert into DEPT (DEPTNO, DNAME, LOC)values (40, 'OPERATIONS', 'BOSTON');commit;insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600, 300, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250, 500, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-09-1981', 'dd-mm-yyyy'), 1250, 1400, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850, null, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7782, 'CLARK', 'MANAGER', 7839, to_date('09-06-1981', 'dd-mm-yyyy'), 2450, null, 10);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7788, 'SCOTT', 'ANALYST', 7566, to_date('19-04-1987', 'dd-mm-yyyy'), 3000, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000, null, 10);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500, 0, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7876, 'ADAMS', 'CLERK', 7788, to_date('23-05-1987', 'dd-mm-yyyy'), 1100, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950, null, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300, null, 10);commit;⼆、题⽬练习1.列出⾄少有⼀个员⼯的所有部门。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle_sql练习题及答案2012年11月20日来源:福星宝实验一练习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 between10and30;练习6、请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。
select ename,sal,job from emp where ename like'J%';练习7、请从表EMP中查找工资低于2000的雇员的姓名、工作、工资,并按工资降序排列。
select ename,job,sal from emp where sal<=2000order by sal desc;练习8、请从表中查询工作是CLERK的所有人的姓名、工资、部门号、部门名称以及部门地址的信息。
select ename,sal,emp.deptno,dname,loc from emp,dept whereemp.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的所有雇员姓名、工作和工资。
select ename,job,sal from emp where sal>(select sal from emp where ename=’JONES’);练习11、列出没有对应部门表信息的所有雇员的姓名、工作以及部门号。
select ename,job,deptno from emp where deptno not in(select deptno from dept);练习12、查找工资在1000~3000之间的雇员所在部门的所有人员信息select*from emp where deptno in(select distinct deptno from emp where sal between 1000and3000);练习13、雇员中谁的工资最高。
select ename from emp where sal=(select max(sal) from emp);select ename from (select*from emp order by sal desc) where rownum<=1;*练习14、雇员中谁的工资第二高(考虑并列第一的情况,如何处理)。
select ename from (select ename ,sal from (select*from emp order by sal desc) where rownum<=2order by sal) where rownum<=1;实验二1.查询所有雇员的姓名、SAL与COMM之和。
select ename,sal+nvl(comm,0) “sal-and-comm” from emp;2.查询所有81年7月1日以前来的员工姓名、工资、所属部门的名字select ename,sal,dname from emp,dept where emp.deptno=dept.deptno andhiredate<=to_date(‘1981-07-01’,’yyyy-mm-dd’);3.查询各部门中81年1月1日以后来的员工数select deptno,count(*) from emp wherehiredate>=to_date(‘1981-01-01’,’yyyy-mm-dd’) group by deptno;4.查询所有在CHICAGO工作的经理MANAGER和销售员SALESMAN的姓名、工资select ename,sal from emp where (job=’MANAGER’ or job=’SALES’) and deptno in (select deptno from dept where loc=’CHICAGO’);5.查询列出来公司就职时间超过24年的员工名单select ename from emp where hiredate<=add_months(sysdate,-288);6.查询于81年来公司所有员工的总收入(SAL和COMM)select sum(sal+nvl(comm,0)) from emp where to_char(hiredate,’yyyy’)=’1981’;7.查询显示每个雇员加入公司的准确时间,按××××年××月××日时分秒显示。
select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;8.查询公司中按年份月份统计各地的录用职工数量select to_char(hiredate,'yyyy-mm'),loc,count(*) from emp,dept where emp.deptno=dept.deptno group by to_char(hiredate,'yyyy-mm'),loc;9.查询列出各部门的部门名和部门经理名字select dname,ename from emp,dept where emp.deptno=dept.deptno and job=’MANAGER’;10.查询部门平均工资最高的部门名称和最低的部门名称select dname from dept where deptno=(select deptno from(select deptno from emp group by deptno order by avg(sal) ) where rownum<=1)union all select dname from dept where deptno=(select deptno from (select deptno from emp group by deptno order by avg(sal) desc ) where rownum<=1);11.*查询与雇员号为7521员工的最接近的在其后进入公司的员工姓名及其所在部门名select ename,dnamefrom (select ename,deptno from(select ename,deptno from emp where hiredate>(select hiredate from emp where empno=7521) order by hiredate ) where rownum<=1) e,deptwhere e.deptno=dept.deptno实验三、1.建立一个表(表名自定),表结构与EMP相同,没有任何记录。
create table my_emp as select*from emp;2.用Insert语句输入5条记录,并提交。
3.扩大该表的记录数到约40条,并使雇员号不重复;每个雇员都有所属部门,雇员在同一部门的经理是同一人。
insert….update…commit4.建立一个与DEPT表结构和记录完全相同的新表,并与前项新表建立参照完整性约束。
alter table my_dept add( constraint s1 primary key(deptno));alter table my_emp add(constraint s2 foreign key(deptno) referencesdept(deptno));5.对在‘NEW YORK’工作的雇员加工资,每人加200。
6.*如果雇员姓名与部门名称中有一个或一个以上相同的字母,则该雇员的COMM增加500。
update my_emp aset comm=NVL(comm,0)+500where a.ename<>(select translate(a.ename,b.dname,CHR(27))from my_dept b where b.deptno=a.deptno);--a.deptno与b.deptno必须有主外键连接,否则可能出错,为什么?commit;7.删除部门号为30的记录,并删除该部门的所有成员。
delete from emp where deptno=30;delete from dept where deptno=30;commit8.新增列性别SEX,字符型。
alter table emp add(sex char(2));9.修改新雇员表中的MGR列,为字符型。
该列数据必须为空alter table emp modify(mgr varchar2(20));10.试着去删除新表中的一个列。
alter table my_emp drop (comm);实验四、1.查询部门号为30的所有人员的管理层次图。
select level,ename from empconnect by mgr=prior empnostart with deptno=30and job='MANAGER';2.查询员工SMITH的各个层次领导。
select level,ename from empconnect by prior mgr= empnostart with ENAME='SMITH';3.查询显示EMP表各雇员的工作类型,并翻译为中文显示用decode函数4.*查询显示雇员进入公司当年是什么属相年(不考虑农历的年份算法)用decode函数5.建立一个视图myV_emp,视图包括myEMP表的empno、ename、sal,并按sal从大到小排列。