数据库面试题答案.docx

上传人:wj 文档编号:1307787 上传时间:2023-04-30 格式:DOCX 页数:5 大小:15.42KB
下载 相关 举报
数据库面试题答案.docx_第1页
第1页 / 共5页
数据库面试题答案.docx_第2页
第2页 / 共5页
数据库面试题答案.docx_第3页
第3页 / 共5页
数据库面试题答案.docx_第4页
第4页 / 共5页
数据库面试题答案.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据库面试题答案.docx

《数据库面试题答案.docx》由会员分享,可在线阅读,更多相关《数据库面试题答案.docx(5页珍藏版)》请在冰点文库上搜索。

数据库面试题答案.docx

数据库SQL面试题

1)谈一下数据库的索引的原理,如何发挥作用的?

针对插入操作索引会起正面作用么?

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

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

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

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

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

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

6)一个表:

emp(姓名,性别,年龄,工作类型,领导姓名,工资,部门)

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

Selectmax(工资),min(工资)fromempgroupby部门

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

Selectmax(工资),min(工资)fromempgroupby部门

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

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

select姓名,工资,部门fromempe1where工资>(

selectavg(工资)fromempe2wheree2.部门=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]groupby(name)having(count([ID]>=2)。

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

答:

只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。

也就是说基本上处于不能使用的状态。

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

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

答:

SELECTSno,Sname,SdeptFROMStudentWHERESdeptIN(SELECTSdeptFROMStudentWHERESname=’刘晨’);

或者:

SELECTS1.Sno,S1.Sname,S1.SdeptFROMStudentS1,StudentS2WHERES1.Sdept=S2.SdeptANDS2.Sname=’刘晨’;

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

答:

SELECTSno,SnameFROMStudentWHERESnoIN(SELECTSnoFROMSC)WHERECnoIN(SELECTCnoFROMCourseWHERECname=’信息系统’);

或者:

SELECTSno,SnameFROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoANDSC.Cno=Course.CnoANDCourse.Cname=’信息系统’;

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

(employee:

eid,ename,salary,deptid;)

select*fromemployeeorderbydeptiddesc,salary

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

createtableemployee921(idintprimarykey,namevarchar(5

0),salarybigint,deptidint);

Selectid,deptidfromemployee921ase1wheresalary>(

Selectavg(salary)fromemployee921ase2whree2.deptid=e1.deptId

selecta.ename,a.salary,a.deptid

fromempa,

(selectdeptd,avg(salary)avgsalfromempgroupbydeptid)b

wherea.deptid=b.deptidanda.salary>b.avgsal;

分页语句取出sql表中第31到40的记录(以自动增长ID为主键)

sqlserver方案:

selecttop10*fromtwhereidnotin(selecttop30idfromtorderbyid)ordebyid

用一条SQL语句查询出每门课都大于80分的学生姓名 

name  kecheng  fenshu

张三    语文      81

张三    数学      75

李四    语文      76

李四    数学      90

王五    语文      81

王五    数学      100

王五    英语      90

selectdistinctnamefromscore where namenotin(selectdistinctnamefromscorewherescore<=80)

用JDBC如何调用存储过程

Connectionconn=super.getConn();

CallableStatementstatement=null;

try{

statement=conn.prepareCall("{callproc_UpdateLevel(?

?

?

?

)}");

statement.setString(1,cusNo);

statement.setInt(2,year);

statement.registerOutParameter(3,Types.VARCHAR);

statement.registerOutParameter(4,Types.FLOAT);

statement.execute();

Stringcuslevel=(String)statement.getObject(3);

Doublemoney=(Double)statement.getObject(4);

System.out.println(cuslevel+""+money);

}catch(SQLExceptione){

e.printStackTrace();

}finally{

try{

statement.close();

conn.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2