admin管理员组

文章数量:1532656

2024年7月12日发(作者:)

数据库sql面试题及答案

【篇一:sql数据库经典面试题(修改笔试题)(有答案)】

部门,平均工资,要求按部门的字符串顺序排序,不能含有human

resource部门,employee结构如下:

employee_id, employee_name,depart_id,depart_name,wage

答:

select depart_name, avg(wage)

from employee where depart_name human resource

group by depart_name order by depart_name

-------------------------------------------------------------------------- 29.

给定如下sql数据库:test(num int(4)) 请用一条sql语句返回

num的最小值,但不许使用统计功能,如min,max等

答:

select top 1 num from test order by num

--------------------------------------------------------------------------

33.一个数据库中有两个表:

一张表为customer,含字段id,name;

一张表为order,含字段id,customerid(连向customer中id的

外键),revenue;

写出求每个customer的revenue总和的sql语句。

建表 create table customer

(id int primary key,name char(10))

go

create table [order]

(id int primary key,customerid int foreign key references

customer(id) , revenue float)

go

--查询

select , sum( isnull([order].revenue,0) )

from customer full join [order]

on( [order].customerid= ) group by

select ,sum(r) from order,customer

where =customerid group by

select , sum(r ) from customer full

join order on( erid= ) group by

5数据库(10)

a tabel called “performance”contain

:name and score,please 用

sql语言表述

如何选出score最high的一个(仅有一个)

仅选出分数,select max(score) from performance

仅选出名字,即选出名字,又选出分数: select top 1

score ,name from per order by score

select name1,score from per where score in/=(select

max(score) from per)

.....

4 有关系 s(sno,sname) c(cno,cname) sc(sno,cno,grade)

1 问上课程 db的学生no

select count(*) from c,sc where =db and =

select count(*) from sc where cno=(select cno from c where

=db)

2 成绩最高的学生号

select sno from sc where grade=(select max(grade) from sc )

3 每科大于90分的人数

select ,count(*) from c,sc where = and

90 group by

select ,count(*) from c join sc on = and

90 group by

数据库笔试题

*

建表:

dept:

deptno(primary key),dname,loc

emp:

empno(primary key),ename,job,mgr,sal,deptno

*/

1 列出emp表中各部门的部门号,最高工资,最低工资

select max(sal) as 最高工资,min(sal) as 最低工资,deptno from

emp group by deptno;

2 列出emp表中各部门job为clerk的员工的最低工资,最高工资

select max(sal) as 最高工资,min(sal) as 最低工资,deptno as 部

门号 from emp where job = clerk group by deptno;

3 对于emp中最低工资小于1000的部门,列出job为clerk的员

工的部门号,最低工资,最高工资

select max(sal) as 最高工资,min(sal) as 最低工资,deptno as 部

门号 from emp as b

where job=clerk and 1000(select min(sal) from emp as a where

=) group by

4 根据部门号由高而低,工资有低而高列出每个员工的姓名,部门

号,工资

select deptno as 部门号,ename as 姓名,sal as 工资 from emp

order by deptno desc,sal asc

5 写出对上题的另一解决方法

(请补充)

6 列出张三所在部门中每个员工的姓名与部门号

select ename,deptno from emp where deptno = (select deptno

from emp where ename = 张三)

7 列出每个员工的姓名,工作,部门号,部门名

select ename,job,, from emp,dept

where =

8 列出emp中工作为clerk的员工的姓名,工作,部门号,部门名

select ename,job,,dname from emp,dept where

9 对于emp中有管理者的员工,列出姓名,管理者姓名(管理者外

键为mgr) select as 姓名, as 管理者 from emp

as a,emp as b where is not null and =

10 对于dept表中,列出所有部门名,部门号,同时列出各部门工

作为clerk的员工名与工作

select dname as 部门名, as 部门号,ename as 员工

名,job as 工作 from dept,emp

where *= and job = clerk

11 对于工资高于本部门平均水平的员工,列出部门号,姓名,工资,

