oracle_sql单行函数练习(含答案)

合集下载

Oracle经典练习题及标准答案

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练习及答案

oracle练习及答案

oracle练习及答案测试⼀1.SQL*PLUS命令可以控制数据库(no)2.下⾯的语句是否可以执⾏成功(yes)select last_name , job_id , salary as salfrom employees;3.下⾯的语句是否可以执⾏成功(yes)select * from employees;4.找出下⾯语句中的错误select employee_id , last_namesal * 12 ANNUAL SALARYfrom employees;列于列之间未⽤逗号分隔别名应⽤引号括起来5.显⽰表departments的结构,并查询其中的全部数据desc departmentsselect * from departments;6.显⽰出表employees中的全部job_id(不能重复)select distinct job_idfrom employees;7.显⽰出表employees的全部列,各个列之间⽤逗号连接,列头显⽰成OUT_PUTselect EMPLOYEE_ID||','|| FIRST_NAME||','||LAST_NAME||','||EMAIL||','||PHONE_NUMBER||','||HIRE_DATE||','||JOB_ID||','||SALARY||','||COMMISSION_PCT||','||MANAGER_ID||','|| DEPARTMENT_ID as "OUT_PUT" from employees;测试⼆1.查询⼯资⼤于12000的员⼯姓名和⼯资SELECT FIRST_NAME, salaryFROM employeesWHERE salary > 12000;2.查询员⼯号为176的员⼯的姓名和部门号SELECT FIRST_NAME, department_idFROM employeesWHERE employee_id = 176;3.选择⼯资不在5000到12000的员⼯的姓名和⼯资SELECT FIRST_NAME, salaryFROM employeesWHERE salary NOT BETWEEN 5000 AND 12000;4.选择雇⽤时间在1998-02-01到1998-05-01之间的员⼯姓名,job_id和雇⽤时间SELECT FIRST_NAME, job_id, hire_dateFROM employeesWHERE hire_date BETWEEN '01-2⽉-98' AND '01-5⽉-98';5.选择在20和50号部门⼯作的员⼯姓名和部门号SELECT FIRST_NAME, department_idFROM employeesWHERE department_id IN (20, 50);6.选择在1994年雇⽤的员⼯的姓名和雇⽤时间SELECT FIRST_NAME, hire_dateFROM employeesWHERE hire_date LIKE '%94';7.选择公司中没有管理者的员⼯姓名及job_idSELECT FIRST_NAME, job_idFROM employeesWHERE manager_id IS NULL;8.选择公司中有奖⾦的员⼯姓名,⼯资和奖⾦SELECT FIRST_NAME, salary, commission_pctFROM employeesWHERE commission_pct IS NOT NULL;9.选择员⼯姓名的第三个字母是a的员⼯姓名SELECT FIRST_NAMEFROM employeesWHERE FIRST_NAME LIKE '__a%';10.选择姓名中有字母a和e的员⼯姓名SELECT FIRST_NAMEFROM employeesWHERE (FIRST_NAME LIKE '%e%a%' OR FIRST_NAME LIKE '%a%e%')测试三1.显⽰系统时间Select sysdate "Date" from dual2.查询员⼯号,姓名,⼯资,以及⼯资提⾼百分之20%后的结果(new salary)select empno,ename,sal, round(sal*1.20,0) as“new salary” from emp;3.将员⼯的姓名按⾸字母排序,并写出姓名的长度(length)select ename "Name" ,length(ename) "Length" from emp order by substr(ename,1,1);4.查询各员⼯的姓名,并显⽰出各员⼯在公司⼯作的⽉份数(worked_month)。

oracle sql练习题

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练习题及答案createtabletudent(novarchar2(10)primarykey,namevarchar2(20),agenumber(2),e某varchar2(5));createtableteacher(tnovarchar2(10)primarykey,tnamevarchar2(20));createtablecoure(cnovarchar2(10),cnamevarchar2(20),tnovarcha r2(20),contraintpk_coureprimarykey(cno,tno));createtablec(novarchar2(10),cnovarchar2(10),corenumber(4,2), contraintpk_cprimarykey(no,cno));/某某某某某某某初始化学生表的数据某某某某某某//某某某某某某某某某某某某某某某初始化课程表某某某某某某某某某某某某某某某某某某某某某某某某某某某某/inertintocourevalue('c001','J2SE','t002');inertintocourevalue(' c002','JavaWeb','t002');inertintocourevalue('c003','SSH','t001') ;inertintocourevalue('c004','Oracle','t001');inertintocourevalue('c005','SQLSERVER2005','t003');inertinto courevalue('c006','C#','t003');练习:注意:以下练习中的数据是根据初始化到数据库中的数据来写的SQL 语句,请大家务必注意。

