数据库sql面试题及答案_第1页
数据库sql面试题及答案_第2页
数据库sql面试题及答案_第3页
数据库sql面试题及答案_第4页
数据库sql面试题及答案_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库 sql 面试题及答案【篇一:sql 数据库经典面试题(修改笔试题)(有答案)】部门,平均工资,要求按部门的字符串顺序排序,不能含有humanresource 部门, employee 结构如下:employee_id, employee_name,depart_id,depart_name,wage答:select depart_name, avg(wage)from employee where depart_name human resourcegroup by depart_name order by depart_name29.给定如下sql 数据库:test(num int(

2、4) 请用一条sql 语句返回num 的最小值,但不许使用统计功能,如min , max 等答:select top 1 num from test order by num一个数据库中有两个表:一张表为customer ,含字段id,name;一张表为order ,含字段id,customerid(连向 customer 中 id 的外键) ,revenue ;写出求每个customer 的 revenue 总和的 sql 语句。建表 create table customer(id int primary key,name char(10)gocreate table order(id i

3、nt primary key,customerid int foreign key referencescustomer(id) , revenue float)go-查询select customer.id, sum( isnull(order.revenue,0) )from customer full join orderon( order.customerid=customer.id ) group by customer.idselect customer.id,sum(order.revener) from order,customerwhere customer.id=custo

4、merid group by customer.idselect customer.id, sum(order.revener ) from customer fulljoin order on( order.customerid=customer.id ) group by customer.id5 数据库(10)a tabel called “ performance ” contain: name and score , please 用sql 语言表述如何选出score 最 high 的一个(仅有一个)仅选出分数,select max(score) from performance仅选

5、出名字,即选出名字,又选出分数:select top 1score ,name from per order by scoreselect name1,score from per where score in/=(selectmax(score) from per) 4 有关系 s(sno,sname) c(cno,cname) sc(sno,cno,grade)问上课程db 的学生 noselect count(*) from c,sc where ame=db and o=oselect count(*) from sc where cno=(select cno from c wher

6、e ame=db)成绩最高的学生号select sno from sc where grade=(select max(grade) from sc )每科大于90 分的人数select ame,count(*) from c,sc where o=o andsc.grade90 group by ameselect ame,count(*) from c join sc on o=o andsc.grade90 group by ame数据库笔试题*建表:dept:deptno(primary key),dname,locemp:empno(primary key),ename,job,mg

7、r,sal,deptno*/列出 emp 表中各部门的部门号,最高工资,最低工资select max(sal) as 最高工资,min(sal) as 最低工资,deptno fromemp group by deptno;列出 emp 表中各部门job 为 clerk 的员工的最低工资,最高工资select max(sal) as 最高工资,min(sal) as 最低工资,deptno as 部门号 from emp where job = clerk group by deptno;对于 emp 中最低工资小于1000 的部门,列出job 为 clerk 的员工的部门号,最低工资,最高工

8、资select max(sal) as 最高工资,min(sal) as 最低工资,deptno as 部门号 from emp as bwhere job=clerk and 1000(select min(sal) from emp as a wherea.deptno=b.deptno) group by b.deptno根据部门号由高而低,工资有低而高列出每个员工的姓名,部门号,工资select deptno as 部门号 ,ename as 姓名 ,sal as 工资 from emp order by deptno desc,sal asc写出对上题的另一解决方法(请补充)列出张三

9、所在部门中每个员工的姓名与部门号select ename,deptno from emp where deptno = (select deptnofrom emp where ename = 张三 )列出每个员工的姓名,工作,部门号,部门名select ename,job,emp.deptno,dept.dname from emp,deptwhere emp.deptno=dept.deptno列出emp 中工作为clerk 的员工的姓名,工作,部门号,部门名select ename,job,dept.deptno,dname from emp,dept where对于emp 中有管理者的

10、员工,列出姓名,管理者姓名(管理者外键为 mgr ) select a.ename as 姓名 ,b.ename as 管理者 from emp as a,emp as b where a.mgr is not null and a.mgr=b.empno对于 dept 表中,列出所有部门名,部门号,同时列出各部门工作为 clerk 的员工名与工作select dname as 部门名 ,dept.deptno as 部门号 ,ename as 员工名 ,job as 工作 from dept,empwhere dept.deptno *= emp.deptno and job = clerk

11、对于工资高于本部门平均水平的员工,列出部门号,姓名,工资,按部门号排序select a.deptno as 部门号 ,a.ename as 姓名 ,a.sal as 工资 from emp as a where a.sal(select avg(sal) from emp as b where a.deptno=b.deptno) order by a.deptno对于 emp ,列出各个部门中平均工资高于本部门平均水平的员工数和部门号,按部门号排序select count(a.sal) as 员工数 ,a.deptno as 部门号 from emp as awhere a.sal(sele

12、ct avg(sal) from emp as b where a.deptno=b.deptno) group by a.deptno order by a.deptno 13 对于 emp 中工资高于本部门平均水平,人数多与1 人的,列出部门号,人数,按部门号排序select count(a.empno) as 员工数 ,a.deptno as 部门号 ,avg(sal) as 平均工资from emp as awhere (select count(c.empno) from emp as c where c.deptno=a.deptno and c.sal(select avg(sa

13、l) from emp as b where c.deptno=b.deptno)1 group by a.deptno order by a.deptno14 对于 emp 中低于自己工资至少5 人的员工,列出其部门号,姓名,工资,以及工资少于自己的人数select a.deptno,a.ename,a.sal,(select count(b.ename) fromemp as b where b.sala.sal) as 人数 from emp as awhere (select count(b.ename) from emp as b whereb.sala.sal)5 数据库笔试题及答

14、案第一套一 . 选择题1. 下面叙述正确的是ccbad 。a 、算法的执行效率与数据的存储结构无关b 、算法的空间复杂度是指算法程序中指令( 或语句)的条数c 、算法的有穷性是指算法必须能在执行有限个步骤之后终止d 、以上三种描述都不对以下数据结构中不属于线性数据结构的是 。a、队列b、 线性表c、二叉树d、栈在一棵二叉树上第5 层的结点数最多是 。 a、 8 b 、 16 c 、32 d 、 15下面描述中,符合结构化程序设计风格的是 。a 、使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑b 、模块只有一个入口,可以有多个出口c 、注重提高程序的执行效率d 、不使用goto

15、语句下面概念中,不属于面向对象方法的是 。a 、对象b 、继承c 、类d 、过程调用在结构化方法中,用数据流程图(dfd) 作为描述工具的软件开发阶段是 bdbca 。a、可行性分析b、需求分析c、详细设计d、程序编码在软件开发中,下面任务不属于设计阶段的是a 、数据结构设计b 、给出系统模块结构c 、定义模块算法d 、定义需求并建立系统模型数据库系统的核心是 。a 、数据模型b 、数据库管理系统c 、软件工具d 、数据库下列叙述中正确的是 。a 、数据库是一个独立的系统,不需要操作系统的支持b 、数据库设计是指设计数据库管理系统c、数据库技术的根本目标是要解决数据共享的问题d、数据库系统中,

16、数据的物理结构必须与逻辑结构一致 10. 下列模式中,能够给出数据库物理存储结构与物理存取方法的是。 a、内模式b、外模式c、概念模式d、逻辑模式11.visual foxpro数据库文件是_ dcbaa 。 a、存放用户数据的文件b、管理数据库对象的系统文件c 、存放用户数据和系统的文件d 、前三种说法都对sql 语句中修改表结构的命令是 。a 、 modify table b 、 modify structure c 、 alter table d 、 alter structure如果要创建一个数据组分组报表,第一个分组表达式是部门,第二个分组表达式是性别,第三个分组表达式是基本工资,当

17、前索引的索引表达式应当是 。a、部门+性别+基本工资b、部门+性别+str(基本工资)c、str(基本工资)+性别+部门d、性别+部门+str(基本工资)把一个项目编译成一个应用程序时,下面的叙述正确的是 。a 、所有的项目文件将组合为一个单一的应用程序文件b 、所有项目的包含文件将组合为一个单一的应用程序文件c 、所有项目排除的文件将组合为一个单一的应用程序文件d 、由用户选定的项目文件将组合为一个单一的应用程序文件 TOC o 1-5 h z 数据库db、数据库系统dbs、数据库管理系统dbms三者之间 的关系是 。a 、 dbs 包括 db 和 dbms b 、 dbms 包括 db 和

18、 dbsc 、 db 包括 dbs 和 dbms d 、 dbs 就是 db ,也就是dbms在选项对话框的文件位置选项卡中可以设置_ baaba 。a 、表单的默认大小b 、默认目录c 、日期和时间的显示格式d 、程序代码的颜色要控制两个表中数据的完整性和一致性可以设置参照完整性,要求这两个表 。a 、是同一个数据库中的两个表b 、不同数据库中的两个表c 、两个自由表d 、一个是数据库表另一个是自由表定位第一条记录上的命令是。a、 go top b 、 go bottom c 、 go 6 d 、 skip在关系模型中,实现关系中不允许出现相同的元组的约束是通过 。a 、候选键b 、主键c

19、、外键d 、超键设当前数据库有10 条记录 (记录未进行任何索引),在下列三种情况下,当前记录号为1 时 ;eof() 为真时 ;bof() 为真时,命令?recn()的结果分别是 。a、 1,11,1 b 、 1,10,1 c 、 1,11,0 d 、 1,10,0下列表达式中结果不是日期型的是_ ccbba 。a、ctod(2000/10/01) b 、八99/10/01+365 c 、val(2000/10/01)d 、 date()【篇二:sql 数据库面试题目及其答案】答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪

20、数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。什么是存储过程?用什么来调用?答:存储过程是一个预编译的sql 语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次sql ,使用存储过程比单纯sql 语句执行要快。可以用一个命令对象来调用存储过程。索引的作用?和它的优点缺点是什么?答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许

21、指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。什么是内存泄漏?答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free 或者 delete 释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?答:我是这样做的,尽可能使用约束,如check, 主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无

22、论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。什么是事务?什么是锁?答:事务就是被绑定在一起作为一个逻辑工作单元的sql 语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过 acid 测试,即原子性,一致性,隔离性和持久性。锁:在所以的dbms 中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁

23、还分级别的。什么叫视图?游标是什么?答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。为管理业务培训信息,建立3 个表:s(s#,sn,sd,sa)s#,sn,sd,sa 分别代表学号,学员姓名,所属单位,学员年龄c(c#,cn)c#,cn 分别代表课程编号

24、,课程名称sc(s#,c#,g) s#,c#,g 分别代表学号,所选的课程编号,学习成绩( 1 )使用标准sql 嵌套语句查询选修课程名称为税收基础的学员学号和姓名?答案: select s# ,sn from s where s# in(select s# from c,scwhere c.c#=sc.c# and cn= 税收基础 )(2)使用标准sql嵌套语句查询选修课程编号为c2勺学员姓名和所属单位 ?答: select sn,sd from s,sc where s.s#=sc.s# and sc.c#= c2(3)使用标准sql嵌套语句查询不选修课程编号为c5勺学员姓名和所属单位?

25、答: select sn,sd from s where s# not in(select s# from scwhere c#= c5)(4)查询选修了课程的学员人数答: select 学员人数=count(distinct s#) from sc(5) 查询选修课程超过5门的学员学号和所属单位?答: select sn,sd from s where s# in(select s# from sc group bys# having count(distinct c#)5)【篇三:数据库面试题】p class=txt1 、 如何查找和删除数据库中的重复数据法一 : 用 group by 语

26、句 此查找很快的select count(num), max(name) from student 渣找表中 num 歹U重复的,列出重复的记录数,并列出他的name 属性group by numhaving count(num) ;1 -按num 分组后找出表中 num 列重复,即出现次数大于一次delete from student( 上面 select 的 )这样的话就把所有重复的都删除了。一-慎重2 、说一下数据表设计要遵守的三范式是什么?除了这些你觉得数据表的设计还要注意哪些规则?、无重复列,实际上就是一个表中一个列不允许有多值属性、复合属性或者嵌套的表,即列的值域必须是原子值,表必

27、须有主键。、属性完全依赖于主键 消除部分子函数依赖 。第二范式其实是在第一范式上的扩展,所以第二范式必须符合第一范式,表中列不存在部分函数依赖。、属性不依赖于其它非主属性 消除传递依赖 。第三范式是在第二范式的基础上进行的扩展,所以必须符合第二范式且表中不存在传递依赖。3 、写一个sql 存储过程,建立一个表user 字段是姓名,年龄,职位,权限,然后向里面插入6 条数据,然后查询出年龄大于18 的所有信息。create table user( name varchar(20), age int, position varchar(20) quanxian varchar(20) )111 ,

28、11, 111 ,11, 11111112 ,12, 11112 113 ,13, 11113 114 ,14, 11114 115 ,15, 11115 116 ,16, 111161111111)1111112 )1111113 )1111114 )1111115 )1111116 )insert into user values( insert into user values( insert into user values( insert into user values( create procedure selectuser as select * from user where

29、 age 18、 1. 你对哪种数据库最熟悉? 使用该数据库多少年? 简单描述对该 TOC o 1-5 h z 数据库的理解.答: sql ,适合中小型企业使用对其它较熟悉的商业数据库的了解及使用年限.如何将数据库(实例)备份和还原?(针对自己最熟悉的)答: sql ,在企业管理器上右点要备份或还原的数据,从所有任务选择备份或还原。如何知道一个表或视图的结构?答:查询系统表sysobjects描述 inner join 的功能和已在何种情况下使用inner join.答:内联接是用比较运算符比较要联接列的值的联接,连接的2 个表都要满足、5 、存储过程和sql 语句的优缺点存储过程的优缺点:优

30、点:由于应用程序随着时间推移会不断更改,增删功能,t sql 过程代码会变得更复杂,storedprocedure 为封装此代码提供了一个替换位置。执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划实际上是microsoft sql server 为在存储过程中获取由t-sql 指定的结果而必须采取的步骤的记录。)缓存改善性能。?. 但 sql server 新版本,执行计划已针对所有t-sql 批处理进行了缓存,而不管它们是否在存储过程中,所以没比较优势了。存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量t-sql 语句的代码流量。使用存储过程使您能够

31、增强对执行计划的重复使用,由此可以通过使用远程过程调用(rpc) 处理服务器上的存储过程而提高性能。rpc 封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。代码精简一致,一个存储过程可以用于应用程序代码的不同位置。更好的版本控制,通过使用microsoft visual sourcesafe 或某个其他源代码控制工具,您可以轻松地恢复到或引用旧版本的存储过程。增强安全性:a 、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;b 、提高代码

32、安全,防止sql 注入(但未彻底解决,例如,将数据操作语言dml ,附加到输入参数);c、 sqlparameter 类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。缺点:.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 getvalue() 调用,等等,这时候估计比较繁琐了。. 可移植性差由于存储过程将应用程序绑定到sql server ,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中

33、非常重要,则将业务逻辑封装在不特定于rdbms 的中间层中可能是一个更佳的选择。sql 语句灵活,可移植性强,查询速度比存储过程慢些6 、为数据库创建索引都需要注意些什么?索引能提高速度的关键就是索引所占的空间要比表小得多注意索引的大小,有一些表可以建成索引组织表索引的列不要太多,要选择一些selective 比较低的列建b-tree索引,选择selective 高的列建bitmap 索引 (在更新比较多的表不不要建 bitmap 索引 )将 selective 较低的列放在前面在更新不多的表上建索引时,可以考虑用compress 选择,以节约索引的空间7 、一组 sql 相关操作面试题1.

34、在表 a 中有数据id moyn请用一个select语句写出,如果 mo的值为“y;返回“yes;为n返回 “ no”效果如下:id moyesnoselect id,mo=casewhen mo=?y? then ?yes?when mo=?n? then ?no?endfrom az在表 a 中查询出自动增长列中31 到 40 之间的数据(注意可能不是连续的 )select * from a where id between 31 and 40有一个表table 中有一个自动增长字段id, 如果在存储过程中向这个表插入一条记录后,如何获得新记录的id.(写出获取新记录id的函数即可 )cr

35、eate function c_currentid()returns int asbegindeclare lastid intselect lastid=max(cid) from creturn (lastid)endselect tempdb.dbo.c_currentid() as ? 当前 c 表中最新的编号?having 的用法 , 是用来做什么的having 用来对 group by 分组后的记录进行过滤。sql 中的什么函数可以转换为时间selectconvert(datetime,?2000/01/01 ) select cast(?2001/02/02 asdatetime

36、)查询数据放入一张临时表select * into #a from test select *from #a、如何使用sql 进行模糊查询like 条件一般用在指定搜索某字段的时候, 通过 ” % _”通配符的作用实现模糊查找功能,通配符可以在前面也可以在后面或前后都有。搜索以mian 开头:select * from teble where title like mian%搜索以mian 结束:select * from teble where title like %mian搜索包含mian :select * from teble where title like %mian%注释:%表示0 个或多个字符构成的字符串_表示单个字符、说一下mysql, oracle 等常见数据库的分页实现方案?1.oracle:select * from ( select row_.*, rownum rownum_ from( query_sql ) row_ where rownum = max) where rownum_ = min2.sql server

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论