数据库面试题(4)

数据库面试题(4)
数据库面试题(4)

数据库面试题

四数据库写 SQL题( 30)

1.按要求写 SQL语句:根据集团成员培训业务,建立以下三张表:

S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄

C (C#,CN ) C#,CN 分别代表课程编号、课程名称

SC ( S#,C#,G ) S#,C#,G分别代表学号、所选修的课程编号、学习成绩

要求如下:

1)使用标准 SQL语句查询成员名单中所属单位叫“技术一部”的人员总数及

平均年龄;

2)使用标准的 SQL语句更新学号为‘S#1’的姓名为“Mike”;

3)使用嵌套语句查询选修课程编号为‘C2’的学员姓名和所属单位;

4)使用嵌套语句查询不选修课程编号为‘C5’的学员姓名和所属单位;

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

解答:

1) select count(SN),avg(SA) from S where SD='技术一部';

2) update S set SN='Mike' where S#='S#1';

3) select SN,SD from S where S#=(select S# from SC where C#='C2');

4) select SN,SD from S where S# not in(select S# from SC where C#='C5');

5) select S#,SD from S where S#=

(select S# from SC group by S# having count(S#)>=5);

2.请根据以下四张表(其中course_t表的 teacher_id字段是teacher_t表的 id字段的外键引用),

拼写出相应的sql语句(oracle语法)。(15分)

学生表:students_t

id name sex

001赵学生 Male

002钱学生 Male

003孙学生 Male

004李学生 Female

005周学生 Female

………

教师表:teacher_t

id name sex

001吴老师 Male

002郑老师 Male

003王老师 Male

004刘老师 Female

005张老师 Female

课程表:course_t

id name credit teacher_id

001语文 3 001

002数学 3 002

003英语 4 003

004物理 3 004

005化学 2 005

006政治 1 001

007生物 1 005

008计算机 2 005

选课表:student_course_t

id student_id course_id

001 001 001

002 001 002

003 001 003

004 002 001

005 002 007

………

1)统计每个学生选修的学分,并按学分降序排序

2)统计每个学生选修的所有课程和对应的任课老师;并按学生 Id和课程 Id排序

3)统计所有学生、所有课程和所有任课老师的对应关系;并按学生 Id和课程 Id排序

解答:

1)select sc.student_id,count(c.credit)

from students_t s, course_t c, student_course_t sc

where s.id=sc.student_id and c.id=sc.course_id group by

sc.student_id order by count(c.credit);

2) select https://www.360docs.net/doc/8812074788.html, as s_name,https://www.360docs.net/doc/8812074788.html, as c_name ,https://www.360docs.net/doc/8812074788.html, as t_name

from students_t s, course_t c, student_course_t sc,teacher_t t

where s.id=sc.student_id and c.id=sc.course_id and t.id=c.teacher_id order by s.id,c.id;

3)与 2)相同

3.假设有以下的两个表:

Cus_A

ID* Name Address

………

Cus_B

ID* Name Address

………

*主键

表 Cus_A 和表 Cus_B的结构完全相同,表 Cus_A 和表 Cus_B中既存在 ID相同的记录,也存在 ID不

同的记录。现要求将ID只存在于表表Cus_A 中而不存在于表Cus_B中的记录全部插入到Cus_B表中,

并用表 Cus_A中的记录更新 Cus_B中相同的 ID的记录,请写出完成这一功能的存储过程。解答:

create or replace procedure test

is

cust_record cus_a%rowtype ;

cursor cust_cursor is select id,name,address from cus_a;

Begin

Open cust_cursor;

LOOP

Fetch cust_cursor into cust_record;

EXIT WHEN cust_cursor %NOTFOUND;

--先删除在插入

delete from cus_b where id=cust_record.id;

insert into cus_b values(cust_record.id, cust_https://www.360docs.net/doc/8812074788.html,, cust_record.address);

END LOOP;

end;

4、已有“成绩”如下表所示:

学号课程号分数

S1 C1 80

S1 C2 75

S2 C1 null

S2 C2 55

S3 C3 90

1)执行 SQL语句:

Select Count(学号)From成绩 Where 分数〉60

后的结果是什么?

2)请写出SQL语句来进行查询“成绩”表中学号为S1、课程号为 C2的学号和分数

解答:

1)统计分数超过 60的学生总数。

2)select 学号,分数 from 成绩 where 学号=‘S1’ and课程号=‘C2’;

5.SAL是 Product表中的索引列,请优化如下 SQL语句,并简述原因。原语句:

SELECT*

FROM Product

WHERE SAL * 12〉25000;

解答:

Select * from product where sal>(25000/12);

理由:WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描.

6.有一张表,字段有用户名、口令及备注,请用 SQL选择出用户名和口令完全相同的记录(应包括用

户名和数量的出现次数)

T_USER(USER_NAME,PASSWORD)

显示

USER_NAME COUNT(*)

QWE 4

WER 5

解答:select user_name,count(*) from t_user group by user_name,password;

7.有一张表,T_MONEY,字段有 ID,FEE,请用SQL语言选择出 FEE值为前三条记录。

T_MONEY(ID,FEE)

显示

ID FEE

2 100

1 90

2 80

Select Id,fee from (Select id,fee from t_money order by fee desc) where rownum<=3;

8、table_name temp

Id name

1 a

2 b

3 a

4 a

结果为

Id name

1 a

2 b

写出sql语句。

解答:select rownum as id , name from(select distinct name from temp);

9、已知原表(t_salary)

year salary

2000 1000

2001 2000

2002 3000

2003 4000

先要实现显示结果(salary为以前的工资和)

year salary

2000 1000

2001 3000

2002 6000

写出sql语句。

解答:

select t.year, sum(t.salary) over (order by t.year) as sum_salary from salary_t t;

10.有两个表 A和 B,均有key和value两个字段,如果 B的 key在 A中也有,就把 B的value换为 A

中对应的 value

这道题的 SQL语句怎么写?

解答:

merge into A a

using B b

on (a.key=b.key)

when matched then

update set

a.value=

b.value

11.创建一张数据表,并插入如下数据。

购物人商品名称数量

A甲2

B乙4

C丙1

A乙2

B丙5

1)写出创建表和插入内容的 sql语句

2)写出 sql语句使其产生如下结果

购物人商品甲商品乙商品丙

A 2 2 Null

B Null 4 5

C Null Null 1

解答:

create table tb_order(

customer varchar2(20),

product_name varchar2(20),

quantity number(2)

)

