sql面试题文库.docx
《sql面试题文库.docx》由会员分享,可在线阅读,更多相关《sql面试题文库.docx(14页珍藏版)》请在冰点文库上搜索。
sql面试题文库
2.存储过程的优缺点是什么?
优点:
1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcedure为封装此代码提供了一个替换位置。
2.执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划--实际上是MicrosoftSQLServer为在存储过程中获取由T-SQL指定的结果而必须采取的步骤的记录。
)缓存改善性能。
……..但sqlserver新版本,执行计划已针对所有T-SQL批处理进行了缓存,而不管它们是否在存储过程中,所以没比较优势了。
3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。
4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通过使用远程过程调用(RPC)处理服务器上的存储过程而提高性能。
RPC封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。
5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。
6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。
7.更好的版本控制,通过使用MicrosoftVisualSourceSafe或某个其他源代码控制工具,您可以轻松地恢复到或引用旧版本的存储过程。
8.增强安全性:
a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;
b、提高代码安全,防止SQL注入(但未彻底解决,例如,将数据操作语言--DML,附加到输入参数);
c、SqlParameter类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。
缺点:
1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新GetValue()调用,等等,这时候估计比较繁琐了。
2.可移植性差
由于存储过程将应用程序绑定到SQLServer,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。
如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于RDBMS的中间层中可能是一个更佳的选择。
5.说一下mysql,oracle等常见数据库的分页实现方案?
1.Oracle:
select*from(selectrow_.*,rownumrownum_from(query_SQL)row_whererownum==min
2.SQLServer:
selecttop@pagesize*fromtablenamewhereidnotin(selecttop@pagesize*(@page-1)id
fromtablenameorderbyid)orderbyid
3.MySQL
select*fromtablenamelimitposition,counter
4.DB2
select*from(select*,rownumber()asROW_NEXTfromtablename)whereROW_NEXTbetweenminandmax
——————————————————————————————–
6.第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
构造数据库必须遵循一定的规则。
在关系数据库中,这种规则就是范式。
范式是符合某一种级别的关系模式的集合。
关系数据库中的关系必须满足一定的要求,即满足不同的范式。
目前关系数据库有六种范式:
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。
满足最低要求的范式是第一范式(1NF)。
在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。
一般说来,数据库只需满足第三范式(3NF)就行了。
下面我们举例介绍第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
3.4.1第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。
在第一范式(1NF)中表的每一行只包含一个实例的信息。
例如,对于图3-2中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。
简而言之,第一范式就是无重复的列。
3.4.2第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。
第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。
为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。
如
图3-2员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。
这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。
所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。
简而言之,第二范式就是非主属性非部分依赖于主关键字。
3.4.3第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。
简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。
那么在图3-2
的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。
如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
简而言之,第三范式就是属性不依赖于其它非主属性。
所谓范式就是符合某一种级别的关系模式的集合。
通过分解把属于低级范式的关系模式转换为几个属于高级范式的关系模式的集合。
这一过程称为规范化。
1、第一范式(1NF):
一个关系模式R的所有属性都是不可分的基本数据项。
2、第二范式(2NF):
关系模式R属于第一范式,且每个非主属性都完全函数依赖于键码。
3、第三范式(3NF):
关系模式R属于第一范式,且每个非主属性都不伟递领带于键码。
4、BC范式(BCNF):
关系模式R属于第一范式,且每个属性都不传递依赖于键码。
武汉英思工程科技有限公司–ORACLE面试测试题目
1.解释FUNCTION,PROCEDURE和PACKAGE区别
答:
function和procedure是PL/SQL代码的集合,通常为了完成一个任务。
procedure不需要返回任何值而function将返回一个值在另一方面,Package是为了完成一个商业功能的一组function和procedure的集合。
2.取某个序列的当前值的PL/SQL语句怎么写?
答:
SELECT序列名.CURRVALFROMDUAL;
3.说明ORACLE数据库实例与ORACLE用户的关系?
答:
实例可以包含多个用户,一个用户只能在一个实例下
4.创建数据库时,自动建立的tablespace名称?
答:
SYSTEMtablespace
5.创建用户时,需要赋予新用户什么权限才能使它连上数据库?
答:
CONNECT
6.IMPORT和SQL*LOADER这2个工具的不同点?
答:
这两个ORACLE工具都是用来将数据导入数据库的。
区别是:
IMPORT工具只能处理由另一个ORACLE工具EXPORT生成的数据。
而SQL*LOADER可以导入不同的ASCII格式的数据源。
7.解释冷备份和热备份的不同点以及各自的优点?
答:
热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。
而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。
热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。
冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。
(因为不必将archivelog写入硬盘)
8.比较truncate和delete命令?
答:
两者都可以用来删除表中所有的记录。
区别在于:
truncate是DDL(datadefininglanguage数据定义语言),它移动HWK,不需要rollbacksegment(处理事务回滚操作)而Delete是DML(datamanufacturinglanguage数据操作语言)操作,需要rollbacksegment(处理事务回滚操作)且花费较长时间。
9.给出数据的相关约束类型?
答:
主键约束,外键约束,非空约束,唯一约束,检查约束。
10.说明索引的类型与作用?
答:
索引类型上分为聚集索引,非聚集索引其作用是加快查询速度。
11.解释归档和非归档模式之间的不同和它们各自的优缺点
答:
归档模式是指你可以备份所有的数据库transactions并恢复到任意一个时间点。
非归档模式则相反,不能恢复到任意一个时间点。
但是非归档模式可以带来数据库性能上的少许提高。
12.解释$ORACLE_HOME和$ORACLE_BASE的区别?
答:
ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录。
13.获取某个字符字段的最后3个字符的函数是什么?
答:
selectsubstr(字段,(length(字段)-3))from表
14.取当前系统时间点日期(不包括年月)的SQL写法是怎样的?
答:
Selectsubstr(to_char(sysdate,’YYYYMMDDh24hh:
MM:
SS’),5)fromdual;
15.返回大于等于N的最小整数值?
答:
selectceil(N)fromdual;
16.将根据字符查询转换后结果,规则为:
’A’转换为’男’,’B’转换为’女’,其他字符转换为’未知’,请用一个SQL语句写出。
答:
selectdecode(字符,’A’,’男’,’B’,’女’,’未知’)fromdual;
17.如何搜索出前N条记录?
答:
select*from表whereRownum<=N;
18.如何搜索出第N~M条记录?
答:
select*from表whereRownum<=M
Minus
select*from表whereRownum<=N;
19.有一个数据表(TEST),字段如下:
IDnumber
PARENT_IDnumber
NAMEVarchar(20)
请使用PL/SQL来按父子层次关系查询出该表的所有数据
答:
Select*fromtesta,testbWherea.parent_id=b.id;
20.怎样用SQL语句实现查找一列中的第N大值?
答:
select*from(select*from表orderby列名Desc)whereRownum<=N
Minus
select*from(select*from表orderby列名Desc)whereRownum<=N-1;
腾讯公司的一个sql题
小小+霸霸+王王=小霸王
小=?
霸=?
王=?
用sql求证
参考答案:
declare@dataint,@iint,@jint,@lint
set@data=100
while(@data<=999)
begin
set@i=@data/100
set@j=@data/10%10
set@l=@data%10
if((@i+@j+@l)*11=@data)
begin
Select@datadata,@ii,@jj,@ll
break
end
set@data=@data+1
end;
分析:
II+JJ+LL=IJL
I*10+I+J*10+J+L*10+L=I*100+J*10+L
(I+J+L)*11
什么是事务?
事务有哪些性质?
答:
事务:
是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
一个事务可以是一条SQL语句,也可以是一组SQL语句。
性质:
(1)原子性:
事务是数据库的逻辑工作单位,被看做一个单一的、不可分割的操作单元。
事务中包括的所有操作要么都做,要么都不做。
(2)一致性:
事务执行的结果必须是使数据库从一个一致状态变到另一个一致状态。
(3)隔离性:
一个事务的执行不能被其他事务干扰。
即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
(4)持续性:
指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
接下来的其他操作或故障不应该对其执行结果有任何影响。
SQL里面如何插入自动增长序列号字段?
INSERT时如果要用到从1开始自动增长的数字做唯一关键字,应该先建立一个序列号.
CREATESEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENTBY1STARTWITH1MAXVALUE99999NOCYCLENOCACHE;
其中最大的值按字段的长度来定,比如定义的自动增长的序列NUMBER(6),最大值为999999
INSERT语句插入这个字段值为:
序列号的名称.NEXTVAL
例子:
SQL>insertintos_dept(id,name,region_id)values(s_dept_id.nextval,‘finance’,2);
1rowcreated.
只有运行了序列号的名称.nextval后序列号的名称.currval才有效才有值.
Oracle里面常用的数据字典有哪些?
Dictionary存放所有数据表,视图,同义词名称和解释
Dict_columns数据字典里字段名称的和解释
Dba_users用户Dba_tablespaces表空间
Dba_data_files数据库的文件Dba_free_space空闲表空间
Dba_rollback_segs回滚段
User_objects数据对象User_constraints约束条件
User_sequences序列号User_views视图
User_indexes索引User_synonyms同义词
Session_roles用户的角色User_role_privs用户的角色权限
User_sys_privs用户的系统权限User_tab_privs用户的表级权限
V$session实时用户情况V$sysstat实时系统统计
V$sesstat实时用户统计V$sgastat实时SGA使用
V$locked_object实时锁V$controlfile控制文件
V$logfile日志文件V$parameter参数文件
1.Oracle安裝完成后的初始口令?
internal/oracle
sys/change_on_install
system/manager
scott/tiger
sysman/oem_temp
2.ORACLE9IASWEBCACHE的初始默认用户和密码?
administrator/administrator
3.oracle8.0.5怎么创建数据库?
用orainst。
如果有motif界面,可以用orainst/m
4.oracle8.1.7怎么创建数据库?
dbassist
5.oracle9i怎么创建数据库?
dbca
6.oracle中的裸设备指的是什么?
裸设备就是绕过文件系统直接访问的储存空间
7.oracle如何区分64-bit/32bit版本?
?
?
$sqlplus‘/ASSYSDBA’
SQL*Plus:
Release9.0.1.0.0–ProductiononMonJul1417:
01:
092003
(c)Copyright2001OracleCorporation.Allrightsreserved.
Connectedto:
Oracle9iEnterpriseEditionRelease9.0.1.0.0–Production
WiththePartitioningoption
JServerRelease9.0.1.0.0–Production
SQL>select*fromv$version;
BANNER
Oracle9iEnterpriseEditionRelease9.0.1.0.0–Production
PL/SQLRelease9.0.1.0.0–Production
CORE9.0.1.0.0Production
TNSforSolaris:
Version9.0.1.0.0–Production
NLSRTLVersion9.0.1.0.0–Production
SQL>
8.SVRMGR什么意思?
svrmgrl,ServerManager.
9i下没有,已经改为用SQLPLUS了
sqlplus/nolog
变为归档日志型的
9.请问如何分辨某个用户是从哪台机器登陆ORACLE的?
SELECTmachine,terminalFROMV$SESSION;
10.用什么语句查询字段呢?
desctable_name可以查询表的结构
selectfield_name,…from…可以查询字段的值
select*fromall_tableswheretable_namelike‘%’
select*fromall_tab_columnswheretable_name=’?
?
’
11.怎样得到触发器、过程、函数的创建脚本?
descuser_source
user_triggers
12.怎样计算一个表占用的空间的大小?
selectowner,table_name,
NUM_ROWS,
BLOCKS*AAA/1024/1024“SizeM”,
EMPTY_BLOCKS,
LAST_ANALYZED
fromdba_tables
wheretable_name=’XXX’;
Here:
AAAisthevalueofdb_block_size;
XXXisthetablenameyouwanttocheck
14.如何查看系统被锁的事务时间?
select*fromv$locked_object;
15.如何以archivelog的方式运行oracle。
init.ora
log_archive_start=true
RESTARTDATABASE
16.怎么获取有哪些用户在使用数据库
selectusernamefromv$session;
17.数据表中的字段最大数是多少?
表或视图中的最大列数为1000
18.怎样查得数据库的SID?
selectnamefromv$database;
也可以直接查看init.ora文件
19.如何在Oracle服务器上通过SQLPLUS查看本机IP地址?
selectsys_context(’userenv’,'ip_address’)fromdual;
如果是登陆本机数据库,只能返回127.0.0.1,呵呵
20.unix下怎么调整数据库的时间?
su-root
date-u08010000
如何找出EMP表里面SALARY第N高的employee?
SELECTDISTINCT(a.sal)FROMEMPAWHERE&N=(SELECTCOUNT(DISTINCT(b.sal))FROMEMPBWHEREa.sal<=b.sal);
例如:
-
输入&N的值为2则输出结果为:
SAL
———
3700
如何删除一个表里面的重复行?
deletefromtable_namewhererowidnotin(selectmax(rowid)fromtable_namegroupbyduplicate_values_field_name);
或者
deleteduplicate_values_field_namedvfromtable_nametawhererowid<(selectmin(rowid)fromtable_nametbwhereta.dv=tb.dv);
或者
DELETEFROMtable_nameAWHERErowid>(SELECTMIN(rowid)FROMtable_nameBWHEREA>key_values=B.key_values);
SQL里面IN比较快还是EXISTS比较快?
EXISTS比较快因为EXISTS返回一个Boolean型而IN返回一个值。