oracle sql练习题
oracle sql语句练习题
emp e,
salgrade s,
dept d
where
e.sal between s.losal and s.hisal and
e.deptno = d.deptno and
s.grade!=4;
14.查找出职位和'MARTIN' 或者'SMITH'一样的员工的平均工资
select avg(sal) from emp where job in
(select distinct job from emp where ename in('MARTIN','SMITH'));
15.查找出不属于任何部门的员工
select * from emp where deptno not in (select distinct deptno from dept);
9.得到每个月工资总数最少的那个部门的部门编号,部门名称,部门位置
select d.*
from
dept d,
(select * from
(select deptno,sum(sal) as sum_sal from emp group by deptno order by sum(sal))
where e.sal>t.sal;
4.列出所有员工的姓名和其上级的姓名
select xd.ename ,boss.ename boss_name from emp xd,emp boss where xd.mgr=boss.empno;
5.以职位分组,找出平均工资最高的两种职位
select t.*
from emp) boss
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练习题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 试题及答案在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语句的练习题及答案(员⼯表+部门表)⼀、创建表及初始化数据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试题及答案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语句练习题含答案
--1、选择部门30中的雇员select * from emp where deptno=30;--2、列出所有办事员的姓名、编号和部门select ename,empno,dname from emp e inner join dept d on = where job=upper('clerk’);--3、找出佣金高于薪金的雇员select * from emp where comm>sal;--4、找出佣金高于薪金60%的雇员select * from emp where comm>sal*^--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);--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 emp--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 where ename=upper('smith'));--3、列出所有雇员的姓名及其直接上级的姓名select , from emp e,emp m where =(+);--4、列出入职日期早于其直接上级的所有雇员select ename from emp e where hiredate<(select hiredate from emp where empno=;--5、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门select dname,ename from dept d left join emp e on =;--6、列出所有“CLERK”(办事员)的姓名及其部门名称%select ename,dname from emp e left join dept d on = 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 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 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 ,dname,count(ename) from dept d left join emp e on =group by ,dname*--14、列出所有雇员的雇员名称、部门名称和薪金Select ,, from emp e left join dept d on =--15、列出从事同一种工作但属于不同部门的雇员的不同组合Select ,,,,,From emp tba,emp tbbWhere = and <>--16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员Select ,dname,loc,count(empno)<From dept,empWhere =(+)Group by ,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题一、题目要求本题目旨在考察对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开发练习课
《Oracle数据库编程》练习一、选择题 (未标明多选的均为单选题)1.关于Oracle中的实例描述,下列说法正确的是(多选):()A.实例是保存在硬盘上的文件,它不会随着数据库的启动/关闭而存在或消失。
B.实例是内存中的结构,是一种访问数据库的方式。
C.可以用语句Select instance_name FROM v$instance获得实例名。
D.一个实例可以访问多个数据库。
2.关于数据类型Char和Varchar2的描述,下列说法正确的是(多选):()A.Char和varchar2都是字符型数据,Char是变长字符型,Varchar2是定长字符型。
B.某个字段类型为Char(200),那么对于这个字段的任何记录来说,所占的实际长度都为200个字符。
C.某个字段类型为Varchar2(200),那么对于这个字段的任何记录来说,所占的实际长度都为200个字符。
D.对于相同长度的Char和Varchar2类型数据,char的性能通常要比varchar2高。
3.关于对空值的描述,下列说法正确的是:()A.包含空值的任何算术表达式结果都等于空。
B.包含空值的连接字符串|| 等于与空字符串连接,结果还是空值。
C.空值做为判断条件是写法是:判断字段=null。
D.表Emp中有5条记录,empID分别为1,2,3,4,5,那么查询语句Select * from Emp where empID not in (2,3,4,null)的执行后结果是2条记录。
4.已知05年7月25日是星期一,那么函数TO_CHAR(NEXT_DAY(TO_DATE(’25-JUL-05’,’DD-MON-RR’),’MONDAY’),’DD-Mont h-YYYY’)结果是:()A.25-JULY-2005 B.01-August-2005C.25-JULY-2005 D.26-JULY-20055.如果EMPID所选的值是 60494,下列函数执行后,结果是哪一项:()SELECT DECODE(empid,38475, 'Terminated',60494, 'LOA', 'ACTIVE') FROM EMP;A.60494 B.LOAC.Terminated D.ACTIVE6.查询语句SELECT SUBSTR(‘HelloWorld’,4,5) FROM DUAL;返回结果,正确的是:()A.loWor B.WorldC.lloWo D.lo Wo7.查询语句SELECT ROUND(13.57),ROUND(13.57,1),ROUND(13.57,-1),TRUNC(13.57,-2) FROM DUAL 返回结果,正确的是:()A.13.57,13.6,10,13B.13,13.5,14,0C.14,13.6,10,0D.13.6,13.5,11,138.语句 WHERE SAL BETWEEN 1000 AND 4000 与下列哪个子句等价:()A.WHERE SAL>=1000 AND SAL<=4000B.WHERE SAL>1000 AND SAL<4000C.WHERE SAL>=1000 OR SAL<=4000D.WHERE SAL>=1000 AND SAL <40009.关于对UNION和UNION ALL的描述,下列描述正确的是(多选):()A.UNION操作符返回两个查询结果集的并集,并去掉重复行。
经典_Oracle的sql语句百例训练
经典_Oracle的sql语句百例训练oracle系列《一》:简单sql与单行函数使用scott/tiger用户下的emp表和dept表中顺利完成以下练,表的结构表明如下dept部门表(deptno部门编号/dname部门名称/loc地点)工资=薪金+佣金登入oracle数据库1、sqlplusscott/tiger2、sqlplus/nologsql>connscott/tiger若是使用sys的账号进行登录的话,则使用以下语句sql>conn/assysdba【1】emp表中内容查阅sql>select*fromemp;失效,原因就是没找出该表中,因为该表时scott用户的表中,所以查阅时必须加之scott.emp就可以了【2】显示当前用户sql>showuser【3】查看当前用户的所有表sql>select*fromtab;【4】若想重复继续执行上一条sql语句,则在sqlplus命令行下输出\即可【5】查询一张表的结构,例如dept表sql>descdept【6】在雇员表查阅雇员的编号、姓名、工作sql>selectempno,ename,jobfromemp;【7】可以为列名取别名,在linux下oracle如果英文别名不加上双引号则会变成大写sql>selectempno编号,ename姓名,job工作fromemp;【8】查询所有的工作sql>selectdistinctjobfromemp;工作可能会重复,加之distinct关键字【9】若要求按照以下的格式进行结果输出,如no:7469,name:smith,job:clerksql>select'no:'||empno||',name:'||ename||',job:'||jobfromemp;【10】建议列举每个雇员的姓名及年薪【11】查看每月可以得到奖金的雇员信息【12】建议基本工资大于1500,同时可以申领奖金的雇员信息【13】查询基本工资不大于1500,同时不可以领取奖金的雇员信息【14】查阅在1981年雇用的全部雇员信息,between..and涵盖等同于的情况sql>select*fromempwherehiredatebetween'01-jan-81'and'31-dec-81';【15】oracle对大小敏感,所以查询时名字要区分大小写【16】建议查阅出来雇员编号不是7369、7499的雇员信息sql>select*fromempwhereempnonotin(7369,7499);【17】sql中like语句必须特别注意通配符%和_sql>select*fromempwherehiredatelike'?%';【18】查阅雇员编号不是7369的雇员信息,采用<>或!=sql>select*fromempwhereempno<>7369;【19】要求对雇员的工资由低到高进行排序,升序为默认(asc),降序(desc)sql>select*fromempgroupbysal;【20】查阅出来部门号为10的雇员信息,查阅的信息按照工资从低至高,若工资成正比则按雇佣日期从早到晚排序sql>select*fromempwheredeptno=10groupbysaldesc,hiredateasc;数据库系统中,每个数据库之间区别最小的就是在函数的积极支持上,单行函数就是最简单的函数,单行函数分成1、字符函数:接受字符输入并且返回字符或数值2、数值函数:接受数值输入并返回数值3、日期函数:对日期型数据进行操作4、切换函数:将一种数据初始化为另一种数据类型5、通用型函数:nvl、decode函数字符函数:【1】大小写切换upper和lowersql>selectupper('smith')fromdual;【2】将雇员姓名变为开头字母大写,initcapsql>selectinitcap(ename)fromemp;字符函数中存有相连接函数concat,但不如||不好用,除了字符串处置的一些函数字符串撷取:substr()字符串长度:length()内容替代:replace()sql>selectsubstr('hello',1,3),length('hello'),replace('hello','l','x')fromdual;这里注意的是oracle中字符串截取从0和从1开始都是一样的,谨防面试提问【3】建议表明所有雇员的姓名及姓名的后3个字符sql>selectename,substr(ename,length(ename)-2)fromemp;以上操作显得较为麻烦,substr()函数是可以倒着截取sql>selectename,substr(ename,-3,3)fromemp;数值函数:1、四舍五入:round()2、截断小数位:trunc()3、取余(取模):modsql>selectround(789.536)fromdual;【1】保留2位小数,(如果是-2则对整数进行四舍五入,变为800了)sql>selectround(783.56,2)fromdual;【2】使用mod()函数进行取余操作sql>selectmod(10,3)fromdual;日期函数:1、日期-数字=日期2、日期+数字=日期3、日期-日期=数字(天数)【1】求出当前日期sql>selectsysdatefromdual;oracle提供了以下的日期函数支持:months_between():谋出来给定日期范围的月数add_months():在指定日期上加上指定的月数,求出之后的日期next_day():下一个的今天的日期last_day():谋出来给定日期的最后一天日期【2】求出从雇用日期到今天所有雇员的雇员编号、姓名和月数sql>selectempno,ename,round(months_between(sysdate,hiredate))fromemp;。
oracle数据库sql语句练习
使用scott/tiger用户下的emp表和dept表完成下列练习
1.列出至少有一个员工的所有部门
>select * from dept
>where deptno in
>d.department_name dname, l.city
>FROM employees e, departments d, locations l
>WHERE e.department_id = d.department_id
>AND d.location_id = l.location_id;
>SELECT max(salary),country_id from
>(select salary, department_id, location_id, country_id from
employees natural join departments natural join locations) group by country_id;
worker.hiredate w_hiredate,manager.hiredate m_hiredate
>FROM emp worker,emp manager
>WHERE worker.mgr = manager.empno AND worker.hiredate > manager.hiredate;
>USING(deptno); -- 两个表中相同列的类型必须相同
4.
>SELECT e.ename,d.dname,e.job,e.sal
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
oracle练习-SQL使用scott用户,密码为tiger登录数据库orcl,数据库中有一个表,表名为emp,具体信息如下:emp职工表;表中有如下列:empno(职工编号)、ename(职工姓名)、job(岗位)、MGR(主管的职工编号)、hiredate(入职日期)、sal(薪水)、comm(津贴)、deptno(部门编号)练习一:1.查询emp(雇员)整个表内容;select * from emp;2.只查询emp表中的job和deptno两列信息;select job,deptno from emp;3.查询emp表中数据,并给列取中文别名;select job "工作" ,deptno "部门编号" from emp;4.将姓名和薪水两列连接起来显示“xxx的薪水是多少”这样的信息;select ename||'薪水是'||sal from emp;5.查询岗位为"CLERK"的职工信息;select * from emp where job='CLERK';6.查询部门编号不是10的职工信息;select * from emp where deptno!='10';7.查询comm为空值的职工信息;select * from emp where comm is null;8.查询职工姓名中带有A的职工信息;select * from emp where ename like '%A%';9.查询职工姓名中倒数第二个字符为E的职工信息;select * from emp where ename like '%E_';10.查询职工姓名中带有L和E的职工信息,并且姓名中L在前,E在后;要求:只查询出职工编号,职工姓名,薪水和部门编号这四列,并且给部门编号列取中文别名;(扩展练习)select empno"职工编号",ename"职工姓名",sal"薪水",deptno"部门编号" from emp;11.查询职工姓名中带有L和E的职工信息,并且姓名中L在前,E在后,且要求姓名第三位是L;select * from emp where ename like '__LE%'练习2:1.查询部门编号为30,MGR主管编号为7698的员工信息;select * from emp where deptno='30' and mgr='7698';2.查询部门编号为10,或者job为CLERK的员工信息select * from emp where deptno='10' or job='CLERK';3.查询sal大于等于900,小于3000,并且部门编号为10、20的职工信息;select * from emp where sal>=900 and sal<3000 or deptno='10'and deptno=20';4.查询mgr主管编号不是7698和7788,或者job岗位为CLERK 的职工信息,查询结果并且先按sal薪水降序排列,再按empno职工编号升序排列(扩展练习)select * from emp where not(mgr='7698' or mgr='7798') or job='CLERK' order by sal desc,empno asc;5.将下面SQL分别执行,能得出什么结论?(扩展练习)select * from emp where deptno='30' and mgr='7698' or job='CLERK';select * from emp where job='CLERK' or deptno='30' and mgr='7698';select * from emp where deptno='30' or mgr='7698' and job='CLERK';练习3:1.往emp表里插入一条雇员信息,雇员编号为4位,第一位为按组号取,其他三位组内讨论决定,hiredate取当前系统值,DEPTNO 部门编号取值为10、20、30当中的一个,其他字段自行决定;不提交2.将deptno取值为10的职工薪水翻倍,并且ename在原来取值的基础上拼接上TEST;不提交,设置一个保存点,保存点名字以自己的名字命名3.删除刚刚插入的的职工信息;不提交4.回滚到保存点;5.提交,最后数据会变成什么样?练习4:两个表定义如下:(如果已经有该表,则将该表删除掉再重新创建)---省份表,省份id和省份名称;create table province(pro_id varchar2(10),pro_name varchar2(30),primary key(pro_id));--公民信息表,身份证id,姓名,年龄,城市,性别,手机号,学历。
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 sql数据库基础练习题
4.查询出雇员表中所有员工的姓名;雇佣日期;和工资调整日期(工作6个月后的第一个星期一)。其格式要求是类似于:“1981-09-23”。
5.
查出每个员工的名字(ename)、雇佣日期到现在的日期间隔的月数(要求为整数),该列命名为MONTHS_WORKED,并以该列的降序排序
按照工作类型分类查出每种工作的名称和其员工的最高最低平均的工资工资的总和这些数值都用四舍五入进行处理
第一、二章
1,解锁scott用户,并设置密码为tiger
2,连接scott用户,并显示有多少表
3,写一个查询显示emp表的所有内容
第三章
1.写一个查询,选择出当前的日期。
2.查询出雇员表(emp)表中的雇员号、姓名、新的薪水(是原先薪水的1.25倍),并将该列标记为new salary。将该脚本保存到p3q2.sql中。
删除emp表中部门号为20的所有雇员信息,看能够成功?
4.以DBA用户,创建用户temp2,密码为temp2,并授予会话创建权限:CREATE SESSION
5.以DBA用户,创建角色temp_role
6.以scott用户登录,将查询scott的dept表的权限授权给temp_role
6.将角色temp_role授给用户temp和temp2
4.在EMPLOYEE表中的deptno列上创建一个非唯一索引deptno_idx。
第十四章
1.使用DBA账户创建一个账号为temp,密码为temp用户,并授予会话创建权限:CREATE SESSION
2.以SCOTT用户登录,将查询Scott用户的emp表的权限授权给temp用户
3.使用temp用户登录。查询emp表中部门号为20的所有雇员信息,看能够成功?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle sql练习题
Oracle SQL练习题
在数据库管理和开发中,SQL(Structured Query Language)是一种标准化的用于管理和操作关系数据库的语言。
对于想要提升自己的SQL技能的数据库开发人员和管理员来说,练习题是一个非常有效的学习方法。
本文将介绍一些Oracle SQL练习题,帮助读者巩固和提高他们的SQL技能。
1. 查询员工表中的所有员工信息。
```sql
SELECT * FROM employees;
```
2. 查询员工表中的所有员工的姓名和工资。
```sql
SELECT first_name, last_name, salary FROM employees;
```
3. 查询员工表中工资大于5000的员工信息。
```sql
SELECT * FROM employees WHERE salary > 5000;
```
4. 查询员工表中工资大于5000并且职务是经理的员工信息。
```sql
SELECT * FROM employees WHERE salary > 5000 AND job_id = 'MANAGER'; ```
5. 查询员工表中按照工资降序排列的前5个员工信息。
```sql
SELECT * FROM employees ORDER BY salary DESC FETCH FIRST 5 ROWS ONLY; ```
6. 查询员工表中每个职务的员工数量。
```sql
SELECT job_id, COUNT(*) FROM employees GROUP BY job_id;
```
7. 查询员工表中每个部门的平均工资。
```sql
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id; ```
8. 查询员工表中工资排名前10的员工信息。
```sql
SELECT * FROM (
SELECT *, RANK() OVER (ORDER BY salary DESC) AS rank FROM employees
) WHERE rank <= 10;
```
9. 查询员工表中工资比其上级工资高的员工信息。
```sql
SELECT e1.* FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.employee_id
WHERE e1.salary > e2.salary;
```
10. 查询员工表中每个部门的员工数量和平均工资。
```sql
SELECT d.department_name, COUNT(e.employee_id) AS employee_count,
AVG(e.salary) AS average_salary
FROM departments d LEFT JOIN employees e ON d.department_id =
e.department_id
GROUP BY d.department_name;
```
通过完成以上练习题,读者可以巩固和提高自己的Oracle SQL技能。
这些练习
题涵盖了SQL查询、条件过滤、排序、聚合函数和表连接等常见的SQL操作。
通过不断地练习和实践,读者可以逐渐掌握SQL的各种技巧和用法,为数据库
管理和开发工作打下坚实的基础。
总结
本文介绍了一些Oracle SQL练习题,帮助读者提升SQL技能。
通过完成这些练习题,读者可以巩固和扩展自己的SQL知识,掌握SQL查询、条件过滤、排序、聚合函数和表连接等常见的操作。
SQL是数据库管理和开发中非常重要的一项
技能,通过不断地练习和实践,读者可以逐渐成为熟练的SQL开发人员或管理员。