Insert into tb_order(customer,product_name,quantity)values(‘A’,’甲’,2); Insert into tb_order(customer,product_name,quantity)values(‘B’,’乙’,4); Insert into tb_order(customer,product_name,quantity)values(‘C’,’丙’,1); Insert into tb_order(customer,product_name,quantity)values(‘A’,’甲’,2); Insert into tb_order(customer,product_name,quantity)values(‘B’,’乙’,5);

2)select customer "购物人",

sum(decode(product_name,'甲',quantity,0)) "商品甲",

sum(decode(product_name,'乙',quantity,0)) "商品乙",

sum(decode(product_name,'丙',quantity,0)) "商品丙"

from tb_order

group by customer;

12.有如下两张表:部门表和职员表,每个职员都属于一个部门,表结构如下:

Dept表

Deptno Deptname

……

Emp表

Empno Empname Deptno

………

请使用 SQL语句查询每个部门有多少职员,要求查询结果包含两例(部门名称,人数)?解答:select d.deptname,count(*) from dept d,emp e where d.deptno=e.deptno group by d.deptno,d.deptname;

13.业务场景:存在下面的表及记录

GOODS(进货表)

GOODSID(主键) GOODSNAME MEMO

1青霉素

2西瓜霜

3创可贴

4西洋参

SU(进货表)

GOODSID(主键) SUQTY

1 60

2 70

SA(销售表)

GOODSID(主键) SAQTY

3 80

4 90

要求一:进货记录,给出SQL达到以下结果

GOODSID(主键) GOODSNAME SUQTY

1青霉素 60

2西瓜霜 70

3创可贴 0

4西洋参 0

要求二:进销对比,给出SQL达到以下结果

GOODSID(主键) GOODSNAME SUQTY SAQTY

1青霉素 60 0

2西瓜霜 70 70

3创可贴 0 80

要求三:将 GOODS.MEMO更新为[进货数量SU.SUQTY]

解答:

1)select g.goodsid,g.goodsname,s.quqty from goods g inner join sus ong.goodsid=s.goodsid;

2) select g.goodsid,g.goodsname,s.quqty,a.saqty from goods g, su s,sa a on

g.goodsid=s.goodsid and g.goodsid=a.goodsid;

3)update goods set demo=(select s.suqty from su s where s.goodsId=goods.goodsId) 14.表结构:

1)表名:apply

字段(字段名/类型/长度):

applyno varchar 8;//申请单号(关键字)

applydate bigint 8;//申请日期

state varchar 2;//申请状态

2)表名:applydetail

字段(字段名/类型/长度):

applyno varchar 8;//申请单号(关键字)

name varchar 30;//申请人姓名

idcard varchar 18;//申请人身份证号

state varchar 2;//申请状态

其中,两个表的关联字段为申请单号。

题目:

1)查询身份证号码为 440401*********的申请日期

2)查询同一个身份证号码有两条以上记录的身份证号码及记录个数

3)删除 applydetail表中所有姓李的记录

解答:

1) Select applydate from apply a join applydetail d on a.applyno=d.applyno and Idcard='440401*********';

2) select idcard,count(*) from applydetail group by idcard having count(*)>2;

3) delete from applydetail where name='李%';

15. 在 system 方案中建立表 table1,表中包含如下字段

字段名称数据类型要求

name Varchar2 非空

id Number 非空

age Number

sex Varchar2

salary Number

解答:

Create table system.tablel1 (

Id number not null,

Name varchar(8) not null,

Age number,

Sex varchar(2),

Salary number

);

16、某公司的机构结构为树型结构,对应的表结构为 TableCompany(ComCode—机构代码,UpperComCode—上级机构代码),如何查询出总公司的所有下级机构?(java或者 SQL均可)。你觉得

这种思维和设计是否合理?有什么好建议的?

答:select t1.* from TableCompany t1, TableCompany t2

Where https://www.360docs.net/doc/8812074788.html,Code = t2.UpperComCode

这种设计比较容易让人理解,但是表中的数据联系过于紧密,数据量很大,会给后期维护造成不

便,如果根据第三范式要求,将每一子公司独立成一张表,对于关系的维护和数据的管理都会变得比

较方便。

17、一个简单的论坛系统,以数据库存储如下数据:

用户名,发帖标题,发帖内容,回复标题,回复内容。

每天论坛访问量 200万左右,更新帖子 10万左右。

请给出数据库表结构设计,并结合范式简要说明设计思路。

答:用户表:存储用户信息;

用户所发的帖子表:存储用户所发的帖子;

回复表:存储对帖子所做的回复。

设计:

User:

Create table tb_user(

id number(10) primary key,

Uname varchar2(20) not null unique

);

Comments:

Create table tb_comments(

id number(10),

comments_id number(20) not null unique,

title varchar2(20) not null,

comments varchar2(255) not null,

foreign key(id) references tb_user(id)

);

Replay:

Create table tb_replay(

id number(10),

comments varchar2(255) not null,

foreign key(id) references tb_comments(comments_id)

);

思路:因为此应用所要存储的数据量比较大,所以为了避免数据的冗余,表的设计依托于第三范式。

18、有一个数据表userinfo,包含userid,username 字段,其中userid是唯一的,username 可能

重复,请写一句 sql查询语句,把重复的记录全部取出来。

userid username

1老王

2老王

3老李

4老李

5小张

要求返回记录集

userid username

1老王

2老王

3老李

4老李

答:

select * from userinfo where username in (select username from userinfo group by username

having count(username)>1);

19、建表 Department部门

字段名中文名称类型长度备注

depid部门号变长字符 10主键

depname部门名称变长字符

depcj部门平均成绩浮点型保留 2位小数

表 Employee人员表

字段名中文名称类型长度备注

empid员工号变长字符 10主键

name姓名变长字符 10

depid部门号变长字符 10

Cj成绩浮点型保留 2位小数

xorder名次整型

实现表中的记录备下面相关题目使用

Department表中嵌入记录

部门号部门名称

A001人力资源部

A002财务部

Employee表中嵌入记录

员工号姓名部门号成绩

001张三 A001 90

002李四 A001 90

003王五 A001 80

004张飞 A002 70

005刘备 A002 60

006关羽 A002 50

1)写出建表以及嵌入记录语句

2)显示 A001部门员工的姓名、成绩

3)显示所有员工的员工号、姓名、部门名称、成绩

4)将关羽的成绩修改成52分