oracle sql 试题及答案

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、表说明: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试题及答案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); ```。

oralce题库及答案

oralce题库及答案

一、选择题1.当你执行以下查询语句:SELECT empno,ename FROM emp WHERE empno =7782 OR empno =7876; 在WHERE 语句中,以下哪个操作符能够取代OR?A. INB. BETWEEN ……C. LIKED. <=E. >=2. 以下哪行有错?(1) SELECT deptno(2) FROM emp(3) GROUP BY deptno(4) HAVING COUNT(deptno)=(5) (SELECT max(count(deptno))(6) FROM emp(7) GROUP BY deptno);A. Line 3B. Line 4C. Line 5D. Line 7E. 都没错.3. 以下哪个命令能够被用来从表 STATE中 drop 列 UPDATE_DT ?A. ALTER TABLE STATE DROP COLUMN UPDATE_DT;B. ALTER TABLE STATE REMOVE COLUMN UPDATE_DT;C. DROP COLUMN UPDATE_DT FROM STATE;D. 你不能从那个表中DROP该列.数据概念语言是用于()的方式。

〔选择一项〕确保数据的准确性B、概念和修改数据结构C、查看数据D、删除和更新数据五、执行下面的语句:select ,from employees e, deptment dwhere (+) = ;会显示什么样的结果?A. 显示dept表的全数信息,没有对应员工以null代替B. 显示emp表的全数信息,没有对应部门以null代替C. 报错D. 语法正确,但可不能运行6、emp表结构如下:empno number(9,3)ename varchar2(10)sal number (9,3)mgr (4)什么命令能够让你添加loc列到列sal后:()A. alter table emp add column3( loc varchar2(20));B. alter table emp modify after column3 ( loc varchar2(20));C. alter table add ( sal ) column3 ( loc varchar2( 20));D. 无法指定新列显现的位置7. beginfor I in 1..10 loopif I = 3 or I = 9 then null ;else insert into ord values (I);end if ;end loop ;end ;多少行数据insert到了ord表?()A. 3B. 4C. 8D. 9E. 18. 下面哪个 like 命令会返回名字为HOTKA 的行?ename like ‘_HOT%'ename like ‘H_T%'ename like ‘%TKA_'ename like ‘%TOK%'9. 在Oracle的SQL PLUS中执行DML语句后,没有提交便正常退出后,事务将:( )A.自动回滚B.自动提交C.报错警告D.提示是不是保留11、Oracle启动的初始化参数文件搜寻顺序是:A.B.C.D.答案:从C到D到A12、显示系统时刻:答案:select sysdate from dual;13、执行下面的语句:select ,from employees e, deptment dwhere (+) = ;会显示什么样的结果?A. 显示dept表的全数信息,没有对应员工以null代替B. 显示emp表的全数信息,没有对应部门以null代替C. 报错D. 语法正确,但可不能运行1六、create table ord( ordid number (3) constraint ord_v_pk primary key,#orderdate date,ship4date date ,3item_id number (7) constraint it_v not null) ;上面的语句,哪两行有错误?a. 1b. 2c. 3d. 4e. 5要以自身的模式创建私有同义词,用户必需拥有()系统权限。

oracle-sql入门练习及答案

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语句练习题含答案(二)

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 one.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,dname14、列出所有雇员的雇员名称、部门名称和薪金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.deptnoFrom emp tba,emp tbbWhere tba.job=tbb.job and tba.deptno<>tbb.deptno16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员Select dept.deptno,dname,loc,count(empno)From dept,empWhere dept.deptno=emp.deptno(+)Group by dept.deptno,dname,loc17、列出各种类别工作的最低工资Select min(sal) from emp group by job18、列出各个部门的MANAGER(经理)的最低薪金Select deptno,min(sal) from emp where job=upper(‘manager’) group by deptno19、列出按年薪排序的所有雇员的年薪select (sal+nvl(comm,0))*12 as avn from emp order by avn20、列出薪金水平处于第四位的雇员Select * from (Select ename,sal, rank() over (order by sal desc) as grade from emp) where grade=4。

oracle_sql单行函数练习(含答案)

oracle_sql单行函数练习(含答案)

oracle_sql单行函数练习(含答案)整理 2012-12-3Oracle单行函数的实例练习,基于Oracle自带数据库,用户名分别为hr(主要)和scott。

基本上都做出来了,但还有一道关于人民币转数字的还没有做出来,有知道的留言下哦,其他地方有错误的请指正。

Sql代码1./*1、将字符串'abc' 以10位长度输出,不足10位用#补足(分别从左边和右边补足)2.2、将字符串' abc ewr 3245 4 '去除两头空格输出3.3、将字符串'abc 234 abc abc def abc' 中'abc' 替换为'###' 输出4.4、将数字7433453.52638263 四舍五入后输出5.5、将数字743583.345234 中十位数之后数字全部忽略输出6.*/7.8.--1、将字符串'abc' 以10位长度输出,不足10位用#补足(分别从左边和右边补足)9.SELECT lpad('abc',10,'#') FROM dual;10.SELECT rpad('abc',10,'#') FROM dual;11.--2、将字符串' abc ewr 3245 4 '去除两头空格输出12.SELECT trim(' abc ewr 3245 4 ') FROM dual;13.--3、将字符串'abc 234 abc abc def abc' 中'abc' 替换为'###' 输出14.SELECT replace('abc 234 abc abc def abc','abc','###') FROM dual;15.--4、将数字7433453.52638263 四舍五入后输出16.SELECT ROUND(7433453.52638263) FROM dual;17.--5、将数字743583.345234 中十位数之后数字全部忽略输出18.SELECT round(743583.345234,-1) from DUAL;19.20./*21.6、查询hr方案中employees表,将所有员工工资上涨11.173% 后,四舍五入到十位输出22.7、将当前系统时间格式化为'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出23.8、查询hr方案中employees表,将入职时间格式化为'YYYY-MM-DD HH24:MI:SS' 显示24.9、将当前时间加一年后格式化输出显示25.10、两个时间相减后输出26.*/27.28.--6、查询hr方案中employees表,将所有员工工资上涨11.173% 后,四舍五入到十位输出29.SELECT round(salary*(1+0.11173),-1)30.FROM employees;31.32.--7、将当前系统时间格式化为'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出33.SELECT to_char(sysdate,'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS')34.FROM dual;35.--8、查询hr方案中employees表,将入职时间格式化为'YYYY-MM-DD HH24:MI:SS' 显示36.SELECT to_char(hire_date,'YYYY-MM-DD HH24:MI:SS')37.FROM employees;38.--9、将当前时间加一年后格式化输出显示39.SELECT to_char(add_months(sysdate,12),'YYYY-MM-DD')40.from dual;41.42.--10、两个时间相减后输出43.SELECT to_date(2011,'YYYY')-sysdate44.FROM dual;45.46./*47.11、查询hr下employees表中入职时间满10年的员工48.12、查询hr下employees表中2000年后入职的员工49.13、查询hr下employees表中所有98年3月入职的员工50.14、查询hr下employees表中所有在3月入职的人51.15、查询当前时间距离'1998-8-2' 的月数52.*/53.54.--11、查询hr下employees表中入职时间满10年的员工55.SELECT first_name56.FROM employees57.where months_between(sysdate,hire_date) > 10*12;58.59.--12、查询hr下employees表中2000年后入职的员工60.SELECT *61.FROM employees62.where to_char(hire_date,'YYYY') >= '2000' ;63.64.--13、查询hr下employees表中所有98年3月入职的员工65.--这里要注意用的是to_char 来进行日期比较66.SELECT *67.FROM employees68.WHERE to_char(hire_date,'YYYY-MM') = '1998-03';69.70.--14、查询hr下employees表中所有在3月入职的人71.SELECT *72.FROM employees73.WHERE to_char(hire_date,'MM') ='03';74.75.--15、查询当前时间距离'1998-8-2' 的月数76.SELECT MONTHS_BETWEEN(sysdate,to_date('1998-8-2','YYYY-MM-DD'))77.FROM dual;78.79./*80.16、将当前时间减12个月然后输出81.17、查询下一个星期一显示输出82.18、查询一个月的最后一天显示输出83.19、查询hr下employees表中入职时间在下半个月的员工84.20、查询hr下employees表中上半年入职的员工85.*/86.--16、将当前时间减12个月然后输出87.SELECT add_months(sysdate,-12)88.FROM dual;89.90.--17、查询下一个星期一显示输出91.SELECT next_day(sysdate,'星期一')92.FROM dual;93.--18、查询一个月的最后一天显示输出94.SELECT last_day(sysdate)95.FROM dual;96.97.--19、查询hr下employees表中入职时间在下半个月的员工98.SELECT *99.FROM employees100.WHERE to_char(hire_date,'DD') > '15' ;101.102.--20、查询hr下employees表中上半年入职的员工103.SELECT *104.FROM employees105.WHERE to_char(hire_date,'MM') <= '06';106.107.108./*109.21、将数字825398374.3762 格式化成字符串后输出110.22、字符串变数字'RMB825,398,374.38'111.23、查询hr下employees表将员工薪水以'$999,999,999.00' 格式显示112.24、第一个参数是null返回第三个参数,否则返回第二个参数113.SELECT nvl2(234, 42, 142) FROM dual114.25、两个参数相同返回null,否则返回第一个参数115.SELECT nullif('abc','abc') FROM dual116.*/117.--21、将数字825398374.3762 格式化成字符串后输出118.SELECT to_char(825398374.3762)119.from dual;120.121.--22、字符串变数字'RMB825,398,374.38'122.--没有写出来123.124.--23、查询hr下employees表将员工薪水以'$999,999,999.00' 格式显示125.SELECT to_char(salary,'$999,999,999.00')126.FROM employees;127.128.--24、第一个参数是null返回第三个参数,否则返回第二个参数129.SELECT nvl2(commission_pct,commission_pct,0)130.FROM employees;131.132.--25、两个参数相同返回null,否则返回第一个参数133.SELECT nullif('aaa','aaa')134.FROM dual;135.136.SELECT nullif('aaa','bbb')137.FROM dual;138.139./*140.26、查询hr下employees表中frist_name,last_name 长度相同的员工记录141.27、查询hr下employees表中first_name,last_name 首字母相同的员工记录142.29、employees表中如果员工职位是'IT_PROG'加薪10 % ,如果员工职位是'ST_CLEAK '加薪15 % ,如果是'SA_REP' 加薪20 % .143.30、查询hr下employees表中每月支出工资总额(多行函数不能和其他字段一起查询)144.*/145.146.--26、查询hr下employees表中frist_name,last_name 长度相同的员工记录147.SELECT *148.FROM employees149.WHERE length(first_name) = length(last_name);150.151.--27、查询hr下employees表中first_name,last_name 首字母相同的员工记录152.SELECT *153.FROM EMPLOYEES154.WHERE substr(first_name,1,1) = substr(last_name,1,1);155.156.--29、employees表中如果员工职位是'IT_PROG'加薪10 % ,如果员工职位是'ST_CLEAK '加薪15 % ,如果是'SA_REP' 加薪20 % .157.SELECT first_name, job_id,salary, case job_id when 'IT_PROG' then salary*(1+0.1)158.when 'ST_CLEAK' then salary*(1+0.15)159.when 'SA_REP' then salary*(1+0.2) else salary end bonus160.FROM employees ;161.162.--30、查询hr下employees表中每月支出工资总额(多行函数不能和其他字段一起查询)163.SELECT sum(salary) 工资总额164.FROM employees;。

Oracle+SQL+PLSQL练习题带答案

Oracle+SQL+PLSQL练习题带答案

Oracle SQL & PL/SQL练习题(三)本文由java教学网整理,转发请带出处(蓝色为正确选项)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 wheresubstr(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 join dept on emp.deptno = dept.deptno andsubstr(emp.ename, 1, 1) = ‘S’;2.你要对操纵Oracle数据库中的数据。

下列哪个选项表示Oracle中select语句的功能,并且不需要使用子查询?A.可以用select语句改变Oracle中的数据B.可以用select语句删除Oracle中的数据C.可以用select语句和另一个表的内容生成一个表D.可以用select语句对表截断3.Oracle数据库中发出一个查询。

Oracle-SQL练习题

Oracle-SQL练习题

Oracle SQL练习题(2)注:这些查询题目涵盖了各种单行函数的基本查询的技术,请大家认真做,做好了的查询语句之后,有兴趣的同学可以再创建相应的视图和存储过程。

下面的查询练习题是基于Oracle 10g数据库中的scott 用户下的表来进行练习的。

首先给出scott用户中各个表的表结构第一:emp(员工信息表),如图1所示emp表中各个字段的介绍如下:(1)empno:员工编号(2)ename:员工姓名(3)job:职位(4)mgr:上级领导编号(5)hiredate:雇佣日期(6)sal:薪水(7)comm:佣金(8)deptno:部门编号第二:dept(部门信息表),如图2所示dept表中各个字段的介绍如下:(1)deptno:部门编号(2)dname:部门名称(3)loc:部门所在地练习:1.选择部门30中的所有员工?Select ename,deptno from emp where deptno=30;2.列出所有办事员(CLERK)的姓名,编号和部门编号?Select ename,empno,dept.deptno from emp,dept where emp.deptno=dept.deptno and job=’CLERK’;3.找出佣金高于薪金的员工?Select ename from emp where comm.>sal;4.找出佣金高于薪金的60%的员工?Select ename from emp where comm.>sal*0.6;5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料?Select * from emp where (deptno=10 and job=’MANAGER’) or (deptno=20 and job=’CLERK’);6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于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;7.找出收取佣金的员工的不同工作?Select distinct job from emp where comm. Is not null;8.找出不收取佣金或收取的佣金低于100的员工?Select ename,comm. From emp where comm.<100 or comm is null;9.找出各月倒数第3天受雇的所有员工?Select * from emp where last_day(hiredate)-hiredate=2;10.找出早于12年前受雇的员工?Select * from emp where months_between(sysdate,hiredate)/12>=12;11.以首字母大写的方式显示所有员工的姓名?Select initcap(ename) from emp;12.显示正好为5个字符的员工的姓名?Select ename from emp where length(ename)=5;13.显示不带有"R"的员工的姓名?Select ename from emp where ename not like ‘%R%’;14.显示所有员工姓名的前三个字符?Select substr(ename,0,3) from emp;15.显示所有员工的姓名,用a替换所有"A"?Select replace(ename,’A’,’a’) from emp;16.显示满10年服务年限的员工的姓名和受雇日期?17.显示员工的详细资料,按姓名排序?Select * from emp order by ename;18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面?Select ename,hiredate from emp order by hiredate;19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序?Select ename,job,sal from emp order by job desc,sal;20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面?Select ename,to_char(hiredate,’YYYY-MM’) from emp order by to_char(hiredate,’MM’),to_char(hiredate,’YYYY’);21.显示在一个月为30天的情况所有员工的日薪金,忽略余数?22.找出在(任何年份的)2月受聘的所有员工?Select ename,hiredate from emp where to_char(hiredate,’MM’)=2;23.对于每个员工,显示其加入公司的天数?Select ename,round(sysdate,hiredate) from emp;24.显示姓名字段的任何位置包含"A"的所有员工的姓名?Select ename from emp where ename like ‘%A%’;25.以年月日的方式显示所有员工的服务年限?Select ename,to_char(hiredate,’YYYY’)||’年’, to_char(hiredate,’MM’)||’月’, to_char(hiredate,’DD’)||’日’ from emp;26.列出各种工作职位的最低工资,且显示最低工资大于1500的记录Select job,min(sal) from emp group by job having min(sal)>1500;27.列出所有雇员的雇员名称、部门名称和工资Select ename,dname,sal from emp,dept where emp.deptno=dept.deptno;28.列出从事同一种工作但属于不同部门的雇员的员工信息29.列出按年薪排序的所有雇员的年薪年薪=sal*12+comm+bonus??30.列出至少有一个员工的所有部门Select dname from dept where deptno in (select deptno from emp);31.列出薪金比"SMITH"多的所有员工Select ename,sal from emp where sal>(select sal from emp where ename=’SMITH’);32.列出薪金高于公司平均水平的所有员工Select ename,sal from emp where sal>(select avg(sal) from emp);33.列出与“SCOTT”从事相同工作的所有员工Select ename,job from emp where job in (select job from emp where ename=’SMITH’);34.列出某些员工的姓名和薪金,条件是他们的薪金等于部门30中任何一个员工的薪金Select ename,sal from emp where sal in (select sal from emp where deptno=30);35.列出所有员工的姓名及其直接上级的姓名Select a.ename,b.ename from emp a,emp b where a.mgr=b.empno;36.列出各个部门的MANAGER(经理)的最低薪金Select deptno,min(sal) from emp where job='MANAGER' group by deptno;。

OraclePLSQL测试题与答案(绝对经典)

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的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;。

ora06-SQL单行函数

ora06-SQL单行函数
11
select ename,hiredate,add_months(hiredate,20*12) "20周年" from emp where deptno=20;
6.3日期时间函数
使用extract函数 用于从日期时间值中摘取需要的信息 select extract(month from sysdate) current_month from dual; 使用to_yminterval函数 select ename,hiredate+to_yminterval('10-5') from emp where deptno=30; 使用to_dsinterval函数 select sysdate,sysdate+to_dsinterval('10 10:00:00') new_date from dual;
第六章 SQL单行函数
1
本章目标
学会使用数字函数round、trunc和mod,并了解其他数字函 数的作用 学会使用字符函数upper、lower、initcap、substr、concat、 instr、lpad、rpad并了解其他字符函数的作用 学会使用日期函数months_between、next_day、last_day、 round和trunc、add_months,并了解其他日期函数的作用 学会使用转换函数to_char、to_date和to_number,并了解 其他转换函数的作用 学会使用函数nvl、nvl2、decode
NUMBER DATE VARCHAR2 or CHAR VARCHAR2 or CHAR
DATE
VARCHAR2 VARCHAR2 NUMBER DATE

oracle plsql考试试卷

oracle plsql考试试卷

Oracle SQL&PL/SQL Test一、选择题(45 * 2)1.用下列代码块回答问题:SQL> select ______(-45) as output from dual;OUTPUT-------45下列哪个单行函数无法产生这个输出?A.abs() B.ceil() C.floor() D.round()2.用下列代码回答问题:Evaluate the set of SQL statements:CREATE TABLE dept(deptno NUMBER(2),dname VARCNAR2(14),loc VARCNAR2(13));ROLLBACK;DESCRIBE DEPTWhat is true about the set?哪个语句是正确的?A. The DESCRIBE DEPT statement displays the structure of the DEPT table.B. The ROLLBACK statement frees the storage space occupies by the DEPT table.C. The DESCRIBE DEPT statement returns an error ORA-04043: object DEPT does not exist.D. The DESCRIBE DEPT statement displays the structure of the DEPT table only ifthere is a COMMIT statement introduced before the ROLLBACK statement.3.用下列代码回答问题:Examine the structure of the EMPLOYEES and DEPARTMENTS tables:检查如下表结构EMPLOYEESColumn name Data type RemarksEMPLOYEE_ID NUMBER NOT NULL, Primary KeyEMP_NAME VARCHAR2 (30)JOB_ID VARCHAR2 (20)SALARY NUMBERMGR_ID NUMBER References EMPLOYEE_ID COLUMNDEPARTMENT ID NUMBER Foreign key to DEPARTMENT IDcolumn of the DEPARTMENTS tableDEPARTMENTSColumn name Data type RemarksDEPARTMENT_ID NUMBER NOT NULL, Primary KeyDEPARTMENT_NAME VARCHAR2(30)MGR_ID NUMBER References MGR_ID column of theEMPLOYEES tableEvaluate this SQL statement:SELECT employee_id, e.department_id, department_name,salaryFROM employees e, departments dWHERE e.department_id = d.department_id;Which SQL statement is equivalent to the above SQL statement?一下哪个语句和上面的语句执行结果相同?A. SELECT employee_id, department_id, department_name,salaryFROM employeesWHERE department_id IN (SELECT department_idFROM departments);B. SELECT employee_id, department_id, department_name,salaryFROM employeesNATURAL JOIN departments;C. SELECT employee_id, d.department_id, department_name,salaryFROM employees eJOIN departments dON e.department_id = d.department_id;D. SELECT employee_id, department_id, department_name,SalaryFROM employeesJOIN departmentsUSING (e.department_id, d.department_id);4.运行下列哪个查询时会产生错误?A.select deptno, job, sum(sal) from emp group by job, deptno;B.select sum(sal), deptno, job from emp group by job, deptno;C.select deptno, job, sum(sal) from emp;D.select deptno, sum(sal), job from emp group by job, deptno;5.检查下列SQL的输出SQL> select a.deptno,a.job,b.loc,sum(a.sal)2 from emp a,dept b3 where a.deptno = b.deptno4 group by a.deptno,a.job,b.loc5 order by sum(a.sal);这个查询结果将以哪个列的顺序输出?A.DEPTON B.A.JOB C.B.LOC D.SUM(A.SAL)6.要查询的PROFITS表存储公司不同地区、产品类型和季度的利润信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

oracle_sql单行函数练习(含答案)整理 2012-12-3Oracle单行函数的实例练习,基于Oracle自带数据库,用户名分别为hr(主要)和scott。

基本上都做出来了,但还有一道关于人民币转数字的还没有做出来,有知道的留言下哦,其他地方有错误的请指正。

Sql代码1./*1、将字符串'abc' 以10位长度输出,不足10位用#补足(分别从左边和右边补足)2.2、将字符串' abc ewr 3245 4 '去除两头空格输出3.3、将字符串'abc 234 abc abc def abc' 中'abc' 替换为'###' 输出4.4、将数字7433453.52638263 四舍五入后输出5.5、将数字743583.345234 中十位数之后数字全部忽略输出6.*/7.8.--1、将字符串'abc' 以10位长度输出,不足10位用#补足(分别从左边和右边补足)9.SELECT lpad('abc',10,'#') FROM dual;10.SELECT rpad('abc',10,'#') FROM dual;11.--2、将字符串' abc ewr 3245 4 '去除两头空格输出12.SELECT trim(' abc ewr 3245 4 ') FROM dual;13.--3、将字符串'abc 234 abc abc def abc' 中'abc' 替换为'###' 输出14.SELECT replace('abc 234 abc abc def abc','abc','###') FROM dual;15.--4、将数字7433453.52638263 四舍五入后输出16.SELECT ROUND(7433453.52638263) FROM dual;17.--5、将数字743583.345234 中十位数之后数字全部忽略输出18.SELECT round(743583.345234,-1) from DUAL;19.20./*21.6、查询hr方案中employees表,将所有员工工资上涨11.173% 后,四舍五入到十位输出22.7、将当前系统时间格式化为'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出23.8、查询hr方案中employees表,将入职时间格式化为'YYYY-MM-DD HH24:MI:SS' 显示24.9、将当前时间加一年后格式化输出显示25.10、两个时间相减后输出26.*/27.28.--6、查询hr方案中employees表,将所有员工工资上涨11.173% 后,四舍五入到十位输出29.SELECT round(salary*(1+0.11173),-1)30.FROM employees;31.32.--7、将当前系统时间格式化为'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS'输出33.SELECT to_char(sysdate,'YEAR MONTH DY DAY YYYY-MM-DD HH24:MI:SS')34.FROM dual;35.--8、查询hr方案中employees表,将入职时间格式化为'YYYY-MM-DD HH24:MI:SS' 显示36.SELECT to_char(hire_date,'YYYY-MM-DD HH24:MI:SS')37.FROM employees;38.--9、将当前时间加一年后格式化输出显示39.SELECT to_char(add_months(sysdate,12),'YYYY-MM-DD')40.from dual;41.42.--10、两个时间相减后输出43.SELECT to_date(2011,'YYYY')-sysdate44.FROM dual;45.46./*47.11、查询hr下employees表中入职时间满10年的员工48.12、查询hr下employees表中2000年后入职的员工49.13、查询hr下employees表中所有98年3月入职的员工50.14、查询hr下employees表中所有在3月入职的人51.15、查询当前时间距离'1998-8-2' 的月数52.*/53.54.--11、查询hr下employees表中入职时间满10年的员工55.SELECT first_name56.FROM employees57.where months_between(sysdate,hire_date) > 10*12;58.59.--12、查询hr下employees表中2000年后入职的员工60.SELECT *61.FROM employees62.where to_char(hire_date,'YYYY') >= '2000' ;63.64.--13、查询hr下employees表中所有98年3月入职的员工65.--这里要注意用的是to_char 来进行日期比较66.SELECT *67.FROM employees68.WHERE to_char(hire_date,'YYYY-MM') = '1998-03';69.70.--14、查询hr下employees表中所有在3月入职的人71.SELECT *72.FROM employees73.WHERE to_char(hire_date,'MM') ='03';74.75.--15、查询当前时间距离'1998-8-2' 的月数76.SELECT MONTHS_BETWEEN(sysdate,to_date('1998-8-2','YYYY-MM-DD'))77.FROM dual;78.79./*80.16、将当前时间减12个月然后输出81.17、查询下一个星期一显示输出82.18、查询一个月的最后一天显示输出83.19、查询hr下employees表中入职时间在下半个月的员工84.20、查询hr下employees表中上半年入职的员工85.*/86.--16、将当前时间减12个月然后输出87.SELECT add_months(sysdate,-12)88.FROM dual;89.90.--17、查询下一个星期一显示输出91.SELECT next_day(sysdate,'星期一')92.FROM dual;93.--18、查询一个月的最后一天显示输出94.SELECT last_day(sysdate)95.FROM dual;96.97.--19、查询hr下employees表中入职时间在下半个月的员工98.SELECT *99.FROM employees100.WHERE to_char(hire_date,'DD') > '15' ;101.102.--20、查询hr下employees表中上半年入职的员工103.SELECT *104.FROM employees105.WHERE to_char(hire_date,'MM') <= '06';106.107.108./*109.21、将数字825398374.3762 格式化成字符串后输出110.22、字符串变数字'RMB825,398,374.38'111.23、查询hr下employees表将员工薪水以'$999,999,999.00' 格式显示112.24、第一个参数是null返回第三个参数,否则返回第二个参数113.SELECT nvl2(234, 42, 142) FROM dual114.25、两个参数相同返回null,否则返回第一个参数115.SELECT nullif('abc','abc') FROM dual116.*/117.--21、将数字825398374.3762 格式化成字符串后输出118.SELECT to_char(825398374.3762)119.from dual;120.121.--22、字符串变数字'RMB825,398,374.38'122.--没有写出来123.124.--23、查询hr下employees表将员工薪水以'$999,999,999.00' 格式显示125.SELECT to_char(salary,'$999,999,999.00')126.FROM employees;127.128.--24、第一个参数是null返回第三个参数,否则返回第二个参数129.SELECT nvl2(commission_pct,commission_pct,0)130.FROM employees;131.132.--25、两个参数相同返回null,否则返回第一个参数133.SELECT nullif('aaa','aaa')134.FROM dual;135.136.SELECT nullif('aaa','bbb')137.FROM dual;138.139./*140.26、查询hr下employees表中frist_name,last_name 长度相同的员工记录141.27、查询hr下employees表中first_name,last_name 首字母相同的员工记录142.29、employees表中如果员工职位是'IT_PROG'加薪10 % ,如果员工职位是'ST_CLEAK '加薪15 % ,如果是'SA_REP' 加薪20 % .143.30、查询hr下employees表中每月支出工资总额(多行函数不能和其他字段一起查询)144.*/145.146.--26、查询hr下employees表中frist_name,last_name 长度相同的员工记录147.SELECT *148.FROM employees149.WHERE length(first_name) = length(last_name);150.151.--27、查询hr下employees表中first_name,last_name 首字母相同的员工记录152.SELECT *153.FROM EMPLOYEES154.WHERE substr(first_name,1,1) = substr(last_name,1,1);155.156.--29、employees表中如果员工职位是'IT_PROG'加薪10 % ,如果员工职位是'ST_CLEAK '加薪15 % ,如果是'SA_REP' 加薪20 % .157.SELECT first_name, job_id,salary, case job_id when 'IT_PROG' then salary*(1+0.1)158.when 'ST_CLEAK' then salary*(1+0.15)159.when 'SA_REP' then salary*(1+0.2) else salary end bonus160.FROM employees ;161.162.--30、查询hr下employees表中每月支出工资总额(多行函数不能和其他字段一起查询)163.SELECT sum(salary) 工资总额164.FROM employees;。

相关文档
最新文档