关于SQL面试题的技术分享

发布时间:2016-12-01 10:51:44   来源:文档文库   
字号:

面试题——sql概念

1、存储过程和函数的区别

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,

而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。

2、事务是什么?

事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:

原子性

事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

一致性

事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如B树索引或双向链表)都必须是正确的。

隔离性

由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。

持久性

务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

3、游标的作用?如何知道游标已经到了最后?

是对查询出来的结果集作为一个单元来有效的处理,可从这个单元中逐条获取数据也可对数据进行修改。若要对查询结果集逐条处理,游标显得十分重要。

MSSQL通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。

Oracle通过判断游标的%notfound判断是否到达最后

4、什么是视图?视图的作用?

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图实际上是存储了一个select语句。使用它获取数据更容易,特别是多表查询。

5、什么是存储过程?存储过程的优点?

存储过程是一个预编译的SQL语句,允许模块化的设计,只需创建一次,以后在该程序中就可以调用多次

1.存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。

2.可以降低网络的通信量。存储过程主要是在服务器上运行,减少对客户机的压力。

3、可实现复杂的数据处理,降低业务层的压力

6、内联接,外联接区别?

内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。

在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。分左连接、右连接、全连接三种

7、数据库第一,二,三 范式的概念与理解

第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值 都是不可再分的最小数据单位,则称R是第一范式的关系。

第一范式的目标是确保每列的原子性

第二范式(2NF):如果一个关系满足1NF,并且除了主键以外的其他列,每个属性是功能依赖于整个主键, 而不只是部分的键则满足第二范式。

第二范式要求每个表只描述一件事情

 第三范式(3NF):如果关系模式RUF)每个非键属性只功能依赖于主键,不功能依赖其他属性,则称关系R是属于第三范式的。

确保每列都和主键列直接相关,而不是间接相关

8、什么是触发器?触发器的作用?

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

9、索引的作用?和它的优点缺点是什么?

索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索,它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。

缺点是它减慢了数据录入、修改、删除的速度,同时也增加了数据库的尺寸大小

10、写分页有哪些方法,你一般用什么方法?用SQL语句写一个分页?
如何用存储过程写分页?
SQLSERVER中使用TOP分页,在ORACLE中用ROWNUM,或分析函数ROW_NUMBER
使用TOP
select top 20,n.* from tablename n minus select top 10,m.* from tablename m
使用分析函数:
select * from
(select n.*,row_number() over(order by columnname) num from tablename n)
where num>=10 and num <=20;
使用过程时,只要将分页的范围用两个参数就可以实现。在ORACLE中,还要定义游标类型的输出参数将数据集返回。

11、什么叫做SQL注入式攻击?如何防范?

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。防范SQL注入式攻击闯入:只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。如:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。

雇员表 emp

empno number(4) 表示雇员编号

ename varchar2(10) 表示雇员姓名

job varchar2(9) 表示工作职位

mgr number(4) 表示领导编号

hiredate date 表示雇佣日期

sal number(7,2) 表示月薪工资

comm number(7,2) 表示奖金,佣金

deptno number(2) 部门编号

一、编写一个触发器实现如下功能:
对修改职工薪金的操作进行合法性检查:
a) 修改后的薪金要大于修改前的薪金
b) 工资增量不能超过原工资的10%
c) 目前没有单位的职工不能涨工资


create or replace trigger tr1
after update of sal on emp
for each row
begin
if :new.sal <= :old.sal then
dbms_output.PUT_LINE('修改后的薪金要大于修改前的薪金');
elsif :new.sal > :old.sal * 1.1 then
dbms_output.PUT_LINE'工资增量不能超过原工资的10%');
elsif :old.deptno is null then
dbms_output.PUT_LINE'没有单位的职工不能涨工资');
end if;
end;

二、编写一个存储过程,对名字以"A""S"开始的所有雇员按他们的基本薪水的10%加薪。
create or replace procedure proc_update_salary

as

CURSOR c1 IS
SELECT * FROM emp WHERE SUBSTR(ename,1,1)=´A´ OR SUBSTR(ename,1,1)=´S´ FOR UPDATE OF sal;

BEGIN
FOR i IN c1
LOOP
UPDATE emp SET sal=NVL(sal,0)+NVL(sal,0)*0.1 WHERE CURRENT OF c1;
END LOOP;
END;

3、创建一个序列,第一次从5循环到10,以后再从0开始循环
create sequence test_seq
start with 5
increment by 1
maxvalue 10
minvalue 0
cycle
nocache

四、 编写存储过程对直接上级是指定员工的所有员工,按照参加指定的工作的时间加薪:
例如:指定工作时间是816 816月以前的加薪10
816月以后的加薪5
declare
cursor c1 is select * from emp where mgr = (select
empno from emp where ename='BLAKE'); --直接上级是'BLAKE'的所有员工
c1rec c1%rowtype;
begin

for c1rec in c1 loop
if c1rec.hiredate < '01-6-81' then
update emp set sal = sal * 1.1 where empno = c1rec.empno;
else
update emp set sal = sal * 1.05 where empno = c1rec.empno;
end if;
end loop;
end;

五、根据Table1Table2的完成下列操作

Table1:

Table2:

Table2的主键是复合主键(No,Type),Type 1:表示固话 2:为手机

1、根据table2type类型,将表1中的固话插入表2

2、创建一个触发器,表1删除一项数据,则相关表2的数据全删

3、将表1中的create-date数据进行修改,如:2009-1-9改为 200919,若为null则获得当前日期

4、创建视图名为table1_view,可现实NameAddresstelmobilecreate_date

本文来源:https://www.2haoxitong.net/k/doc/3c0f03f2900ef12d2af90242a8956bec0975a5cb.html

《关于SQL面试题的技术分享.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式