5)按要求写视图 VdepEmpMax求各部门的最高分,显示部门号、最高分成绩

6)按要求写存储过程 SP_Calc求各部门的平均成绩,并更新到 Department表 depcj字段中 7)按要

求写存储过程 SP_Order求员工的名次,并更新到 Employee表 xorder字段中

8)按要求写视图 VdepEmp2,求各部门的前 2名,显示部门号、员工号、成绩

排序规则如下:

员工部门分数名次

张三 A001 90 1

李四 A001 90 1

张飞 A002 70 1

刘备 A002 60 2

答:

1)

create table Department(depid varchar2(20) primary key,

depname varchar2(20),

depcj number(10,2));

create table Employee(empid varchar2(20) primary key,

name varchar2(20),

depid varchar2(20),

cj number(10,2),

xorder number(10));

insert into Department(depid,depname) values('A001','人力资源部');

insert into Department(depid,depname) values('A002','财务部');

insert into Employee(empid, name, depid, cj) values('001','张三','A001',90); insert into Employee(empid, name, depid, cj) values('002','李四','A001',90); insert into Employee(empid, name, depid, cj) values('003','王五','A001',80); insert into Employee(empid, name, depid, cj) values('004','张飞','A002',70); insert into Employee(empid, name, depid, cj) values('005','刘备','A002',60); insert into Employee(empid, name, depid, cj) values('006','关羽','A002',50);

2)select name,cj from employee where depid='A001';

3)select e.empid,https://www.360docs.net/doc/8812074788.html,,d.depname,e.cj from employee e, departmentd where

e.depid=d.depid;

4)update employee set cj=52 where name='关羽';

5)

create view VdepEmpMax as (select deptid,max(cj) from employee e group by deptid) 6)

create or replace procedure SP_Calc

as

begin

update department d set depcj=(

select nvl(avg(cj),0) from employee e

where e.depid(+)=d.depid);

end;

7)

create or replace procedure SP_Order

as

begin

update employee w set xorder =(select b.rn from

(select empid,rank() over (partition by depid order by cj desc ) rn from employee) b

where w.empid=b.empid);

end;

8)

create or replace view VdepEmp2 as

select depid,name,cj,rn from

(select e.*,rank() over (partition by depid

order by cj desc) rn from employee e)

where rn<3;

20、数据库基础:

1)使用 SQL语句创建学生表 students

字段: 学号:s_id 姓名:s_name 年龄:age 班级:class 辅导员:assistant (请设计各字段类型

与长度)

2)查询学生表中年龄大于20的所有学生的学号与姓名

3)删除 0201班的所有同学

4)查询 0302班姓李的学生的个数

5)将班编号以’02’开头的所有班级的辅导员修改为‘李四’

答:1)create table students(s_id number(10) primary key,

s_name varchar(30) not null,

age number(3) not null,

class varchar(20) not null,

assistant varchar(30));

2)select s_id,s_name from students where age>20;

3)delete from students where class=’0201’;

4)select count(s_name) from students

where s_name like ‘李%’ and class='0302';

5)update students set assistant='李四' where class like '02%';

21、表名:高考信息表 students_info

准考证号科目成绩

no subject score

2006001 语文 119

2006001 数学 108

2006002 物理 142

2006001 化学 136

2006001 物理 127

2006002 数学 149

2006002 英语 110

2006002 语文 105

2006001 英语 98

2006002 化学 129

写出高考总分在 600以上的学生准考证号的 SQL

答:

select no

from students_info

group by no

having sum(score)>600;

22、有一个表 LEANR,表里有三个字段分别是学号(student_id),

课程(kc),成绩(grade)。

1).查询每一门课程的前两名

2).查询以Grade降序排列的第 31至40条记录(不需要区分课程)

3).查询表中存在课程重复 4次以上的记录,显示课程和重复的次数,并且按照重复次数的降序排列

答:

1).select student_id,kc,grade

from (select student_id,kc,grade,

row_number() over(partition by kc order by grade desc)rn from LEANR) where rn<=2;

2)select student_id,grade

from (

select lea.*,rownum rm

from (

select *

from LEANR

order by grade desc

) lea

where rownum < 41

)

where rm between 31 and 40;

3). select kc,count(kc)

from LEANR

group by kc

having count(kc)>=2

order by count(kc) desc;

23、a 部门表 b员工表

a表字段( id --部门编号 departmentName-部门名称 )

b表字段( id--部门编号 employee-员工名称 )

问题:如何一条sql语句查询出每个部门共有多少人

答:

建表语句:

create table a(

id number primary key, departmentName varchar(20)

);

create table b(

id number,

employee varchar(20)

);

insert into a values(1,'部门1'); insert into a values(2,'部门2'); insert into a values(3,'部门3'); insert into b values(1,'emp1'); insert into b values(1,'emp2');

insert into b values(1,'emp3'); insert into b values(2,'emp4'); insert into b values(2,'emp5'); insert into b values(3,'emp6');

select departmentName,count(employee) from a,b where a.id=b.id group by departmentName;

24、为管理岗位业务培训信息,建立 3个表:

S (SID,SN,SD,SA) SID,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄

C (CID,CN ) CID,CN 分别代表课程编号、课程名称

SC ( SID,CID,G ) SID,CID,G 分别代表学号、所选修的课程编号、学习成绩

1. 使用标准 SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名

2. 使用标准 SQL嵌套语句查询选修课程编号为’02’的学员姓名和所属单位

3. 使用标准 SQL嵌套语句查询不选修课程编号为’03’的学员姓名和所属单位

4. 使用标准 SQL嵌套语句查询选修全部课程的学员姓名和所属单位

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

答:

建表sql语句:

create table s(

sid int(10) primary key,

sn varchar(20) not null,

sd varchar(20) not null,

sa int(3) not null

);

create table c(

cid int(10) primary key,

cn varchar(20) not null

);

create table sc(

sid int(10) references s(sid),

cid int(10) references c(cid),

g int(10),

primary key(sid,cid)

);

insert into s values(1,"zhangsan","project",25);

insert into s values(2,"lisi","mis",26);

insert into s values(3,"wangwu","manager",27);

insert into s values(4,"zhaoliu","mis",26);

insert into c values(01,"税收基础");

insert into c values(02,"Core Java");

insert into c values(03,"NetWork");

insert into sc values(1,01,70);

insert into sc values(1,02,75);

insert into sc values(1,03,80);

insert into sc values(2,01,80);

insert into sc values(2,03,69);

insert into sc values(3,02,73);

