Oracle_sql面试题及答案整理
- 格式:pdf
- 大小:183.62 KB
- 文档页数:7
oracle常见sql⾯试题,ORACLEPLSQL超经典⾯试题《ORACLEPLSQL超经典⾯试题》由会员分享,可在线阅读,更多相关《ORACLEPLSQL超经典⾯试题(7页珍藏版)》请在⼈⼈⽂库⽹上搜索。
1、北京科蓝 PL/SQL 编程摸底考试(⼆)⽇期(date):2010年11⽉1⽇, (Nov. 1, 2010)考⽣姓名(Last Name, First Name):黄兴超试题⼀:在报表中增加描述。
Exam 1. Add description for insurance IDs on the report在Patient 表中存有病⼈的ID,和他所购买的保险的ID(代号)在Insurance 表中存有保险的ID(代号)及其描述(description)Patient table: Patient ID and Insurance ID (Ins_ID_1,Ins_ID_2, Ins_ID。
2、_3)Insurance table: Insurance ID and theirdescription.PatientInsurancePat_IDIns_ID_1Ins_ID_2Ins_ID_3Ins_IDDescription151Medicare282BlueCross34123OXFORD41141st Health Ins510715United Healthcare6576Travellers73727Medicaid84958CapitalHealthplan939MVP Healthcare10110Harvard Healthplan⽤Join的⽅式来产⽣如下的报表。
3、,每个Ins ID后⾯加上相应的描述。
如InsID不能在Insurance 表中发现,即⽤空格表⽰:(如ID 11 和12)Use “Join” to generate a report, each insurance ID followed by its description, if the insurance ID not in insurance table , leave blank.Pat_IDInsID1Desc-1InsID2Desc-2InsID3Desc-315United Healthcare28Capital Healthplan341st Health Ins124。
oracle面试题sql语句当面试官问到关于Oracle SQL的问题时,通常会涉及到基本的查询、聚合函数、连接、子查询、索引等方面的知识。
我会从这些方面给出一些可能被问到的问题和相应的SQL语句作为回答。
1. 基本查询。
基本查询是SQL中最基本的操作,可能会涉及到SELECT语句以及WHERE子句的使用。
例如:sql.SELECT FROM employees;SELECT employee_id, first_name, last_name FROM employees WHERE department_id = 20;2. 聚合函数。
面试官可能会问到如何使用聚合函数来对数据进行统计,比如求和、平均值等。
例如:sql.SELECT AVG(salary) FROM employees;SELECT MAX(salary) FROM employees WHERE department_id = 30;3. 连接。
连接是SQL中非常重要的一部分,可能会涉及到INNER JOIN、LEFT JOIN、RIGHT JOIN等。
例如:sql.SELECT e.first_name, st_name, d.department_name.FROM employees e.JOIN departments d ON e.department_id = d.department_id;4. 子查询。
子查询也是SQL中常见的操作,可以用来进行嵌套查询或者作为临时表使用。
例如:sql.SELECT employee_id, first_name, last_name.FROM employees.WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 1700);5. 索引。
面试官可能会问到如何创建索引以及索引对查询的影响。
sql经典⾯试题——oracle1、⽤⼀条SQL 语句查询出每门课都⼤于80 分的学⽣姓名name kecheng fenshu张三语⽂ 81张三数学 75李四语⽂ 76李四数学 90王五语⽂ 81王五数学 100王五英语 90A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)select name from table group by name having min(fenshu)>802、学⽣表如下:⾃动编号学号姓名课程编号课程名称分数1 2005001 张三 0001 数学 692 2005002 李四 0001 数学 893 2005001 张三 0001 数学 69删除除了⾃动编号不同, 其他都相同的学⽣冗余信息A: delete table where⾃动编号 not in(select min( ⾃动编号) from table group by 学号, 姓名, 课程编号, 课程名称, 分数)3、⾯试题:怎么把这样⼀个表⼉year month amount1991 1 1.11991 2 1.21991 3 1.31991 4 1.41992 1 2.11992 2 2.21992 3 2.31992 4 2.4查成这样⼀个结果year m1 m2 m3 m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4答案⼀、select year,(select amount from aaa m where month=1 and m.year=aaa.year) as m1,(select amount from aaa m where month=2 and m.year=aaa.year) as m2,(select amount from aaa m where month=3 and m.year=aaa.year) as m3,(select amount from aaa m where month=4 and m.year=aaa.year) as m4from aaa group by year5、有⼀张表,⾥⾯有3个字段:语⽂,数学,英语。
Oracle面试题及答案整理1、表:table1(FId,Fclass,Fscore),用最高效最简单的SQL列出各班成绩最高的列表,显示班级,成绩两个字段。
select fclass,max(fscore) from table1 group by fclass,fid2、有一个表table1有两个字段FID,Fno,字都非空,写一个SQL语句列出该表中一个FID对应多个不同的Fno的纪录。
类如:101a1001101a1001102a1002102a1003103a1004104a1005104a1006105a1007105a1007105a1007结果:102a1002102a1003104a1005104a1006select t2.* from table1 t1, table1 t2 where t1.fid = t2.fid and t1.fno <> t2.fno;3、有员工表empinfo(Fempno varchar2(10) not null pk,Fempname varchar2(20) not null,Fage number not null,Fsalary number not null);假如数据量很大约1000万条;写一个你认为最高效的SQL,用一个SQL计算以下四种人:fsalary>9999 and fage > 35fsalary>9999 and fage < 35fsalary <9999 and fage > 35fsalary <9999 and fage < 35每种员工的数量;select sum(case when fsalary>9999 and fage>35 then 1 else 0 end),sum(case when fsalary>9999 and fage<35 then 1 else 0 end),sum(case when fsalary<9999 and fage>35 then 1 else 0 end),sum(case when fsalary<9999 and fage<35 then 1 else 0 end) from empinfo4、表A字段如下month person income月份人员收入要求用一个SQL语句(注意是一个)的处所有人(不区分人员)每个月及上月和下月的总收入要求列表输出为月份当月收入上月收入下月收入MONTHS PERSON INCOME---------- ---------- ----------200807 mantisXF 5000200806 mantisXF2 3500200806 mantisXF3 3000200 805 mantisXF1 2000200805 mantisXF6 2200200804 mantisXF7 1800200803 8mantisXF 4000200802 9mantisXF 4200200802 10mantisXF 3300200801 11mantisXF 4600200809 11mantisXF 680011 rows selectedselect months, max(incomes), max(prev_months), max(next_months)from (select months,incomes,decode(lag(months) over(order by months),to_char(add_months(to_date(months, 'yyyymm'), -1), 'yyyymm'), lag(incomes) over(order by month s), 0) as prev_months, decode(lead(months) over(order by months), to_char(add_months(to_date (months, 'yyyymm'), 1), 'yyyymm'), lead(incomes) over(order by months), 0) as next_months from (select months, sum(income) as incomes from a group by months) aa) aaagroup by months;MONTHS MAX(INCOMES) MAX(PREV_MONTHS) MAX(NEXT_MONTHS)---------- ------------ ---------------- ----------------200801 4600 0 7500200802 7500 4600 4000200803 4000 7500 1800200804 1800 4 000 4200200805 4200 1800 6500200806 6500 4200 5000200807 5000 6500 0200809 6800 0 0Select (Select Month From Table Where Month = To_Char(Sysdate, 'mm')) 月份,(Select Sum(Income) From Table Where Month = To_Char(Sysdate, 'mm')) 当月收入,(Select Sum(Income) From Table Where To_Number(Month) = To_Number(Extract(Month From Sys date)) - 1) 上月收入,(Select Sum(Income) From Table Where To_Number(Month) = To_Number(Extract(Month From Sys date)) + 1) 下月收入From Dual5,表BC1 c22005-01-01 12005-01-01 32005-01-02 5要求的处数据2005-01-01 42005-01-02 5合计9试用一个Sql语句完成。
oracle sql 面试题Oracle是一种常用的关系型数据库管理系统,而SQL(Structured Query Language)是Oracle数据库的查询语言。
在Oracle SQL面试中,常常会涉及各种与SQL相关的问题和知识点。
本文将介绍一些常见的Oracle SQL面试题,并给出详细的解答。
1. 什么是Oracle数据库?Oracle数据库是一种关系型数据库管理系统,由美国Oracle公司开发。
它提供了一个可靠、高性能的数据存储和管理环境,广泛应用于企业级应用程序。
2. 什么是SQL?SQL是结构化查询语言(Structured Query Language)的缩写,是一种用于管理关系型数据库的标准化查询语言。
它可用于插入、删除、更新和查询数据,以及定义和修改数据库结构。
3. Oracle的数据类型有哪些?Oracle支持多种数据类型,包括数值型、字符型、日期型等。
常见的数据类型包括:NUMBER(数字)、VARCHAR2(可变长字符串)、DATE(日期时间)、CLOB(大文本对象)等。
4. 如何创建表?在Oracle中,可以使用CREATE TABLE语句来创建表。
例如,创建一个名为"students"的表,包含"ID"(数值型)、"NAME"(字符型)、"AGE"(数值型)三个字段的语句如下:```CREATE TABLE students (ID NUMBER,NAME VARCHAR2(50),AGE NUMBER);```5. 如何插入数据?在Oracle中,可以使用INSERT INTO语句将数据插入表中。
例如,插入一条学生信息的语句如下:```INSERT INTO students (ID, NAME, AGE) VALUES (1, 'John', 20);```6. 如何查询数据?在Oracle中,可以使用SELECT语句来查询数据。
1 【问题】解释一下sum的作用答:求符合条件的记录某数值字段的和2 【问题】Table1有两个字段,field1 varchar2(10)和field2 number。
请写出向这两个表中插入’test’和100的sql语句。
答:insert into Table1 (field1,field2) values(‘test’,100);请写出一个sql语句,将Table1中的field1字段的值更新成’test111’:答:update Table1 set field1=’test111’; –此为将Table1表中所有记录field1字段的值改为’test111’update Table1 set field1=’test111’ where field2=100; –此为将Table1表中field2字段等于100的记录的field1字段的值改为’test111’请写出一个sql语句,将Table1中的数据全部选出来:答: select field1,field2 from Table1;3 【问题】Delete和truncate的区别是什么?答: Delete删除的记录如不提交可以恢复,此命令不能删除回滚段中的数据truncate删除的记录不能恢复,并可删除回滚段中的数据4 【问题】请解释一下varchar2和char的区别答: char 最大可以容纳2000个字节varchar2最大可以容纳4000个字节,此为可变长字段5 【问题】解释一下group by的作用答: 此关键字的作用是将查询出的符合条件的记录集按某字段列表分组,在此过程中预查出的字段若为字符型,分组后只取最上面的一个,预为数值型将求和6 【问题】Order by有什么作用答: 此关键字的作用是将查询出符合条件的记录集按某字段列表进行排序,默认为升序(Asc),降序为: Desc7 【问题】Union和union all有什么区别答:8 【问题】Months_between的用法是什么答: 是在一个月份的范围内。
oracle sql优化面试题1. 介绍SQL优化的重要性(约200字)在大规模数据处理和复杂查询的背景下,SQL优化在提高性能和效率方面起到至关重要的作用。
通过优化SQL查询语句,我们可以减少数据库的负载,提升查询速度,提高系统的响应能力和用户体验。
SQL优化能够帮助我们减少不必要的计算和IO操作,从而减少系统资源的消耗,提高系统的稳定性和可用性。
因此,了解并掌握SQL优化技巧对于数据库开发和管理人员来说是非常重要的。
2. 查询优化相关的基本概念和知识(约400字)2.1 索引的使用索引是优化查询性能的重要手段之一。
在表中创建适当的索引可以加快查询速度。
需要注意的是,索引的创建需要根据具体的查询需求和数据特征进行选择。
索引字段应该选择在查询中使用频率较高的列,并且避免过多的索引,以免增加维护成本。
2.2 SQL语句的编写与书写风格合理的SQL语句编写和书写风格能够提高查询性能。
应避免使用通配符查询,尽量使用具体的条件进行查询。
同时,避免使用SQL中的函数,尽量使用简单的操作符,减少不必要的计算和转换操作。
2.3 数据库范式设计合理的数据库范式设计可以减少冗余数据,提高数据查询的效率。
通过将数据分解为多个关联的表,可以避免数据重复,从而减少在查询过程中对重复数据的计算和传输。
3. SQL优化常见问题和解决方案(约800字)3.1 查询中的表连接优化当查询需要多个表之间进行连接时,选择合适的连接类型是重要的。
根据数据量和查询结果的大小,可以选择INNER JOIN、LEFT JOIN或者RIGHT JOIN等连接方式。
另外,可以考虑对经常进行连接操作的字段添加索引,加快连接过程。
3.2 子查询的优化子查询在某些情况下可以帮助我们实现复杂的查询逻辑,但是过多的子查询会增加系统的负载和查询时间。
为了优化子查询,可以考虑将子查询转换为连接查询、使用临时表或者使用WITH语句。
3.3 适当使用优化器提示Oracle数据库提供了优化器提示(Hint)功能,可以手动控制查询语句的执行计划。
ORALCE SQL1、关于group by表内容:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2005-05-10 负如果要生成下列结果, 该如何写sql语句?胜负2005-05-09 2 22005-05-10 1 2答案:select time,sum(decode(status,'胜','')) 胜sum(decode(status,'负','')) 负from shengfu_tablegroup by time; //推荐写法,decode效率高的多,以下是常用写法1) select rq,sum(case when shengfu='胜' then 1 else 0 end) as胜,sum(case when shengfu='负' then1 else 0 end) as负from tab3 group by rq2) select N.rq,N. 胜,M. 负from(select rq,count(*) 胜from tab3 where shengfu='胜'group by rq)N inner join(select rq,count(*) 负from tab3 where shengfu='负'group by rq)M on N.rq=M.rq3) select a.rq,a. 胜as胜,b.负as 负from(select rq,count(shengfu) 胜from tab3 where shengfu='胜' group by rq) a,(select rq,count(shengfu) 负from tab3 where shengfu='负' group by rq) bwhere a.rq=b.rq;2.表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B 列大于C列时选择B列否则选择C列。
oracle 基础面试题目以下是一些Oracle基础面试题目:1. Oracle是什么?请简要描述它的主要特点和功能。
2. 在Oracle数据库中,什么是数据字典?数据字典的作用是什么?3. 请解释Oracle中的表空间。
表空间在数据库中的作用是什么?4. 什么是Oracle的序列?请描述序列的主要用途。
5. 什么是Oracle的索引?请描述索引在数据库中的作用。
6. 请解释Oracle中的视图。
视图在数据库中的作用是什么?7. Oracle中的存储过程和函数有什么区别?请简要描述。
8. 请解释Oracle中的触发器。
触发器在数据库中的作用是什么?9. 如何在Oracle中执行数据备份和恢复操作?10. 请解释Oracle中的分区表。
分区表在数据库中的作用是什么?11. 什么是Oracle的并行处理?请描述并行处理在数据库中的作用。
12. Oracle中如何使用游标来处理查询结果?请简要描述。
13. 如何在Oracle中创建和管理用户账户?14. 请解释Oracle中的锁定机制。
锁定机制在数据库中的作用是什么?15. 什么是Oracle的性能优化?如何进行性能优化?16. 请解释Oracle中的PL/SQL语言。
PL/SQL在数据库中的作用是什么?17. 如何使用Oracle的存储过程和函数来提高应用程序的性能?18. 请解释Oracle中的物化视图。
物化视图在数据库中的作用是什么?19. 如何使用Oracle的包来组织和管理PL/SQL代码?20. 请解释Oracle中的分布式数据库。
分布式数据库在数据库中的作用是什么?以上是一些常见的Oracle基础面试题目,涵盖了Oracle的基本概念、功能、使用和管理等方面的内容。
希望对你有帮助。
Oracle的⼀些经典SQL⾯试题实例1:测试数据:create table nba(team varchar2(20),year number(4))SQL> select * from nba;TEAM YEAR-------------------- -----活塞 1990公⽜ 1991公⽜ 1992公⽜ 1993⽕箭 1994⽕箭 1995公⽜ 1996公⽜ 1997公⽜ 1998马刺 1999湖⼈ 2000湖⼈ 2001湖⼈ 2002马刺 2003活塞 2004马刺 2005热⽕ 2006马刺 2007凯尔特⼈ 2008湖⼈ 2009湖⼈ 201021 rows selected请写出⼀条 SQL 语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起⽌时间是多少,结果如下:TEAM BEGIN END---------------公⽜ 1991 1993⽕箭 1994 1995公⽜ 1996 1998湖⼈ 2000 2002湖⼈ 2009 2010求解:SQL> select team, min(t2y), max(t1y)2 from (select t2.team, t2.year as t2y, t1.year as t1y3 from nba t1, nba t24 where t1.team = t2.team5 and t1.year = (t2.year + 1)) t6 group by t.team, (t.t1y - rownum);TEAM MIN(T2Y) MAX(T1Y)-------------------- ---------- ----------公⽜ 1996 1998湖⼈ 2009 2010湖⼈ 2000 2002公⽜ 1991 1993⽕箭 1994 1995分析:这个SQL要做的有两件事:1)求出连续获得冠军的team2)求出起⽌年份关系:根据分析1可知,存在关系team相同的球队(year=year+1),满⾜这个关系的球队即是连续获得冠军的球队。
Oracle⾯试题及答案模块⼀ SQL(DQL)l 基本SQL 查询l 运算符与函数l ⼦查询l 连接查询建表语句emp.sqlPart I(第⼀天)01. 查询员⼯表所有数据, 并说明使⽤*的缺点答:select * from emp;使⽤*的缺点有a) 查询出了不必要的列b) 效率上不如直接指定列名02. 查询职位(JOB)为'PRESIDENT'的员⼯的⼯资答:select * from emp where job = 'PRESIDENT';03. 查询佣⾦(COMM)为0 或为NULL 的员⼯信息答:重点是理解0 与null 的区别select * from emp where comm = 0 or comm is null;04. 查询⼊职⽇期在1981-5-1 到1981-12-31 之间的所有员⼯信息答:通过此题掌握常⽤⽇期函数select * from emp where hiredatebetween to_date('1981-5-1','yyyy-mm-dd') and to_date('1981-12-31','yyyy-mm-dd');05. 查询所有名字长度为4 的员⼯的员⼯编号,姓名答:select * from emp where length(ename) = 4;06. 显⽰10 号部门的所有经理('MANAGER')和20 号部门的所有职员('CLERK')的详细信息答:select * from emp where deptno = 10 and job = 'MANAGER' or deptno = 20 and job ='CLERK';07. 显⽰姓名中没有'L'字的员⼯的详细信息或含有'SM'字的员⼯信息答:考察知识点模糊查询select * from emp where ename not like '%L%' or ename like '%SM%';08. 显⽰各个部门经理('MANAGER')的⼯资答:select sal from emp where job = 'MANAGER';09. 显⽰佣⾦(COMM)收⼊⽐⼯资(SAL)⾼的员⼯的详细信息答:select * from emp where comm > sal;10. 把hiredate 列看做是员⼯的⽣⽇,求本⽉过⽣⽇的员⼯(考察知识点:单⾏函数)答:select * from emp where to_char(hiredate, 'mm') = to_char(sysdate , 'mm');11. 把hiredate 列看做是员⼯的⽣⽇,求下⽉过⽣⽇的员⼯(考察知识点:单⾏函数)答:select * from emp where to_char(hiredate, 'mm') = to_char(add_months(sysdate,1) , 'mm'); 12. 求1982 年⼊职的员⼯(考察知识点:单⾏函数)答:select * from emp where to_char(hiredate,'yyyy') = '1982';13. 求1981 年下半年⼊职的员⼯(考察知识点:单⾏函数)答:select * from emp where hiredatebetween to_date('1981-7-1','yyyy-mm-dd') and to_date('1982-1-1','yyyy-mm-dd') - 1;14. 求1981 年各个⽉⼊职的的员⼯个数(考察知识点:组函数)答:select count(*), to_char(trunc(hiredate,'month'),'yyyy-mm')from emp where to_char(hiredate,'yyyy')='1981'group by trunc(hiredate,'month')order by trunc(hiredate,'month');Part II(第⼆天)01. 查询各个部门的平均⼯资答:考察知识点:分组select deptno,avg(sal) from emp group by deptno;02. 显⽰各种职位的最低⼯资答:考察知识点:分组select job,min(sal) from emp group by job;03. 按照⼊职⽇期由新到旧排列员⼯信息答:考察知识点:排序select * from emp order by hiredate desc;04. 查询员⼯的基本信息,附加其上级的姓名答:考察知识点:⾃连接select e.*, e2.ename from emp e, emp e2 where e.mgr = e2.empno;05. 显⽰⼯资⽐'ALLEN'⾼的所有员⼯的姓名和⼯资答:考察知识点:⼦查询select * from emp where sal > (select sal from emp where ename='ALLEN');分析:当查询结果是⼀⾏⼀列时,可以将此结果看做⼀个值,参与条件⽐较。
oracle sql面试题一、简介Oracle SQL是一种关系型数据库管理系统,广泛应用于企业级应用程序开发中。
在面试中,掌握Oracle SQL的知识和技能是很重要的。
本文将介绍一些常见的Oracle SQL面试题,帮助您进行技能评估和准备面试。
二、基础知识部分1. 什么是Oracle数据库?Oracle数据库是一种关系型数据库管理系统,由Oracle公司开发和维护。
2. 什么是SQL?SQL(Structured Query Language)是一种用于管理关系型数据库的标准化语言,用于执行查询、插入、更新和删除操作等。
3. Oracle数据库的体系结构是什么样的?Oracle数据库的体系结构包括实例(instance)和数据库(database)两部分。
实例负责管理数据库的访问、安全性等,数据库则存储实际的数据。
4. Oracle SQL中常见的数据类型有哪些?Oracle SQL中常见的数据类型包括NUMBER、VARCHAR2、DATE、CLOB等。
5. 如何创建表?使用CREATE TABLE语句可以创建表,例如:```CREATE TABLE employees (employee_id NUMBER,first_name VARCHAR2(50),last_name VARCHAR2(50),hire_date DATE);```6. 如何插入数据?使用INSERT INTO语句可以插入数据,例如:```INSERT INTO employees (employee_id, first_name, last_name, hire_date)VALUES (1, 'John', 'Doe', '2022-01-01');```7. 如何查询数据?使用SELECT语句可以查询数据,例如:```SELECT * FROM employees;```8. 如何更新数据?使用UPDATE语句可以更新数据,例如:```UPDATE employees SET first_name = 'Jane' WHERE employee_id = 1;```9. 如何删除数据?使用DELETE FROM语句可以删除数据,例如:```DELETE FROM employees WHERE employee_id = 1;```三、高级知识部分1. 什么是索引?索引是一种数据结构,用于提高数据库的查询效率。
第1篇第一部分:基础SQL查询1. 如何使用SELECT语句从数据库中查询数据?- 答案:SELECT语句用于从数据库表中查询数据。
基本语法如下:```sqlSELECT column1, column2, ... FROM table_name;```2. 如何使用WHERE子句对查询结果进行过滤?- 答案:WHERE子句用于过滤查询结果,只返回满足特定条件的行。
语法如下: ```sqlSELECT column1, column2, ... FROM table_name WHERE condition;```3. 如何使用ORDER BY子句对查询结果进行排序?- 答案:ORDER BY子句用于对查询结果进行排序。
语法如下:```sqlSELECT column1, column2, ... FROM table_name ORDER BY column1ASC|DESC;```4. 如何使用LIMIT子句限制查询结果的数量?- 答案:LIMIT子句用于限制查询结果的数量。
语法如下:```sqlSELECT column1, column2, ... FROM table_name LIMIT row_count;```5. 如何使用DISTINCT关键字去除查询结果中的重复值?- 答案:DISTINCT关键字用于去除查询结果中的重复值。
语法如下:```sqlSELECT DISTINCT column1, column2, ... FROM table_name;```第二部分:高级SQL查询6. 如何使用JOIN子句进行多表查询?- 答案:JOIN子句用于连接两个或多个表,并返回满足连接条件的行。
常见的JOIN类型包括:- INNER JOIN:返回两个表中匹配的行。
- LEFT JOIN(或LEFT OUTER JOIN):返回左表的所有行,即使右表中没有匹配的行。
- RIGHT JOIN(或RIGHT OUTER JOIN):返回右表的所有行,即使左表中没有匹配的行。
sql面试题及答案sql面试题及答案一1. 简述索引存取的方法的作用和建立索引的原则作用:加快查询速度。
原则:(1) 如果某属性或属性组经常出现在查询条件中,考虑为该属性或属性组建立索引;(2) 如果某个属性常作为最大值和最小值等聚集函数的参数,考虑为该属性建立索引;(3) 如果某属性经常出现在连接操作的连接条件中,考虑为该属性或属性组建立索引;2. 简述数据库的设计过程数据库设计分为五个阶段:需求分析:主要是准确收集用户信息需求和处理需求,并对收集的结果进行整理和分析,形成需求说明。
概念结构设计:对用户需求进行综合、归纳、抽象,形成一个与与具体的DBMS无关概念模型(一般为ER模型)。
逻辑结构设计:将概念结构设计的概念模型转化为某个特定的DBMS所支持的数据模型,建立数据库逻辑模式,并对其进行优化,同时为各种用户和应用设计外模式。
物理结构设计:为设计好的逻辑模型选择物理结构,包括存储结构和存取方法等,建立数据库物理模式。
实施和维护:实施就是使用DLL语言建立数据库模式,将实际数据载入数据库,建立真正的数据库。
维护阶段是对运行中的数据库进行评价、调整和修改。
3. 什么是内存泄漏?答案:一般我们所说的内存泄漏指的是堆内存的泄漏。
堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。
当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete 释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。
4. 什么是基本表?什么是视图?答案:基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。
视图是从一个或几个基本表导出的表。
视图本身不独立存储在数据库中,是一个虚表5. 试述视图的优点(1) 视图能够简化用户的操作(2) 视图使用户能以多种角度看待同一数据;(3) 视图为数据库提供了一定程度的逻辑独立性;(4) 视图能够对机密数据提供安全保护。
题目内容:1. ORACLE用来判断列值是否为空的操作符是____A ==NULLB IS NULLC AS NULLD NULLIS2 分析以下的 SQL命令SELECT i.id_number, m.id_numberFROM inventory i, manufacturer mWHERE i.manufacturer_id = m.id_numberORDER BY inventory.description;如何修改上述命令使其成功执行()A ORDER BY descriptionB ORDER BY i.descriptionC WHERE inventory.manufacturer_id = m.id_numberORDER BY inventory.descriptionD ORDER BY inventory.description;3. 在客户定单表(CUSTOMER)中有一列为单价(PRICE),写一个SELECT命令显示所有单价在500以上的查询语句。
A SELECT * FROM CUSTOMER WHERE PRICE>500;B SELECT * FROM CUSTOMER WHERE PRICE BETWEEN 500 AND *;C SELECT * FROM CUSTOMER WHERE PRICE LIKE ‘%500%’;D SELECT * FROM CUSTOMER WHERE PRICE>=500;4. 分析以下SQL 命令:SELECT priceFROM inventoryWHERE price BETWEEN 1 AND 50AND (price IN(55, 30, 95);命令执行后的输出结果是:()A 55B 30C 95D NULL5. 分析以下的SQL 命令:SELECT manufacturer_idFROM inventoryWHERE manufacturer_id LIKE ‘%N\%P\%O%’ ESCAPE ‘\’;命令执行的返回结果是()A 所有包含’NPO’的纪录B 所有包含’N\P\O’的纪录C 所有包含’N%P%O’的纪录D 所有包含’%N\P\O%’的纪录6. 分析以下的SQL命令:SELECT i.id_number, m.manufacturer_nameFROM inventory i, manufacturer mWHERE i.manufacturer_id(+) = m.id_number;WHERE 子句中的(+)是什么含义?A 将inventory表中不满足条件的记录也查出来B 将i.manufacturer_id+ m.id_numberC将manufacturer表中不满足条件的记录也查出来D 不能这样写,语法错误7. 写一SQL语句实现以下功能,把inventory表中的ORDER_DATE 值‘23-MAY-00′显示成‘01-JAN-00′A SELECT ROUND(order_date, ‘YEAR’) FROM inventory;B SELECT TO_DATE(order_date, ‘DD-MM-YY’) FROM inventory;C SELECT TO_CHAR(order_date, ‘DD-MM-YY’) FROM inventory;D 都不对8.下面的SQL命令显示的结果是什么类型:TO_DATE(’01-JAN-1998′) – TO_DATE(’01-DEC-1996′)A 数值B 字符串C 日期D 出现错误9. 简述ROUND 和TRUNC 操作的区别?A ROUND在截掉数据时有四舍五入的判断,TRUNC直接按要求截掉没有进位。
oracle面试题及答案oracle面试题及答案(一)1、关系数据库系统与文件数据库系统的区别在那里?关系数据库系统一般适用那些方面? 答案:关系数据库系统文件系统的区别在于:首先,关系性数据库的整体数据是结构化的,采用关系数据模型来描述,这是它与文件系统的根本区别。
(数据模型包括:数据结构,数据操作以及完整性约束条件)其次,关系数据库系统的共享性高,冗余低可以面向整个系统,而文件系统则具有应用范围的局限性,不易扩展。
第三,关系数据库系统采用两级映射机制保证了数据的高独立性,从而使得程序的编写和数据都存在很高的独立性。
这方面是文件系统无法达到的,它只能针对于某一个具体的应用。
(两级映射:保证逻辑独立性的外模式/模式映射和保证物理独立性的内模式/模式映射。
外模式:用户模式,是数据库用户的局部数据的逻辑结构特征的描述。
模式:数据库全体数据的逻辑结构特征的描述。
内模式:也就是数据最终的物理存储结构的描述。
)第四,就是关系性数据库系统由统一的DBMS进行管理,从而为数据提供了如安全性保护,并发控制,完整性检查和数据库恢复服务。
2、触发器的概念,存储过程的概念.答案:触发器:是存储在数据库中的过程,当表被修改(增、删、改)时它隐式地被激发。
存储过程:是数据库语言SQL的集合,同样也存储在数据库中,但是他是由其他应用程序来启动运行或者也可以直接运行。
3、基本SQL语句有哪些.答案:select、insert、update、delete、create、drop、truncate4、使用存储过程访问数据库比直接用SQL语句访问有哪些优点?答案:存储过程是预编译过的,执行时勿须编译,执行速度更快;存储过程封装了一批SQL语句,便于维护数据的完整性与一致性;可以实现代码的复用。
oracle面试题及答案(二)1.解释冷备份和热备份的不同点以及各自的优点解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。
Oracle面试题及答案整理1、表:table1(FId,Fclass,Fscore),用最高效最简单的SQL列出各班成绩最高的列表,显示班级,成绩两个字段。
select fclass,max(fscore) from table1 group by fclass,fid2、有一个表table1有两个字段FID,Fno,字都非空,写一个SQL语句列出该表中一个FID对应多个不同的Fno的纪录。
类如:101a1001101a1001102a1002102a1003103a1004104a1005104a1006105a1007105a1007105a1007结果:102a1002102a1003104a1005104a1006select t2.* from table1 t1, table1 t2 where t1.fid = t2.fid and t1.fno <> t2.fno;3、有员工表empinfo(Fempno varchar2(10) not null pk,Fempname varchar2(20) not null,Fage number not null,Fsalary number not null);假如数据量很大约1000万条;写一个你认为最高效的SQL,用一个SQL计算以下四种人:fsalary>9999 and fage > 35fsalary>9999 and fage < 35fsalary <9999 and fage > 35fsalary <9999 and fage < 35每种员工的数量;select sum(case when fsalary>9999 and fage>35 then 1 else 0 end),sum(case when fsalary>9999 and fage<35 then 1 else 0 end),sum(case when fsalary<9999 and fage>35 then 1 else 0 end),sum(case when fsalary<9999 and fage<35 then 1 else 0 end) from empinfo4、表A字段如下month person income月份人员收入要求用一个SQL语句(注意是一个)的处所有人(不区分人员)每个月及上月和下月的总收入要求列表输出为月份当月收入上月收入下月收入MONTHS PERSON INCOME---------- ---------- ----------200807 mantisXF 5000200806 mantisXF2 3500200806 mantisXF3 3000200 805 mantisXF1 2000200805 mantisXF6 2200200804 mantisXF7 1800200803 8mantisXF 4000200802 9mantisXF 4200200802 10mantisXF 3300200801 11mantisXF 4600200809 11mantisXF 680011 rows selectedselect months, max(incomes), max(prev_months), max(next_months)from (select months,incomes,decode(lag(months) over(order by months),to_char(add_months(to_date(months, 'yyyymm'), -1), 'yyyymm'), lag(incomes) over(order by month s), 0) as prev_months, decode(lead(months) over(order by months), to_char(add_months(to_date (months, 'yyyymm'), 1), 'yyyymm'), lead(incomes) over(order by months), 0) as next_months from (select months, sum(income) as incomes from a group by months) aa) aaagroup by months;MONTHS MAX(INCOMES) MAX(PREV_MONTHS) MAX(NEXT_MONTHS)---------- ------------ ---------------- ----------------200801 4600 0 7500200802 7500 4600 4000200803 4000 7500 1800200804 1800 4 000 4200200805 4200 1800 6500200806 6500 4200 5000200807 5000 6500 0200809 6800 0 0Select (Select Month From Table Where Month = To_Char(Sysdate, 'mm')) 月份,(Select Sum(Income) From Table Where Month = To_Char(Sysdate, 'mm')) 当月收入,(Select Sum(Income) From Table Where To_Number(Month) = To_Number(Extract(Month From Sys date)) - 1) 上月收入,(Select Sum(Income) From Table Where To_Number(Month) = To_Number(Extract(Month From Sys date)) + 1) 下月收入From Dual5,表BC1 c22005-01-01 12005-01-01 32005-01-02 5要求的处数据2005-01-01 42005-01-02 5合计9试用一个Sql语句完成。
select nvl(to_char(t02,'yyyy-mm-dd'),'合计'),sum(t01)from testgroup by rollup(t02)6,数据库1,2,3 范式的概念与理解。
关系数据库设计之时是要遵守一定的规则的。
尤其是数据库设计范式简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式),第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的关系。
例:如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话和一个家里电话号码)规范成为1NF有三种方法:一是重复存储职工号和姓名。
这样,关键字只能是电话号码。
二是职工号为关键字,电话号码分为单位电话和住宅电话两个属性三是职工号为关键字,但强制每条记录只能有一个电话号码。
以上三个方法,第一种方法最不可取,按实际情况选取后两种情况。
第二范式(2NF):如果关系模式R(U,F)中的所有非主属性都完全依赖于任意一个候选关键字,则称关系R 是属于第二范式的。
例:选课关系SCI(SNO,CNO,GRADE,CREDIT)其中SNO为学号,CNO为课程号,GRADEGE 为成绩,CREDIT 为学分。
由以上条件,关键字为组合关键字(SNO,CNO)在应用中使用以上关系模式有以下问题:a.数据冗余,假设同一门课由40个学生选修,学分就重复40次。
b.更新异常,若调整了某课程的学分,相应的元组CREDIT值都要更新,有可能会出现同一门课学分不同。
c.插入异常,如计划开新课,由于没人选修,没有学号关键字,只能等有人选修才能把课程和学分存入。
d.删除异常,若学生已经结业,从当前数据库删除选修记录。
某些门课程新生尚未选修,则此门课程及学分记录无法保存。
原因:非关键字属性CREDIT仅函数依赖于CNO,也就是CREDIT部分依赖组合关键字(SNO,CNO)而不是完全依赖。
解决方法:分成两个关系模式SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。
新关系包括两个关系模式,它们之间通过SCN中的外关键字CNO相联系,需要时再进行自然联接,恢复了原来的关系第三范式(3NF):如果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递信赖,则称关系R是属于第三范式的。
例:如S1(SNO,SNAME,DNO,DNAME,LOCATION)各属性分别代表学号,姓名,所在系,系名称,系地址。
关键字SNO决定各个属性。
由于是单个关键字,没有部分依赖的问题,肯定是2NF。
但这关系肯定有大量的冗余,有关学生所在的几个属性DNO,DNAME,LOCATION将重复存储,插入,删除和修改时也将产生类似以上例的情况。
原因:关系中存在传递依赖造成的。
即SNO -> DNO。
而DNO -> SNO却不存在,DNO -> LOCA TION, 因此关键辽SNO 对LOCATION 函数决定是通过传递依赖SNO -> LOCATION 实现的。
也就是说,SNO不直接决定非主属性LOCATI ON。
解决目地:每个关系模式中不能留有传递依赖。
解决方法:分为两个关系S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)注意:关系S中不能没有外关键字DNO。
否则两个关系之间失去联系。
7,简述oracle行触发器的变化表限制表的概念和使用限制,行触发器里面对这两个表有什么限制。
变化表mutating table被DML语句正在修改的表需要作为DELETE CASCADE参考完整性限制的结果进行更新的表也是变化的限制:对于Session本身,不能读取正在变化的表限制表constraining table需要对参考完整性限制执行读操作的表限制:如果限制列正在被改变,那么读取或修改会触发错误,但是修改其它列是允许的。
8、oracle临时表有几种。
临时表和普通表的主要区别有哪些,使用临时表的主要原因是什么?在Oracle中,可以创建以下两种临时表:a。
会话特有的临时表CREATE GLOBAL TEMPORARY ( )ON COMMIT PRESERVE ROWS;b。