oracle的sql练习题
- 格式:docx
- 大小:36.71 KB
- 文档页数:3
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 练习题在数据库管理系统中,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)。
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 试题及答案在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语句的练习题及答案(员⼯表+部门表)⼀、创建表及初始化数据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.列出⾄少有⼀个员⼯的所有部门。
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&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表,按产品名、销售地区和季度列出利润信息。
OCPsql作业OCPsql作业1.【单选题】5分| 数据会真实的存储在哪一个数据库对象结构中A表B视图C同义词D用户2.【多选题】5分| 下面属于外连接的是ALEFTJOINBRIGHTJOINCFULLJOINDJOIN3.【多选题】5分| 下面操作中类似于内连接的操作是ALEFTJOINBJOINCSELECT*FROMA,B;DCROSSJOIN4.【多选题】5分| 下面属于集合操作的是AUNIONBUNIONALLCMINUSDORDERBY5.【多选题】5分| 下面关于用户和权限说法正确的有AWITHADMINOPTION可以级联收回BWITHGRANTOPTION可以级联收回CCREATESESSIO属于对象权限DSCHEMA和用户在ORACLE中可以看做一种概念6.【多选题】5分| 下面在ORACLE中删除整张表数据语法正确的写法有A DELETE*FROMTABLE_NAME;B DELTE FROM TABLE_NAME;C DELETE TABLE_NAME;D TRUNCATETABLE_NAME7.【判断题】5分| 提交后可以回滚。
A对B错8.【判断题】5分| union all 去重。
A对B错9.【判断题】5分| 在ORACLE中INSERT DELETE UPDATE MERGE都属于DML语句A对B错10.【判断题】5分| TRUNCATE和DROP属于DDL语句。
A对B错11.【判断题】5分| SELECT FOR UPDATE属于事务操作语句,会对SELECT找到的所有行加锁。
A对B错12.【单选题】5分| ORACLE默认的表的类型为A 索引组织表B 分区表C 堆表D 聚簇表13.【单选题】5分| 关于CHAR类型说法正确的是A 他是数字类型B 他是字符类型C 他是可变长字符类型D 他最多可以容纳5000个长度14.【单选题】5分| SYSDATE-1说法正确的是A运行报错B系统时间减去一分钟C昨天的这个时间,时分秒不变,知识日期减去一天D上个月的这个时间15.【单选题】5分| 关于GROUP说法错误的是A主要进行分组操作B分组后会自动去掉每组中的重复数据CGROUP语句后面可以连接whereDGROUP语句如果想要使用条件限制的话需要加having 16.【单选题】5分| 下面哪个子句被我们称之为谓词ASELECTBFROMCORDERBYDWHERE17.【单选题】5分| 下面对子查询说法错误的是A子查询可以在FROM后B子查询可以在WHERE后Cupdate可以使用子查询DSELECT后是不能使用子查询的18.【单选题】5分| SELECT语句的主要作用是A查询B修改数据C删除数据D锁定数据19.【单选题】5分| TRUNCATE语句属于ADMLBDDLCDCLDTCL20.【单选题】5分| 关于事务特性【A C I D】中的A说正确法的是A原子性B隔离性C一致性D持久性。
oracle的sql练习题
1. 编写SQL查询语句,从员工表(EMPLOYEES)中选择工资(SALARY)大于5000的员工信息,按照工资的降序排列。
```sql
SELECT * FROM EMPLOYEES WHERE SALARY > 5000 ORDER BY SALARY DESC;
```
2. 编写SQL查询语句,从部门表(DEPARTMENTS)中选择部门名称(DEPARTMENT_NAME)、部门位置(LOCATION_ID)以及该部门员工的数量,按照员工数量的升序排列。
```sql
SELECT DEPARTMENT_NAME, LOCATION_ID, COUNT(*) AS EMPLOYEE_COUNT
FROM DEPARTMENTS
JOIN EMPLOYEES ON DEPARTMENTS.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_ID
GROUP BY DEPARTMENT_NAME, LOCATION_ID
ORDER BY EMPLOYEE_COUNT ASC;
```
3. 编写SQL查询语句,从员工表(EMPLOYEES)中选择员工的姓名(FIRST_NAME)以及所属部门的名称(DEPARTMENT_NAME),要求只选择属于部门名称以"E"开头的员工信息。
```sql
SELECT FIRST_NAME, DEPARTMENT_NAME
FROM EMPLOYEES
JOIN DEPARTMENTS ON EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
WHERE DEPARTMENT_NAME LIKE 'E%';
```
4. 编写SQL查询语句,从员工表(EMPLOYEES)中选择员工的姓名(FIRST_NAME)以及所属部门的名称(DEPARTMENT_NAME),要求只选择属于部门名称以"A"结尾的员工信息,且员工的工资(SALARY)在3000到6000之间。
```sql
SELECT FIRST_NAME, DEPARTMENT_NAME
FROM EMPLOYEES
JOIN DEPARTMENTS ON EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
WHERE DEPARTMENT_NAME LIKE '%A' AND SALARY BETWEEN 3000 AND 6000;
```
5. 编写SQL查询语句,从员工表(EMPLOYEES)中选择员工的姓名(FIRST_NAME)以及所属部门的名称(DEPARTMENT_NAME),要求只选择属于部门名称以"C"或者"D"结尾的员工信息,并按照员工
的入职日期(HIRE_DATE)的降序排列。
```sql
SELECT FIRST_NAME, DEPARTMENT_NAME
FROM EMPLOYEES
JOIN DEPARTMENTS ON EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
WHERE DEPARTMENT_NAME LIKE '%C' OR
DEPARTMENT_NAME LIKE '%D'
ORDER BY HIRE_DATE DESC;
```
以上是一些Oracle SQL的练习题,可以帮助你加深对SQL语言的
理解和应用。
你可以根据这些题目来练习SQL查询语句的编写,提高
自己的技能水平。