1)

select s.sid,s.sn

from s,c,sc

where s.sid=sc.sid

and c.cid=sc.cid

and https://www.360docs.net/doc/8812074788.html,='税收基础';

2) select a.sn,a.sd

from s a, c b

where b.cid in(select c.cid from sc c where a.sid=c.sid and b.cid=c.cid)

and b.cid=02;

3) select a.sn,a.sd

from s a, c b

where b.cid not in(select c.cid from sc c where a.sid=c.sid and b.cid=c.cid) and b.cid=03;

4) select sn,sd

from s where sid in

(select sid from sc group by sid having count(cid)=(select count(cid) from c));

5) select sn,sd from s

where sid in(select sid from sc group by sid having count(distinct cid)>5);

25、请根据以下要求来完成题目:

会议室预定模块:某公司有多个会议室,以房间号区分。如果某部门需要预定会议室,则会提交预定

请求(包含预定开始使用时间、预定结束使用,所预定会议室房间号)。

设计一个表,保存会议室预定信息。

要求采用SQL语句及JAVA代码段判断在2003-3-10下午3:00~4:00 3号会议室是否空闲。请写出有关 SQL语句以及相关 JAVA的代码段。

答:

1)Sql语句:

create table meeting(

id number primary key ,

room_id varchar(10),

isUsed char,

begin timestamp,

end timestamp

);

insert into meeting values(1,'201',1,to_date('2003-03-10 15:00:00','yyyy-mm-dd hh24:mi:ss')

,to_date('2003-03-10 16:00:00','yyyy-mm-dd hh24:mi:ss'));

insert into meeting values(2,'201',1,to_date('2003-03-10 17:00:00','yyyy-mm-dd hh24:mi:ss')

,to_date('2003-03-10 22:00:00','yyyy-mm-dd hh24:mi:ss'));

2)

package com.tarena;

import java.sql.*;

public class Test {

public static void main(String[] args) {

String driverName = "oracle.jdbc.OracleDriver";

String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String username = "scott";

String pwd = "tiger";

Connection con = null;

Statement stmt = null;

ResultSet rs = null;

try {

Class.forName(driverName);

con = DriverManager.getConnection(url, username, pwd);

stmt = con.createStatement();

String sql = "select isUsed from " +

"meeting " +

"where ((begin between to_date('2003-03-10 15:00:00','yyyy-mm-dd

hh24:mi:ss') and to_date('2003-03-10 16:00:00','yyyy-mm-dd hh24:mi:ss')) " + "or(end between to_date('2003-03-10 15:00:00','yyyy-mm-dd hh24:mi:ss')

and to_date('2003-03-10 16:00:00','yyyy-mm-dd hh24:mi:ss')))" +

" and room_id=201";

if (stmt.execute(sql)) {

rs = stmt.getResultSet();

StringBuffer sb = new StringBuffer();

while (rs.next()) {

sb.append("isFree:" + rs.getInt(1) + " "); }

System.out.print(sb.toString());

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

con.close();

} catch (Exception e1) {

e1.printStackTrace();

}

}

}

}

26、下面是两个数据库表,分别记录员工姓名和工资

T_EMPLOYEE

ID NAME

2张三

3李四

5王五

·

·····

·

·····

T_SALARY

ID SALARY

2 3400

3 4300

5 2500

·····

·

·····

1.查询表 T_EMPLOYEE 中 id = 3的员工记录

2.查询表 T_EMPLOYEE 中所有员工记录

3.联合查询表 T_EMPLOYEE和 T_SALARY 中所有员工的姓名和工资记录,并按照薪水从高到低排列

答:

1).select * from t_employee where id = 3;

2).select * from t_employee;

3).select https://www.360docs.net/doc/8812074788.html,,s.salary

from t_employee e,t_salary s

where e.id=s.id

order by s.salary;

27、有三张表,学生表 S,课程表 C,学生课程表 SC,学生可以选修多门课程,一门课程可能被多个

学生选修,通过 SC表关联。

1)写出建表以及插入语句;

2)写出 SQL语句,查询选修了所有选修课程的学生;

3)写出 SQL语句,查询选修了至少 2门以上的课程的学生。

答:

1)

create table student (id number(10) primary key,name varchar2(20));

create table course (id number(10) primary key,name varchar2(20));

create table sc(sid number(10) references student(id),cid number(10) references course(id),grade number(4,2));

insert into student values(1,'feifei');

insert into student values(2,'jingjing');

insert into student values(3,'nannan');

insert into student values(4,'yuanyuan');

insert into student values(5,'jiejie');

insert into course values(1,'corejava');

insert into course values(2,'c++');

insert into course values(3,'jdbc');

insert into course values(4,'hibernate');

数据库面试题及答案

数据库面试题 1 1. 在一个查询中,使用哪一个关键字能够除去重复列值? 答案:使用distinct关键字 2. 什么是快照?它的作用是什么? 答案:快照Snapshot是一个文件系统在特定时间里的镜像,对于在线实时数据备份非常有用。快照对于拥有不能停止的应用或具有常打开文件的文件系统的备份非常重要。对于只能提供一个非常短的备份时间而言,快照能保证系统的完整性。 3. 解释存储过程和触发器 答案: 存储过程是一组Transact-SQL语句,在一次编译后可以执行多次。因为不必重新编译Transact-SQL语句,所以执行存储过程可以提高性能。 触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。 4. SQL Server是否支持行级锁,有什么好处? 答案:支持动态行级锁定 SQL Server 2000动态地将查询所引用的每一个表的锁定粒度调整到合适的级别。当查询所引用的少数几行分散在一个大型表中时,优化数据并行访问的最佳办法是使用粒度锁,如行锁。但是,如果查询引用的是一个表中的大多数行或所有行,优化数据并行访问的最佳办法可以是锁定整个表,以尽量减少锁定开销并尽快完成查询。 SQL Serve 2000通过为每个查询中的每个表选择适当的锁定级别,在总体上优化了数据并发访问。对于一个查询,如果只引用一个大型表中的几行,则数据库引擎可以使用行级锁定;如果引用一个大型表的几页中的多行,则使用页级锁定;如果引用一个小型表中的所有行,则使用表级锁定。 5. 数据库日志干什么用,数据库日志满的时候再查询数据库时会出现什么情况。答案:每个数据库都有事务日志,用以记录所有事务和每个事务对数据库所做的修改。 6. 存储过程和函数的区别? 答案:存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表 7. 事务是什么? 答案:事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务: (1) 原子性 事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