按部门号排序

select as 部门号, as 姓名, as 工资 from

emp as a where (select avg(sal) from emp as b where

=) order by

12 对于emp,列出各个部门中平均工资高于本部门平均水平的员工

数和部门号,按部门号排序

select count() as 员工数, as 部门号 from emp as a

where (select avg(sal) from emp as b where

=) group by order by

13 对于emp中工资高于本部门平均水平,人数多与1人的,列出

部门号,人数,按部门号排序

select count() as 员工数, as 部门号,avg(sal)

as 平均工资 from emp as a

where (select count() from emp as c where

= and (select avg(sal) from emp as b

where =))1 group by order by

14 对于emp中低于自己工资至少5人的员工,列出其部门号,姓

名,工资,以及工资少于自己的人数

select ,,,(select count() from

emp as b where ) as 人数 from emp as a

where (select count() from emp as b where

)5 数据库笔试题及答案

第一套

一.选择题

1. 下面叙述正确的是ccbad ______。

a、算法的执行效率与数据的存储结构无关

b、算法的空间复杂度是指算法程序中指令(或语句)的条数

c、算法的有穷性是指算法必须能在执行有限个步骤之后终止

d、以上三种描述都不对

2. 以下数据结构中不属于线性数据结构的是______。a、队列b、

线性表c、二叉树d、栈

3. 在一棵二叉树上第5层的结点数最多是______。a、8 b、16 c、

32 d、15

4. 下面描述中,符合结构化程序设计风格的是______。

a、使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制

逻辑

b、模块只有一个入口,可以有多个出口

c、注重提高程序的执行效率 d、不使用goto语句

5. 下面概念中,不属于面向对象方法的是______。

a、对象 b、继承 c、类 d、过程调用

6. 在结构化方法中,用数据流程图(dfd)作为描述工具的软件开发阶

段是___ bdbca ___。

a、可行性分析 b、需求分析 c、详细设计 d、程序编码

7. 在软件开发中,下面任务不属于设计阶段的是______。

a、数据结构设计 b、给出系统模块结构 c、定义模块算法 d、定义

需求并建立系统模型

8. 数据库系统的核心是______。

a、数据模型 b、数据库管理系统 c、软件工具 d、数据库

9. 下列叙述中正确的是______。

a、数据库是一个独立的系统,不需要操作系统的支持 b、数据库设

计是指设计数据库管理系统 c、数据库技术的根本目标是要解决数据

共享的问题 d、数据库系统中,数据的物理结构必须与逻辑结构一致

10. 下列模式中,能够给出数据库物理存储结构与物理存取方法的是

______。 a、内模式 b、外模式 c、概念模式 d、逻辑模式 11.

visual foxpro数据库文件是__ dcbaa ____。 a、存放用户数据的

文件 b、管理数据库对象的系统文件

c、存放用户数据和系统的文件 d、前三种说法都对

12. sql语句中修改表结构的命令是______。

a、modify table b、modify structure c、alter table d、alter

structure

13. 如果要创建一个数据组分组报表,第一个分组表达式是部门,第

二个分组表达式是性别,第三个分组表达式是基本工资,当前索引

的索引表达式应当是______。

a、部门+性别+基本工资 b、部门+性别+str(基本工资)

c、str(基本工资)+性别+部门 d、性别+部门+str(基本工资)

14. 把一个项目编译成一个应用程序时,下面的叙述正确的是

______。

a、所有的项目文件将组合为一个单一的应用程序文件

b、所有项目的包含文件将组合为一个单一的应用程序文件

c、所有项目排除的文件将组合为一个单一的应用程序文件

d、由用户选定的项目文件将组合为一个单一的应用程序文件

15. 数据库db、数据库系统dbs、数据库管理系统dbms三者之间

的关系是______。

a、dbs包括db和dbms b、dbms包括db和dbs

c、db包括dbs和dbms d、dbs就是db,也就是dbms

