数据库面试题答案

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

数据库 SQL面试题

1)谈一下数据库的索引的原理,如何发挥作用的?针对插入操作索引会起正面作用么?

索引类似于书的目录,主要用于提高查询效率,也就是按条件查询的时候,先查询索引,再通过索引找到相关的数据,索引相当于记录了对某个关键词,指定到不同的文件,或者文件里的不同位置的结构

索引会降低数据更新的效率,当插入、修改、删除时会引起索引结构的更新

2) 数据库表里如果数据行数很多,做分页查询,SQL如何书写?

3) 说说group by, having是做什么的,举一个group by的例子

4) 说说外连接和连接的区别

5) 事务是什么概念,举例说明

6) 一个表:emp(,性别,年龄,工作类型,领导,工资,部门)

a) 列出每个部门的最高工资和最低工资

Select max(工资),min(工资) from emp group by部门

b) 列出各部门’工作类型’为’普通职员’的最低和最高工资

Select max(工资),min(工资) from emp group by部门

Where工作类型=’普通职员’

c) 列出高于本部门平均工资的员工,工资,部门

select ,工资,部门 from emp e1 where工资>(

select avg(工资) from emp e2 where e2. 部门=e1.部门

)

存储过程和函数的区别是什么?

答:存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其他对象的任务,用户可以调用存储过程。而函数通常是数据库已定义的方法,它接受参数并返回某种类型的值,并且不涉及特定用户表。

4.事务是什么?

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

5.游标的作用是什么?如何知道游标已经到了最后?

答:游标用于定位结果集的行。通过判断全局变量FETCH_STATUS可以判断其是否到了最后。通常此变量不等于0表示出错或到了最后。

7.什么叫做SQL注入式攻击?如何防?

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

10.什么是聚集索引?什么是非聚集索引?什么是主键?

答:表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键。聚集索引确定表中数据的物理顺序。一个表中只能包含一个聚集索引。非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储。

11.现有一表,有两个字段:ID,NAME。ID为主键。如果希望查询出所有拥有2个或更多ID 的NAME,查询语句应该如何写?

select [Name] from [table] group by(name) having(count([ID]>=2)。

15.一般数据库若出现日志满了,会出现什么情况,是否还能使用?

答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。

19.学生其存放在Student表中,学生选课情况存放在SC表中,课程情况存放在Course表中。

(1)查询与“晨”在同一个系学习的学生。

答:SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN(SELECT Sdept FROM Student WHERE Sname=’晨’);

或者:SELECT S1.Sno,S1.Sname,S1.Sdept FROM Student S1,Student S2 WHERE S1.Sdept=S2.Sdept AN D S2.Sname=’晨’;

(2)查询选修了课程名为“信息系统”的学生学号和

答:SELECT Sno,Sname FROM Student WHERE Sno IN(SELECT Sno FROM SC) WHERE Cno IN(SELECT Cno FROM Course WHERE Cname=’信息系

统’);

或者:SELECT Sno,Sname FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND o=o AND ame=’信息系统’;

用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。(employee:

eid,ename,salary,deptid;)

select * from employee order by deptid desc,salary

列出各个部门中工资高于本部门的平均工资的员工号和部门号,并按部门号排序

create table employee921(id int primary key ,name varchar(5

0),salary bigint,deptid int);

Select id,deptid from employee921 as e1 where salary>( Select avg(salary) from employee921 as e2 whre e2.deptid= e1.deptId

)

select a.ename,a.salary,a.deptid

from emp a,

相关文档
最新文档