数据库笔试题 - 答案

XXXX感谢您对本套试题的回答,首先请您填写上您的姓名(____________),本套试题将作为XXXX入职的参考,多谢您的重视。本套试题分三部分:填空题(10分)、选择题(20分),SQL 基础题(30)、简答题(20)、综合题(30)。时间60分钟,满分110分。 一、填空题(每题2分,共10分) 1. 索引字段值不唯一,应该使用的索引类型为( 普通索引 ) 2. 只有满足联接条件的记录才包含在查询结果中,这种联接为( 内联接) 3. E-R模型的组成包括那些元素( 实体 )( 属性)( 关系) 4. 事务所具有的特性有( 原子性)( 一致性)( 隔离性)( 持久性) 5、结构化程序设计的三种基本逻辑结构是(顺序结构),(选择结构),(循环结构)。 二、选择提(每题1分,共20分) 1、在删除整表数据,同时保留表结构时,采用( C )的效率比( A )要高; A. delete B. drop table C. truncate Table 2、数据库管理系统中,能实现对数据库中的数据进行插入/修改/删除的功能称为(C); A.数据定义功能 B.数据管理功能 C.数据操作功能 D.数据控制功能 3、2 4、在关系模型中,实现"关系中不允许出现相同的元组"的约束是通过(B)。 A:候选键B:主键C:外键D:超键 4、数据库管理系统DBMS S是( D); A.信息管理的应用软件 B.数据库系统+应用程序 C.管理中的数据库 D.管理数据的软件 5、关系数据库中,实现表与表之间的联系是通过(B)。 A、实体完整性规 B、参照完整性规则 C、用户自定义的完整性 D、值域 6、设有部门和职员两个实体,每个职员只能属于一个部门,一个部门可以有多名职员,则部门与职员实体之间的联系类型(B)。 A、m:n B、1:m C、m:1 D、1:1 7、设有课程和学生两个实体,每个学生可以选修多个课程,一个课程可以有多名学生选修,则课程与学生实体之间的联系类型( A )。 A、m:n B、1:m C、m:1 D、1:1 8、如果一个班只能有一个班长,而且一个班长不能同时担任其它班的班长,班级和班长两个实体之间的关系属于(D)。 A、m:n B、1:m C、m:1 D、1:1 9、索引字段值不唯一,应该选择的索引类型为( B )。 A:主索引 B:普通索引C:候选索引D:唯一索引 10、如果指定参照完整性的删除规则为"级联",则当删除父表中的记录时( C )。 A:系统自动备份父表中被删除记录到一个新表中 B:若子表中有相关记录,则禁止删除父表中记录 C:会自动删除子表中所有相关记录

数据库面试题数据库的面试题及答案

数据库面试题:数据库的面试题及答案 疯狂代码 https://www.360docs.net/doc/8812074788.html,/ ?:http:/https://www.360docs.net/doc/8812074788.html,/DataBase/Article25003.html . 数据库切换日志的时候,为什么一定要发生检查点?这个检查点有什么意义? 答:触发dbwr的执行,dbwr会把和这个日志相关的所有脏队列写到数据文件里,缩短实例恢复所需要的时间。 2. 表空间管理方式有哪几种,各有什么优劣。 答:字典管理方式和本地管理方式,本地管理方式采用位图管理extent,减少字典之间的竞争,同时避免了碎片。 本地管理表空间与字典管理表空间相比,其优点如下: 1).减少了递归空间管理; 2).系统自动管理extents大小或采用统一extents大小; 3).减少了数据字典之间的竞争; 4).不产生回退信息; 5).不需合并相邻的剩余空间; 6).减少了空间碎片; 7).对临时表空间提供了更好的管理。 3. 本地索引与全局索引的差别与适用情况。 答:对于local索引,每一个表分区对应一个索引分区,当表的分区发生变化时,索引的维护由Oracle自动进行。对于global索引,可以选择是否分区,而且索引的分区可以不与表分区相对应。当对分区进行维护操作时 ,通常会导致全局索引的INVALDED,必须在执行完操作后REBUILD。Oracle9i提供了UPDATE GLOBAL INDEXES语句,可以使在进行分区维护的同时重建全局索引。 4. 一个表a varchar2(1),b number(1),c char(2),有100000条记录,创建B-Tree索引在字段a上,那么表与索引谁大?为什么? 答:这个要考虑到rowid所占的字节数,假设char总是占用2字节的情况,比较rowid,另外,table和index在segment free block的管理也有差别。 5. Oracle9i的data guard有几种模式,各有什么差别。 答:三种模式: 最大性能(maximize performance):这是data guard默认的保护模式。primay上的事务commit前不需要从standby上收到反馈信息。该模式在primary故障时可能丢失数据,但standby对primary的性能影响最小。 最大可用(maximize availability):在正常情况下,最大可用模式和最大保护模式一样;在standby不可用时 ,最大可用模式自动最大性能模式,所以standby故障不会导致primay不可用。只要至少有一个standby可用的情况下,即使primarydown机,也能保证不丢失数据。 最大保护(maximize protection):最高级别的保护模式。primay上的事务在commit前必须确认redo已经传递到至少一个standby上,如果所有standby不可用,则primary会挂起。该模式能保证零数据丢失。 6. 执行计划是什么,查看执行计划一般有哪几种方式。 答:执行计划是数据库内部的执行步骤: set autotrace on select * from table

sql数据库基础面试题复习试题考试题_全

不定项选择题(针对以下题目,请选择最符合题目要求的答案,每道题有一项或二项正确答案。针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分。题量为50道,每题2分,总分为100分。) 第一章 1、是SQLServer数据库的主数据文件的扩展名。(选择一项) A、.sql B、.mdb C、.ldf D、.mdf 2、在SQL Server 2005中,有系统数据库和用户数据库,下列不属于系统数据库的是()。 (选择一项) A、master B、pubs C、model D、msdb 3、当安装完SQL Server2005数据库时,系统默认当前的超级管理员是( ) (选择一项) A、sa B、master C、administrator D、super 4、在使用SQL Server2005数据库时,有时需要将本机的数据库移动到其他机器上,恢复成对应的数据库使用。移动数据库分两步进行,应包括()和附加数据库(选择一项)A、分离数据库 B、删除数据库 C、新建数据库 D、合并数据库 5、在SQL Server2005中,附加数据库操作是指()(选择一项) A、把SQL Server 数据库文件保存为其他数据文件 B、根据数据库物理文件中的信息,把数据库在SQL Server 2005中恢复 C、把所有该数据库表的数据清空 D、把数据库删除掉 6、某单位由不同的部门组成,不同的部门每天都会生产一些报告、报表等数据,以为都采用纸张的形式来进行数据的保存和分类,随着业务的发展,这些数据越来越多,管理这些报告越来越费力,此时应考虑()(选择一项) A、由多个人来完成这些工作 B、在不同的部门中,由专门的人员去管理这些数据 C、采用数据库系统来管理这些数据 D、把这些数据统一成一样的格式 7、在SQL Server 2005中,对于数据库的定义正确的是()(选择一项) A、数据库是用来描述事物的符号记录 B、数据库是位于用户与操作系统之间的一层数据管理软件