16. 在选项对话框的文件位置选项卡中可以设置_ baaba _____。

a、表单的默认大小 b、默认目录

c、日期和时间的显示格式 d、程序代码的颜色

17. 要控制两个表中数据的完整性和一致性可以设置参照完整性,要

求这两个表______。

a、是同一个数据库中的两个表 b、不同数据库中的两个表

c、两个自由表 d、一个是数据库表另一个是自由表

18. 定位第一条记录上的命令是______。

a、go top b、go bottom c、go 6 d、skip

19. 在关系模型中,实现关系中不允许出现相同的元组的约束是通过

______。

a、候选键 b、主键 c、外键 d、超键

20. 设当前数据库有10条记录(记录未进行任何索引),在下列三种

情况下,当前记录号为1时;eof()为真时;bof()为真时,命令?recn()

的结果分别是______。

a、1,11,1 b、1,10,1 c、1,11,0 d、1,10,0

21. 下列表达式中结果不是日期型的是__ ccbba ____。

a、ctod(2000/10/01) b、{^99/10/01}+365 c、val(2000/10/01)

d、date()

【篇二:sql数据库面试题目及其答案】

答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执

行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪

数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。

如,某表上的触发器上包含对另一个表的数据操作,而该操作又会

导致该表触发器被触发。

2.什么是存储过程?用什么来调用?

答:存储过程是一个预编译的sql语句,优点是允许模块化的设计,

就是说只需创建一次,以后在该程序中就可以调用多次。如果某次

操作需要执行多次sql,使用存储过程比单纯sql语句执行要快。可

以用一个命令对象来调用存储过程。

3.索引的作用?和它的优点缺点是什么?

答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速

对数据的检索。它很类似与现实生活中书的目录,不需要查询整本

书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许

指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时

也增加了数据库的尺寸大小。

3。什么是内存泄漏?

答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序

从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应

用程序用关键字new等创建对象时,就从堆中为它分配一块内存,

使用完后程序调用free或者delete释放该内存,否则就说该内存就

不能被使用,我们就说该内存被泄漏了。

4.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务

逻辑?为什么?

答:我是这样做的,尽可能使用约束,如check,主键,外键,非空

字段等来约束,这样做效率最高,也最方便。其次是使用触发器,

这种方法可以保证,无论什么业务系统访问数据库都可以保证数据

的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,

编程复杂,效率低下。

5.什么是事务?什么是锁?

答:事务就是被绑定在一起作为一个逻辑工作单元的sql语句分组,

如果任何一个语句操作失败那么整个操作就被失败,以后操作就会

回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么

不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通

过acid测试,即原子性,一致性,隔离性和持久性。

锁:在所以的dbms中,锁是实现事务的关键,锁可以保证事务的

完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有

者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别

的。

6.什么叫视图?游标是什么?

答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图

进行增,改,查,操作,试图通常是有一个表或者多个表的行或列

的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,

相比多表查询。

游标:是对查询出来的结果集作为一个单元来有效的处理。游标可

以定在该单元中的特定行,从结果集的当前行检索一行或多行。可

以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数

据的时候,游标显得十分重要。

7.为管理业务培训信息,建立3个表:

s(s#,sn,sd,sa)s#,sn,sd,sa分别代表学号,学员姓名,所属单位,

学员年龄

c(c#,cn)c#,cn分别代表课程编号,课程名称

sc(s#,c#,g) s#,c#,g分别代表学号,所选的课程编号,学习成绩

(1)使用标准sql嵌套语句查询选修课程名称为’税收基础’的学员

学号和姓名?

答案:select s# ,sn from s where s# in(select s# from c,sc

where 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’的学员姓名和

所属单位?

答:select sn,sd from s where s# not in(select s# from sc

where c#=’c5’)

(4)查询选修了课程的学员人数

答:select 学员人数=count(distinct s#) from sc

(5) 查询选修课程超过5门的学员学号和所属单位?

答:select sn,sd from s where s# in(select s# from sc group by

s# having count(distinct c#)5)

【篇三:数据库面试题】

p class=txt>1、 如何查找和删除数据库中的重复数据

法一: 用group by语句 此查找很快的

select count(num), max(name) from student –查找表中num列

重复的,列出重复的记录数,并列出他的name属性

group by num

having count(num) ;1 –按num分组后找出表中num列重复,即

出现次数大于一次

delete from student(上面select的)

这样的话就把所有重复的都删除了。—–慎重

2、说一下数据表设计要遵守的三范式是什么?除了这些你觉得数据

表的设计还要注意哪些规则?

1、无重复列,实际上就是一个表中一个列不允许有多值属性、复合

属性或者嵌套的表,即列的值域必须是原子值,表必须有主键。

2、属性完全依赖于主键[消除部分子函数依赖]。第二范式其实是在

第一范式上的扩展,所以第二范式必须符合第一范式,表中列不存

在部分函数依赖。

3、属性不依赖于其它非主属性[消除传递依赖]。第三范式是在第二

范式的基础上进行的扩展,所以必须符合第二范式且表中不存在传

递依赖。

3、写一个sql存储过程,建立一个表user 字段是姓名,年龄,职

位,权限,然后向里面插入6条数据,然后查询出年龄大于18的所

有信息。

create table user(

name varchar(20),

age int,

position varchar(20)

quanxian varchar(20)

)

insert into user values(‘111’,11,’11111’,’1111111’)

insert into user values(‘112’,12,’11112’,’1111112’)

insert into user values(‘113’,13,’11113’,’1111113’)

insert into user values(‘114’,14,’11114’,’1111114’)

insert into user values(‘115’,15,’11115’,’1111115’)

insert into user values(‘116’,16,’11116’,’1111116’)

create procedure selectuser

as

select * from user where age 18

4、1. 你对哪种数据库最熟悉?使用该数据库多少年?简单描述对该

数据库的理解.

答:sql,适合中小型企业使用

2. 对其它较熟悉的商业数据库的了解及使用年限.

3. 如何将数据库(实例)备份和还原?(针对自己最熟悉的)

答:sql,在企业管理器上右点要备份或还原的数据,从所有任务选

择备份或还原。

4. 如何知道一个表或视图的结构?

答:查询系统表sysobjects

5. 描述inner join的功能和已在何种情况下使用inner join.

答:内联接是用比较运算符比较要联接列的值的联接,连接的2个

表都要满足、

5、存储过程和sql语句的优缺点

存储过程的优缺点:

优点:

1.由于应用程序随着时间推移会不断更改,增删功能,t-sql过程

代码会变得更复杂,storedprocedure为封装此代码提供了一个替

换位置。

2.执行计划(存储过程在首次运行时将被编译,这将产生一个执行

计划-- 实际上是 microsoft sql server为在存储过程中获取由 t-

sql 指定的结果而必须采取的步骤的记录。)缓存改善性能。

??..但sql server新版本,执行计划已针对所有 t-sql 批处理进行了

缓存,而不管它们是否在存储过程中,所以没比较优势了。

3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据

库中,所以不会产生大量t-sql语句的代码流量。

4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通

过使用远程过程调用 (rpc) 处理服务器上的存储过程而提高性能。

rpc 封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配

的执行计划,并只需插入更新的参数值。

5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集

需要较少的时间和精力。

6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。

7.更好的版本控制,通过使用 microsoft visual sourcesafe 或某个

其他源代码控制工具,您可以轻松地恢复到或引用旧版本的存储过

程。

8.增强安全性:

a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们

可以提供对特定数据的访问;

b、提高代码安全,防止 sql注入(但未彻底解决,例如,将数据操

作语言--dml,附加到输入参数); c、sqlparameter 类指定存

储过程参数的数据类型,作为深层次防御性策略的一部分,可以验

证用户提供的值类型(但也不是万无一失,还是应该传递至数据库

前得到附加验证)。

缺点:

1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要

更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、

更新 getvalue() 调用,等等,这时候估计比较繁琐了。

2.可移植性差

由于存储过程将应用程序绑定到 sql server,因此使用存储过程封

装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性

在您的环境中非常重要,则将业务逻辑封装在不特定于 rdbms 的中

间层中可能是一个更佳的选择。

sql语句灵活,可移植性强,查询速度比存储过程慢些

6、为数据库创建索引都需要注意些什么?

1. 索引能提高速度的关键就是索引所占的空间要比表小得多

2. 注意索引的大小,有一些表可以建成索引组织表

3. 索引的列不要太多,要选择一些selective比较低的列建b-tree

索引,选择selective高的列建bitmap索引(在更新比较多的表不不

要建bitmap索引)

4. 将selective较低的列放在前面

5. 在更新不多的表上建索引时,可以考虑用compress选择,以节

约索引的空间

7、一组sql相关操作面试题

1. 在表a中有数据

id mo

1 y

2 n

请用一个select 语句写出,如果mo的值为“y”,返回“yes”,为n

返回“no”

效果如下:

id mo

1 yes

2 no

select id,mo=case

when mo=?y? then ?yes?

when mo=?n? then ?no?

end

from az

2. 在表a中查询出自动增长列中31到40之间的数据(注意可能不是

连续的)

select * from a where id between 31 and 40

3. 有一个表table中有一个自动增长字段id,如果在存储过程中向这

个表插入一条记录后,如何获得新记录的id.(写出获取新记录id的函

数即可)

create function c_currentid()

returns int

as

begin

declare @lastid int

select @lastid=max(cid) from c

return (@lastid)

end

select .c_currentid() as ?当前c表中最新的编号?

4. having的用法, 是用来做什么的 having用来对group by 分组后

的记录进行过滤。

5. sql中的什么函数可以转换为时间 select

convert(datetime,?2000/01/01′) select cast(?2001/02/02′ as

datetime)

6. 查询数据放入一张临时表 select * into #a from test select *

from #a

8、如何使用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个或多个字符构成的字符串

_表示单个字符

9、说一下mysql, oracle等常见数据库的分页实现方案?

:

select * from ( select row_.*, rownum rownum_ from

( query_sql ) row_ where rownum = max) where rownum_ =

min

server:

select top @pagesize * from tablename where id not in (select

top @pagesize*(@page-1) id from tablename order by id) order

by id

select * from tablename limit position, counter

2

select * from (select *,rownumber() as row_next from

tablename) where row_next between min and max

1.分页方案一:(利用not in和select top分页)效率次之

语句形式:

select top 10 * from testtable

where(id not in (select top 20 id from testtable orderby

id))orderbyid

select top 页大小 * from testtable

where( id not in (select top 每页大小-1*待查询页数-1 id from

表 orderby id)) orderbyid 思路:先查询出待查询页之前的全部条数

的id,查询id不在这些id中的指定数量条数

2.分页方案二:(利用id大于多少和select top分页)效率最高

语句形式:

select top 10 *from testtable

where(id(select max(id) from(select top20 id from testtable

orderbyid)as t))orderby id select top 页大小* from testtable

where(id(select max(id) from(select top 每页大小*待查询页数-1

id from 表 orderby id)as t)) orderby id

思路:先获得待查询页的之前全部条数id,获得它们当中最大的id号,

以此最大id号为标志,查找比这个id号大的指定条数

3.分页方案三:

select top pagesize * from(select top npage*pagesize * from

yourtable order by id)as a order by id desc

select top 每页条数 * from (select top 待查询页*每页条数) * from

yourtable order by id)as a order by id desc

思路:先正排序查询出待查询页之前(包括当前页)的全部条数,然后将

其倒排序,取指定条数

10、几道sql面试题

1. 解释一下sql里面的null

答案:null代表一个unknown的值或者一个不存在的值

本文标签: 数据库数据过程