《2022年数据库面试题答案 .pdf》由会员分享,可在线阅读,更多相关《2022年数据库面试题答案 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库 SQL面试题1) 谈一下数据库的索引的原理,如何发挥作用的?针对插入操作索引会起正面作用么?索引类似于书的目录,主要用于提高查询效率,也就是按条件查询的时候,先查询索引, 再通过索引找到相关的数据,索引相当于记录了对某个关键词,指定到不同的文件,或者文件里的不同位置的结构索引会降低数据更新的效率,当插入、修改、删除时会引起索引结构的更新2) 数据库表里如果数据行数很多,做分页查询,SQL如何书写? 3) 说说 group by, having是做什么的,举一个group by 的例子4) 说说外连接和内连接的区别5) 事务是什么概念,举例说明6) 一个表: emp(姓名,性别,年龄,工
2、作类型,领导姓名,工资,部门) 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.部门) 存储过程和函数的区别是什么?答:存储过程是用户定义的一
3、系列SQL语句的集合, 涉及特定表或其他对象的任务,用户可以调用存储过程。 而函数通常是数据库已定义的方法,它接受参数并返回某种类型的值,并且不涉及特定用户表。4. 事务是什么?答:事务是作为一个逻辑单元执行的一系列操作。一个逻辑工作单元必须有4个属性,称为ACID(原子性、一致性、隔离性和持久性) 属性,只有这样才能称为一个事务。5. 游标的作用是什么?如何知道游标已经到了最后?答:游标用于定位结果集的行。通过判断全局变量FETCH_STATUS可以判断其是否到了最后。通常此变量不等于0 表示出错或到了最后。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
4、 - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 7. 什么叫做 SQL注入式攻击?如何防范?答:所谓 SQL注入式攻击,就是攻击者把 SQL命令插入到 Web 表单的输入域页面请求的查询字符串中, 欺骗服务器执行恶意的SQL命令。在某些表单中, 用户输入的内容直接用来构造动态SQL命令,或作为存储过程的输入参数, 这类表单特别容易受到 SQL注入式攻击。防范 SQL注入式攻击闯入: 只要在利用表单输入的内容构造 SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。如: 替换单引号,即
5、把所有单独出现的单引号改成两个单引号,防止攻击者修改 SQL命令的含义。10. 什么是聚集索引?什么是非聚集索引?什么是主键?答:表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键。 聚集索引确定表中数据的物理顺序。一个表中只能包含一个聚集索引。 非聚集索引与课本中的索引类似。数据存储在一个地方, 索引存储在另一个地方, 索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储。11. 现有一张表,有两个字段:ID,NAME 。ID 为主键。如果希望查询出所有拥有2 个或更多 ID 的 NAME ,查询语句应该如何写?s
6、elect 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
7、 WHERE Sname=刘晨 );或者: SELECT S1.Sno,S1.Sname,S1.Sdept FROM Student S1,Student S2 WHERE S1.Sdept=S2.Sdep t AND S2.Sname=刘晨;(2) 查询选修了课程名为“信息系统”的学生学号和姓名答:SELECT Sno,Sname FROM Student WHERE Sno IN(SELECT Sno FROM SC) WHERE Cno IN(SELECT Cno FROM Course WHERE Cname=信息系名师资料总结 - - -精品资料欢迎下载 - - - - - - -
8、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 统);或 者 : SELECT Sno,Sname FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Course.Cname= 信息系统;用两种方式根据部门号从高到低, 工资从低到高列出每个员工的信息。(employee: eid,ename,salary,deptid;) select * from employee order by deptid
9、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 e
10、mp a, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - (select deptd,avg(salary) avgsal from emp group by deptid ) b where a.deptid=b.deptid and a.salaryb.avgsal; 分页语句取出 sql 表中第 31到 40 的记录(以自动增长ID 为主键)sql server方案:select top 10 * from t wher
11、e id not in (select top 30 id from t order by id ) orde by id 用一条 SQL语句查询出每门课都大于80 分的学生姓名name kecheng fenshu 张三语文81 张三数学75 李四语文76 李四数学90 王五语文81 王五数学100 王五英语90 select distinct name from score where name not in (select distinct name from score where score=80) 用 JDBC如何调用存储过程Connection conn=super.getCon
12、n(); CallableStatement statement=null; try statement=conn.prepareCall(call proc_UpdateLevel(?,?,?,?); statement.setString(1, cusNo); statement.setInt(2, year); statement.registerOutParameter(3, Types.VARCHAR); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页
13、- - - - - - - - - statement.registerOutParameter(4, Types.FLOAT); statement.execute(); String cuslevel=(String)statement.getObject(3); Double money=(Double)statement.getObject(4); System.out .println(cuslevel+ +money); catch (SQLException e) e.printStackTrace(); finally try statement.close(); conn.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -