─数据库部分
数据库面试题
1.谈谈你对Oracle的理解。
Oracle是一系列产品的总和,也可以说是一个平台,它包含Oracle数据库、Oracle中间件、Oracle管理软件等,我简单的描述一下对于Oracle数据库的理解。它是一种基于网络访问的可跨平台的关系型数据库,具有较强的可移植性;通过连接存储池(connectionpolling)和多路复用(multiplexing)机制来实现动态可伸缩性;它通过并行服务器(ParallelServerOption)来提高系统的可用性;Oracle的自动备份和恢复功能,提供了对大规模和更加细化的分布式操作系统的支持等等。
2.主键的作用有哪些?1)2)3)
保证数据的唯一性,避免发生数据重复的情况。
因为主键可以唯一标识某一行记录,所以能确保执行数据更新、删除的时候不会出现张冠李戴的错误。
主键常常与外键构成参照完整性约束,防止出现数据不一致。
3.索引对数据并发会有影响吗?
索引能大大提高对于数据查询的访问速度,但当有大量基于数据插入的并发操作时,
索引反而会降低并发操作的执行速度;当然如果有行级锁的话,情况又会有变化。4.
查询数据库中的某一个到某一个段之间的SQL语句?(比如查询第20到30条的数据)
Oracle:select
*from(selectrownumr,a.*fromtableawhererownum<=30)wherer>=20
SQLServer:
select*from(selecttop21*fromtorderby_iddesc)
torderby_id
(selecttop30*fromtest1orderby_id)
5.SQLServer中的内置函数有哪些?标量函数,如:Date(),Convert()……
聚合函数,如:SUM(),MAX(),STDEV()……行集函数,如:getdate(),Substring(),,
6.数据库的设计原理。
1)原始单据与实体之间的关系2)主键与外键3)范式标准4)完整性约束
7.存储过程的理解。
存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易
得多。存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点:1)
可以在单个存储过程中执行一系列
SQL
语句。
第2页共9页
数据库面试题
2)3)8.
可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。
在Oracle大数据量下的分页解决方法。
typerefCursorTypeisREFCURSOR;--游标类型定义,用于返回数据集proceduresp_Page(p_PageSizeint,
p_PageNoint,p_SqlSelectvarchar2,p_SqlCountvarchar2,
--每页记录数
--当前页码,从1开始--查询语句,含排序部分--获取记录总数的查询语句
p_OutRecordCountoutint,--返回总记录数p_OutCursoroutrefCursorType)
as
v_sqlvarchar2(3000);v_countint;v_heiRownumint;v_lowRownumint;begin
----取记录总数
executeimmediatep_SqlCountintov_count;p_OutRecordCount:=v_count;----执行分页查询
v_heiRownum:=p_PageNo*p_PageSize;v_lowRownum:=v_heiRownum-p_PageSize+1;v_sql:='SELECT*
FROM(
SELECTA.*,rownumrnFROM)B
WHERErn>='||to_char(v_lowRownum);
--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用
别名rn
OPENp_OutCursorFORendsp_Page;9.
存储过程和函数的区别
存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
第3页共9页
('||p_SqlSelect||')A
WHERErownum<='||to_char(v_heiRownum)||'
v_sql;
数据库面试题
10.事务是什么?
事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:原子性,事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。一致性,事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如B树索引或双向链表)都必须是正确的。隔离性,由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。持久性,事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
11.游标的作用?如何知道游标已经到了最后?
游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。
12.触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有
何区别。
事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。
13.你在数据库编程过程中,面临的数据量有多大?如果有一个项目中每天有三张结构
完全相同的表,一个365天天天如此,每张表记录在100万条以上,现需要分页查询,根据这样的项目,采用你用过的分页原理,行吗?
这是考的是性能,一般的分页方式不行,遇到这样的题,你可以说,你需要了解更详细的业务,认真的研究一下,是可以的,当然,如果你认为你的方法可以,可以对这样的问题进行交流,等等。这样的题,说不好也行,不影响你的面试,主要是看一下你对问题的态度
14.写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计
算出的和以总和显示的SQL。
SELECTNo,NameAS‘姓名’,Num1,Num2,(Num1+Num2)AS‘总和’FROMCustom
15.何为“事务处理”,谈谈你对它的理解。
事务处理是指一个单元的工作,这些工作要么全做,要么全部不做。作为一个逻辑单元,必须具备四个属性:自动性、一致性、独立性和持久性。自动性是指事务必须是一个自动的单元工作,要么执行全部数据的修改,要么全部数据的修改都不执行。一致性是指当事务完成时,必须使所有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。所有的内部数据结构,在事务结束之后,必须保证正确。独立性是指并行事务的修改必须与其他并行事务的修改相互独立。一个事务看到的数据要么是另外一个事务修改这
第4页共9页
数据库面试题
些事务之前的状态,要么是第二个事务已经修改完成的数据,但是这个事务不能看到正在修改的数据。16.数据库名词解析
批:是包含一个或多个Transact-SQL语句的组,从应用程序一次性地发送到MicrosoftSQLServer执行。批作为一个整体执行,以GO命令结束。批处理是客户端作为一个单元发出的一个或多个SQL语句的集合。每个批处理编译为一个执行计划。
触发器:触发器是在对表进行插入、更新或删除操作时自动执行的存储过程,触发器通常用于强制业务规则,触发器可以确保数据的完整性和一致性。
事务:是用户定义的一个操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位(构成单一逻辑工作单元的操作集合)如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除
锁:是在多用户环境中对数据访问的限制封锁就是事务T在对某个数据对象(如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。(锁蕴含的基本概念是用户需要对表的排它访问)从程序员的角度看:分为乐观锁和悲观锁。乐观锁:完全依靠数据库来管理锁的工作。悲观锁:程序员自己管理数据或对象上的锁处理。
子查询:一个SELECT语句嵌套在另一个SELECT语句中。
索引:是一个数据库对象,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单,然后根据指定的排序次序排列这些指针优点:提高查询执行的速度,强制实施数据的唯一性,提高表之间联接的速度。缺点:存储索引要占用磁盘空间,数据修改需要更长的时间,因为索引也要更新。试图:是一种虚拟表,通常是作为来自一个或多个表的行或列的子集创建的。视图本质上讲,就是保存在数据库中的select查询,视图并不是数据库中存储的数据值的集合。对最终用户的好处:结果更容易理解,获得数据更容易。对开发人员的好处:限制数据检索更容易,维护应用程序更方便。
存储过程:使用一个名称存储的预编译T-SQL语句和流程控制语句的集合•由数据库开发人员或数据库管理员编写用来执行管理任务或应用复杂的业务规则
优点•执
行速度更快•首次运行时,进行优化和编译得到执行计划并将该计划存储在系统表中,以后直接运行。•实现多个程序共享应用程序逻辑•组件式编程•能够屏蔽数据库的结构,实现更高的安全性减少网络流通量。
数据模型:是一种标识实体类型及其实体间联系的模型。典型的数据模型有网状模型、层次模型和关系模型。17.数据库设计和建模必要性
好的数据库结构有利于:节省数据的存储空间,能够保证数据的完整性,方便进行数据库应用系统的开发。设计不好的数据库结构将导致:数据冗余、存储空间浪费,内存空间浪费。18.数据库设计步骤
第5页共9页
数据库面试题
收集信息−>标识对象−>设计数据模型−>标识每个对象存储的信息类型−>标识对象之间的关系19.什么是规范化
从关系数据库的表中,除去冗余数据的过程称为规范化。包括:精简数据库的结构,从表中删除冗余的列,标识所有依赖于其它数据的数据。20.范式的定义
第一范式的定义:如果一个表中没有重复组(即行与列的交叉点上只有一个值,而不是一组值),则这个表属于第一范式(常记成1NF)。简而言之:\"每一字段只存储一个值\"。例如:职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话和一个家里电话号码)
第二范式的定义:如果一个表属于1NF,任何属性只依赖于关键字,则这个表属于第二范式(常记成2NF)。简而言之:必须先符合1NF的条件,且每一行都能被唯一的识别。将1NF转换成2NF的方法是添加主键。学号,课程名,成绩
第三范式的定义:如果一个表属于2NF,且不包含传递依赖性,则这个表是第三范式(常记成3NF)。满足3NF的表中不包含传递依赖。简而言之:没有一个非关键属性依赖于另一个非关键属性。学号,课程号,成绩,学分学号,姓名,所在系,系名称,系地址。
21.SQLServer服务器中,给定表table1中有两个字段ID、LastUpdateDate,ID表示
更新的事务号,LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号。
SELECTIDFROMTABLE1WHERELASTUPDATEDATE=(SELECTMAX(LASTUPDATEDATE)FROMTABLE1)
22.写出一条SQL语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID
作为主键,
注意:ID可能不是连续的。)
TOP10*FROMAWHEREIDNOTIN(SELECTTOP30IDFROMA)
TOP10*FROMAWHEREID>(SELECTMAX(ID)FROM(SELECTTOP30
方式一:SELECT方式二:SELECT
IDFROMA)ASA)
23.数据库中,表a和表b具有完全相同的结构,主键为id。写出一个SQL语句把表b
中不存在而表a中存在的数据查询出来
SELECT*FROMAWHEREA.IDNOTIN(SELECTIDFROMB)
24.写一个SQL语句把表b中不存在而表a中存在的数据插入到表b中去
INSERTINTOB(SELECT*FROMAWHEREA.IDNOTIN(SELECTIDFROMB))
25.请根据以下的要求写出SQL:
网站的访问日志表,浏览器每发送一个请求,都会在表中记录,其表结构如下所示:表名字段名称idaccess_ipaccess_timeT_Access_Log数据类型varchar(32)varchar(20)datetime是否为空TRUETRUETRUE是否主键TRUEFALSEFALSE字段描述数据库编号访问IP访问时间第6页共9页
数据库面试题
access_urlsession_id1)
varchar(255)varchar(50)
TRUETRUE
FALSEFALSE
访问URL
浏览器SESSION编号
请统计每一个IP登录的次数与点击的次数!(输出列:ip,登录数,点击数)
SELECTACCESS_IPIP,COUNT(SESSION_ID)\"登录数\COUNT(*)\"点击数\"FROMT_ACCESS_LOGGROUPBYIP,COUNT(SESSION_ID)
2)请找出登录次数超过10次的IP地址!(输出列:ip,点击数)
SELECTACCESS_IPIP,COUNT(*)\"点击数\"FROMT_ACCESS_LOGGROUPBYIPHAVINGCOUNT(SESSION_ID)>10
26.定单表Orders的列OrderID的类型是小整数(smallint),根据业务的发展需要
改为整型(integer),应该使用下面哪条语句?
(C)
A.ALTERCOLUMNOrderIDintegerFROMOrdersB.ALTERTABLEOrders(OrderIDinteger)
C.ALTERTABLEOrdersALTERCOLUMNOrderIDintegerD.ALTERCOLUMNOrders.OrderIDinteger
27.执行下面脚本,共有多少条记录插入到表tblTemp中?(C)
CREATETABLEtblTemp(TempIDintegernotnull,TempDatedatetimenotnull)go
DECLARE@countintegerSET@count=1WHILE@count<=10BEGIN
IF(SELECTCOUNT(*)FROMtblTemp)>8BEGINBREAKENDELSE
INSERTtblTempVALUES(@count,GETDATE())SET@count=@count+1ENDA、0
B、8
C、9
D、10
28.你需要获得定单信息列表,包括雇员代号、销售金额和定单日期。你想按日期从近
到早的顺序显示,并且对于每一天的定单,按销售金额从大到小的顺序排序。假设列“销售日期”的时间部分的值都是0,下面哪条语句能够准确地完成该任务?
A.SELECT雇员代号,销售金额,定单日期FROM定单表ORDERBY销售金额,定单日期DESC
B.SELECT雇员代号,销售金额,定单日期FROM定单表ORDERBY定单日期,销售金额DESC
C.SELECT雇员代号,销售金额,定单日期FROM定单表ORDERBY定单日期DESC,销售金额DESC
D.SELECT雇员代号,销售金额,定单日期FROM定单表ORDERBY销售金
第7页共9页
数据库面试题
额DESC,定单日期DES
29.表一列出了数据库:供货商-商品-项目数据库的部分资料表。供货商资料表(S)商品资料表(P)、项目资料表(J)分别以S#、P#、J#字段为数据表的关键词。出货资料表(SPJ)的一笔资料表示一个特定的项目所涉及到的特定的供货商、特定的商品及其数量(用S#、P#、J#共同标识其中的每一笔记录)。表一供货商资料[S]S#S1S2S3S4商品资料[P]P#P1P2P3P4项目资料[J]J#J1J2J3J4出货资料[SPJ]S#S1S1S2S2S3S31)
P#P1P1P3P3P3P4J#J1J4J1J2J1J2QTY200700400200300500JNAMESorterPuncnReaderConsoleCITYParisRomeAthensAthensPNAMENutBoltScrewScrewCOLORRedGreenBlueRedWEIGHT12171714CITYLondonParisRomeLondonSNAMESmithJonesBlakeClarkSTATUS20103020CITYLondonParisParisLondon请用SQL语句回答下列问题:取得以下条件()及()的所有信息及为“同一城市”且级别不为“20”题目不全
第8页共9页
数据库面试题
2)3)4)
取得商品名称第一个字母为“C”的全部商品信息
SELECT*FROMPWHEREPNAMELIKE'C%'
根据提供的商品供应关系资料,取得各商品的商品裹足不前工统计其出货数量题目有问题
取得供应的商品中至少有一种商品颜色为“Red”的供货商名称
SELECTSNAMEFROMS,(SELECTDISTINCTS#FROMSPJ,(SELECTP#FROMPWHERE
COLOR='Red')AWHERESPJ.P#=A.P#)AAWHERES.S#=AA.S#
30.有2张表,表A有字段[CustomerID];表B也有字段[CustomerID]
1)
写出SQL语句:读取表A中[CustomerID]不为空,且在表B中没有对应[CustomerID]的所有记录,即表B中不存在表A中的[CustomerID]
SELECTFROMA,(SELECTCUSTOMERIDFROMAWHEREA.CUSTOMERIDNOTIN(SELECTCUSTOMERIDFROMB))AAWHEREA.CUSTOMERID=AA.CUSTOMERIDAND(A.CUSTOMERIDISNOTNULL)
2)写出SQL语句:合并表A和表B,列出所有不重复的[CustomerID],列出的结果为1列
SELECTDISTINCTCUSTOMIDFROM((SELECTCUSTOMIDFROMA)UNION(SELECTCUSTOMIDFROMB))BB
31.设有关系EMP(ENO,ENAME,SALARY,DNO),其中各属性的含义依次为职工号、姓
名、工资和所在部门号,以及关系DEPT(DNO,DNAME,MANAGER),其中各属性含义依次为部门号、部门名称、部门经理的职工号。请用SQL语句将“销售部”的那些工资数额低于600的职工的工资上调10%。
UPDATEEMPSETSALARY=SALARY*1.1WHEREIDIN(SELECTENOFROMEMPWHERESALARY<600ANDDNOIN(SELECTDNOFROMDEPTWHEREDNAME='销售部'))
第9页共9页
因篇幅问题不能全部显示,请点此查看更多更全内容