数据库笔试题及标准答案,常见数据库面试题

数据库笔试卷及答案 第一套 一.选择题 1. 下面叙述正确的是______。 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)作为描述工具的软件开发阶段是______。 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数据库文件是______。 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、所有工程的包含文件将组合为一个单一的应用程序文件

SQL数据库面试题以和答案

Student(S#,Sname,Sage,Ssex)学生表 S#:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生性别 Course(C#,Cname,T#)课程表 C#:课程编号 Cname:课程名称 T#:教师编号 SC(S#,C#,score)成绩表 S#:学号 C#:课程编号 score:成绩 Teacher(T#,Tname)教师表 T#:教师编号: Tname:教师名字 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号 select a.S# from (select S#,score from SC where C#='001')a, (select s#,score from SC wh ere c#='002')b Where a.score>b.score and a.s# = b.s#; 2、查询平均成绩大于60分的同学的学号和平均成绩 select S#, avg(score) from sc group by S# having avg(score)>60 3、查询所有同学的学号、姓名、选课数、总成绩 select student.S#, student.Sname, count(sc.C#), sum(score) from student left outer join SC on student.S# = SC.S# group by Student.S#, Sname

4、查询姓‘李’的老师的个数: select count(distinct(Tname)) from teacher where tname like '李%'; 5、查询没有学过“叶平”老师可的同学的学号、姓名: select student.S#, student.Sname from Student where S# not in (select distinct(SC.S#) from SC,Course,Teacher where sc.c#=course.c# AND teacher.T#=course.T# AND Teahcer.Tname ='叶平'); 6、查询学过“叶平”老师所教的所有课的同学的学号、姓名:select S#,Sname from Student where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平')); 7、查询学过“011”并且也学过编号“002”课程的同学的学号、姓名: select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002'); 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名: Select S#,Sname

常见SQL数据库面试题和答案(一)

常见SQL数据库面试题和答案(一) Student(S#,Sname,Sage,Ssex) 学生表S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别 Course(C#,Cname,T#) 课程表C#,课程编号;Cname:课程名字;T#:教师编号 SC(S#,C#,score) 成绩表S#:学号;C#,课程编号;score:成绩 Teacher(T#,Tname) 教师表T#:教师编号;Tname:教师名字 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号; select # from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where > and #=#; 2、查询平均成绩大于60分的同学的学号和平均成绩; select S#,avg(score) from sc group by S# having avg(score) >60; 3、查询所有同学的学号、姓名、选课数、总成绩; select #,,count#),sum(score) from Student left Outer join SC on #=# group by #,Sname 4、查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher where Tname like '李%'; 5、查询没学过“叶平”老师课的同学的学号、姓名; select #, from Student where S# not in (select distinct( #) from SC,Course,Teacher where #=# and #=# and ='叶平'); 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; select #, from Student,SC where #=# and #='001'and exists( Select * from SC as SC_2 where #=# and #='002'); 7、查询学过“叶平”老师所教的所有课的同学的学号、姓名; select S#,Sname from Student where S# in (select S# from SC ,Course ,Teacher where #=# and #=# and ='叶平' group by S# having count#)=(select count(C#) from Course,Teacher where #=# and Tname='叶平')); 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;Select S#,Sname from (select #,,score ,(select score from SC SC_2 where #=# and #='002') score2

数据库面试题答案

数据库 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表示出错或到了最后。

数据库面试题

1.1.数据库 1.1.1.数据库 员工表的定义如下: Last_name VARCHAR2(25) First_name VARCHAR2(25) Salary NUMBER(7,2) 现查询显示未达到平均工资的员工姓名.请考察下面的SQL语句: SELECT last_name, first_name FROM employee WHERE salary < avg(salary); 对这条SQL做以下哪项修改能够达到目的? A.改变WHERE子句 B.把聚合函数移到SELECT列表中,并增加GROUP子句 C.通过子查询得出平均工资水平并在父查询的WHERE子句中比较 D.把聚合函数移到SELECT列表中,并增加GROUP BY子句和HAVING子句 注:SELECT last_name, first_name FROM employee where sal<(Select avg(salary) from employee); 1.1. 2.数据库 要从员工表中查询所有姓Smith的人,但是并不能确定所有Smith的大小写,以下哪条语句能解决问题? A.SELECT last_name, first_name FROM emp WHERE last_name=’smith’ B.SELECT last_name, first_name FROM emp WHERE UPPER(last_name)=’smith’ C.SELECT last_name, first_name FROM emp WHERE last_name=UPPER(‘smith’) D.SELECT last_name, first_name FROM emp WHERE LOWER(last_name)=’smith’ 1.1.3.delete from tablea & truncate table tablea的区别( ) A.没有区别 B.速度相同 C.速度不同 D.日志记录不同 1.1.4.下列哪些(或哪个)不是PL/SQL的组成部分() A.DECLARE B.CATCH C.THROW D.EXCEPTION 1.1.5.SQL语句中修改表结构的命令是______。 A.MODIFY TABLE

SQL数据库面试题目及其答案

1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。 它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2.什么是存储过程?用什么来调用? 答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。 3.索引的作用?和它的优点缺点是什么? 答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。 缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。 3。什么是内存泄漏? 答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。 4.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么? 答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。 5.什么是事务?什么是锁? 答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。 要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。 锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

Oracle数据库DBA面试题及答案_经典

1.OracleDBA面试题之一解释冷备份和热备份的不同点以及各自的优点 解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。 冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘) 2. 你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢? 解答:重建控制文件,用带backup control file 子句的recover 命令恢复数据库。 3. 如何转换init.ora到spfile? 解答:使用create spfile from pfile 命令 4. OracleDBA面试题:解释data block , extent 和 segment的区别(这里建议用英文术语) 解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象拥有的所有extents 被称为该对象的segment. 5. 给出两个检查表结构的方法 解答:1、DESCRIBE命令 2、DBMS_METADATA.GET_DDL 包 6. 怎样查看数据库引擎的报错 解答:alert log. 7. 比较truncate和delete 命令 解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作需要rollback segment 且花费较长时间. 8. 使用索引的理由 解答:快速访问表中的data block 9. 给出在STAR SCHEMA中的两种表及它们分别含有的数据 解答:Fact tables 和dimension tables. fact table 包含大量的主要的信息而dimension tables 存放对fact table 某些属性描述的信息

数据库试题及答案

一、选择题 1.在数据库系统中,把可以相互区别的客观事物称为(D ) A.属性 B. 字段 C.文件 D.实体 2.数据库的存储设备和存取方法变化不影响整体逻辑结构的特点,称为数据库的( D ) A.实体独立性B.物理数据独立性 C.客观独立性 D.逻辑数据独立性 3.学生社团可以接纳多名学生参加,但每个学生只能参加一个社团,从社团到学生之间的联系类型是( B ) A. 多对多 B. 一对多 C. 多对一 D. 一对一 4.如果关系模式R上有函数依赖AB→C和A→C,则R中存在(B ) A. 完全依赖 B.部分依赖 C. 传递依赖 D.多值依赖 5.关系模型的参照完整性约束是指(C) A.限制引用一个关系中的不同元组数据 B.限制引用不同关系中的元组数据 C.限制一个关系引用与之联系关系中不存在的元组数据 D.限制两个关系间的互相引用 6.在嵌入式SQL中,为了把集合操作转换成单记录处理方式,引进了以下哪个概念( B )

A.宿主语言B.游标 语言语言 7、单个用户使用的数据视图的描述称为(A )。 A. 外模式 B. 概念模式 C. 内模式 D. 存储模式 8.在SQL中,下列涉空值的操作,不正确的(D:AGE=NULL) 9.数据库系统的独立性是指(B) A. 不会因为数据的变化而影响应用程序 B. 不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序 C. 不会因为数据存储策略的变化而影响数据存储结构 D. 不会因为某些数据逻辑结构的变化而影响应用程序 10.设有T1和T2两个事务,若并发操作如下,则下面评价中正确的是(C )。 T1 T2 ①读A=100,B=5 ②读A=100 A=A*2 回写 ③求A+B=105,验证错 A. 该操作不存在问题 B. 该操作丢失修改 C. 该操作不能重复读 D. 该操作读“脏数据”

数据库面试题

1.事务四大特性 原子性,要么执行,要么不执行 隔离性,所有操作全部执行完以前其它会话不能看到过程 一致性,事务前后,数据总额一致 持久性,一旦事务提交,对数据的改变就是永久的 2.数据库隔离级别 脏读:事务B读取事务A还没有提交的数据 不可重复读:两次事务读的数据不一致 幻读:事务A修改了数据,事务B也修改了数据,这时在事务A看来,明明修改了数据,咋不一样 3.MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景 4.索引有B+索引和hash索引 5.聚集索引和非聚集索引

6.索引的优缺点,什么时候使用索引,什么时候不能使用索引 索引最大的好处是提高查询速度, 缺点是更新数据时效率低,因为要同时更新索引 对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。 7.InnoDB索引和MyISAM索引的区别 一是主索引的区别,InnoDB的数据文件本身就是索引文件。而MyISAM的索引和数据是分开的。二是辅助索引的区别:InnoDB的辅助索引data域存储相应记录主 8.索引的底层实现(B+树,为何不采用红黑树,B树)重点 树区别 红黑树增加,删除,红黑树会进行频繁的调整,来保证红黑树的性质,浪费时间 B树也就是B-树B树,查询性能不稳定,查询结果高度不致,每个结点保存指向真实数据的指针,相比B+树每一层每屋存储的元素更多,显得更高一点。 B+树B+树相比较于另外两种树,显得更矮更宽,查询层次更浅 9.B+树的实现 一个m阶的B+树具有如下几个特征: 1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。 2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。 3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素10.为什么使用B+Tree 索引查找过程中就要产生磁盘I/O消耗,主要看IO次数,和磁盘存取原理有关。根据B-Tree的定义,可知检索一次最多需要访问h个节点。数据库系统的设计者巧妙利用了磁

SQL Server数据库笔试题和答案

一单词解释(2分/个) 34分 Data 数据Database 数据库RDBMS 关系数据库管理系统GRANT 授权 REVOKE 取消权限DENY 拒绝权限DECLARE 定义变量PROCEDURE存储过程 事务Transaction 触发器TRIGGER 继续continue 唯一unqiue 主键primary key 标识列identity 外键foreign key 检查check 约束constraint 二编写SQL语句(5分/题) 50分(包含笔试题问题与解答答案) 1) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话 Create table stu (学号int , 姓名varchar(8), 年龄int, 性别varchar(4), 家庭地址varchar(50), 联系电话int ); 2) 修改学生表的结构,添加一列信息,学历 Alter table stu add 学历varchar(6); 3) 修改学生表的结构,删除一列信息,家庭住址 Alter table stu drop column 家庭地址 4) 向学生表添加如下信息: 学号姓名年龄性别联系电话学历 1A22男123456小学 2B21男119中学 3C23男110高中 4D18女114大学 Insert into stu values(1,’A’,22,’男’,123456,’小学’) Insert into stu values(2,’B’,21,’男’,119,’中学’) Insert into stu values(3,’C’,23,’男’,110,’高中’) Insert into stu values(4,’D’,18,’女’,114,’大学’) 5) 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专” Update stu set 学历=’大专’ where 联系电话like ‘11%’ 6) 删除学生表的数据,姓名以C开头,性别为‘男’的记录删除 Delect from stu where 性别=’男’ and 姓名like ‘c%’ 7) 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名与学号示出来Select 姓名,学号from stu where 年龄<22 and 学历=’大专’ 8) 查询学生表的数据,查询所有信息,列出前25%的记录

数据库试题及答案

《数据库技术与应用》样题 一、选择题( 共30 分,1--20 每小题1 分,21—25 每小题2 分。下列各题A)、B)、 C)、D)四个选项中,只有一个选项是正确的) 1 在SQL Server 中,关于视图的正确叙述是 A)视图与数据库表相同,用来存储数据B)视图不能同数据库表进行连接操作 C)在视图上不能进行更新操作D)视图是从一个或多个数据库表导出的虚拟表 2 SQL 是那几个英文单词的缩写 A)Standard Query LanguageB)Structured Query Language C) Select Query LanguageD)以上都不是 3 不属于SQL Server 系统全局变量的是()。 A、@@Error B、@@Connection C、@@Fetch_Status D、@Records 4 下面描述错误的是() A、每个数据文件中有且只有一个主数据文件 B、日志文件可以存在于任意文件组中 C、主数据文件默认为primary 文件组 D、文件组是为了更好地实现数据库文件组织 5 SQL Server 数据库文件有三类,其中主数据文件的后缀为() A、.mdf B、.ldf C、.ndf D、.idf 6、下面标识符不合法的是() A、[my delete] B、_mybase C、$money D、trigger1 7 下面字符串能与通配符表达式[ABC]%a 进行匹配的是() A、BCDEF B、A_BCD C、ABC_a D、A% 8、下面对索引的相关描述正确的是()列值唯一的列适合间索引 A、经常被查询的列不适合建索引 B、列值惟一的列适合建索引 C、有很多重复值的列适合建索引 D、是外键或主键的列不适合建索引 9、在“连接”组中有两种连接认证方式,其中在()方式下,需要客户端应用程序连接 时提供登录时需要的用户标识和密码。 A、Windows 身份验证 B、SQL Server 身份验证 C、以超级用户身份登录时 D、其他方式登录时 10、索引是在基本表的列上建立的一种数据库对象,它同基本表分开存储,使用它能够加快数据的()速度。 A、插入 B、修改 C、删除 D、查询在where子句中出现频率较高的列应尽量创建索引 11、以下哪种情况应尽量创建索引() A、在Where 子句中出现频率较高的列 B、具有很多NULL 值的列 C、记录较少的基本表 D、需要更新频繁的基本表 12、域完整性用于保证给定字段中数据的有效性,它要求表中指定列的数据具有正确的数据类型、格式和有效的()。 A、数据值 B、数据长度 C、取值范围 D、以上都不是 13 以下不属于表之间定义关系的是 A)一对一关系B) 一对多关系C) 多对多关系D) 少对多关系 14 目前数据库有三种基本的数据模型是________ 。 A、层次模型、网络模型、关系模型 B、对象模型、网络模型、关系模型 网络模型、对象模型、层次模型D、层次模型、关系模型、对象模型 15 从“产品”表里查询出价格高于产品名称为“海天酱油”的产品的记录,此SQL 语句为 A、SELECT * FROM 产品WHERE 价格>海天酱油

Oracle数据库面试题目

Oracle常见面试题 1、对数据库SQL2005、ORACLE熟悉吗? SQL2005是微软公司的数据库产品。是一个RDBMS数据库,一般应用在一些中型数据库的应用,不能跨平台。 ORACLE是ORACLE公司的数据产品,支持海量数据存储,支持分布式布暑,支持多用户,跨平台,数据安全完整性控制性能优越,是一个ORDBMS,一般用在大型公司。 2、能不能设计数据库?如何实现数据库导入与导出的更新 使用POWERDISINE工具的使用,一般满足第三范式就可以了。EXP与IMP数据库的逻辑导入与导出 3、如何只显示重复数据,或不显示重复数据 显示重复:select * from tablename group by id having count(*)>1 不显示重复:select * from tablename group by id having count(*)=1 4、什么是数据库的映射 就是将数据库的表与字段对应到模型层类名与属性的过程. 5、写分页有哪些方法,你一般用什么方法?用SQL语句写一个分页? 如何用存储过程写分页? 在SQLSERVER中使用TOP分页,在ORACLE中用ROWNUM,或分析函数 ROW_NUMBER 使用TOP: select top 20,n.* from tablename n minus select top 10,m.* from tablename m 使用分析函数: select * from (select n.*,row_number() over(order by columnname) num from tablename n) where num>=10 and num <=20; 使用过程时,只要将分页的范围用两个参数就可以实现。在ORACLE中,要将过程封装在包里,还要用动态游标变量才能实现数据集的返回。 6、ORACLE中左连接与右连接 左连接:LEFT JOIN 右连接:RIGHT JOIN select n.column,m.column from tablename1 n left join tablename2 m on n.columnname=m.columnname 用WHERE实现: select n.column,m.column from tablename1 n,tablename2 m where n.columnname(+)=m.columnname

Oracle数据库DBA面试题

数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复 操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘) 2. 你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢 解答:重建控制文件,用带backup control file 子句的recover 命令恢复数据库。 3. 如何转换到spfile 解答:使用create spfile from pfile 命令 . 4. 解释data block , extent 和segment的区别(这里建议用英文术语) 解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一 个数据库对象拥有的所有extents被称为该对象的segment. 5. 给出两个检查表结构的方法 解答:1、DESCRIBE命令 2、包 6. 怎样查看数据库引擎的报错 解答:alert log. 7. 比较truncate和delete 命令 解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要rollback segment .而Delete是DML操作 , 需要rollback segment 且花费较长时间. 8. 使用索引的理由 解答:快速访问表中的data block 9. 给出在STAR SCHEMA中的两种表及它们分别含有的数据 解答:Fact tables 和dimension tables. fact table 包含大量的主要的信息而dimension tables 存放对fact table 某些属性描述的

sql数据库面试题及答案

sql数据库面试题及答案 【篇一:sql数据库经典面试题(笔试题)】 =txt>1.一道sql语句面试题,关于group by 表内容: 2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果, 该如何写sql语句? 胜负 2005-05-09 2 2 2005-05-10 1 2 ------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values(2005-05-09,胜) insert into #tmp values(2005-05-09,胜) insert into #tmp values(2005-05-09,负) insert into #tmp values(2005-05-09,负) insert into #tmp values(2005-05-10,胜) insert into #tmp values(2005-05-10,负) insert into #tmp values(2005-05-10,负) 1)select rq, sum(case when shengfu=胜 then 1 else 0 end)胜,sum(case when shengfu=负 then 1 else 0 end)负 from #tmp group by rq 2) select n.rq,n.勝,m.負 from ( select rq,勝=count(*) from #tmp where shengfu=胜group by rq)n inner join (select rq,負=count(*) from #tmp where shengfu=负group by rq)m on n.rq=m.rq 3)select a.col001,a.a1 胜,b.b1 负 from (select col001,count(col001) a1 from temp1 where col002=胜group by col001) a,

相关文档
最新文档