数据库面试题.docx

上传人:b****8 文档编号:11152388 上传时间:2023-02-25 格式:DOCX 页数:23 大小:35.85KB
下载 相关 举报
数据库面试题.docx_第1页
第1页 / 共23页
数据库面试题.docx_第2页
第2页 / 共23页
数据库面试题.docx_第3页
第3页 / 共23页
数据库面试题.docx_第4页
第4页 / 共23页
数据库面试题.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数据库面试题.docx

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

数据库面试题.docx

数据库面试题

1.1.数据库

1.1.1.数据库【炎黄盈动】

员工表的定义如下:

Last_nameVARCHAR2(25)

First_nameVARCHAR2(25)

SalaryNUMBER(7,2)

现查询显示未达到平均工资的员工姓名.请考察下面的SQL语句:

SELECTlast_name,first_nameFROMemployeeWHEREsalary

对这条SQL做以下哪项修改能够达到目的?

A.改变WHERE子句

B.把聚合函数移到SELECT列表中,并增加GROUP子句

C.通过子查询得出平均工资水平并在父查询的WHERE子句中比较

D.把聚合函数移到SELECT列表中,并增加GROUPBY子句和HAVING子句

1.1.2.数据库【炎黄盈动】

要从员工表中查询所有姓Smith的人,但是并不能确定所有Smith的大小写,以下哪条语句能解决问题?

A.SELECTlast_name,first_nameFROMempWHERElast_name=’smith’

B.SELECTlast_name,first_nameFROMempWHEREUPPER(last_name)=’smith’

C.SELECTlast_name,first_nameFROMempWHERElast_name=UPPER(‘smith’)

D.SELECTlast_name,first_nameFROMempWHERELOWER(last_name)=’smith’

1.1.3.deletefromtablea&truncatetabletablea的区别()【中美寰宇】

A.没有区别

B.速度相同

C.速度不同

D.日志记录不同

1.1.4.下列哪些(或哪个)不是PL/SQL的组成部分()【四川银海】

A.DECLARE

B.CATCH

C.THROW

D.EXCEPTION

1.1.5.SQL语句中修改表结构的命令是______。

【盈盛科技】【中科金财】

A.MODIFYTABLE

B.MODIFYSTRUCTURE

C.ALTERTABLE

D.ALTERSTRUCTURE

1.1.6.对数据库中表null的理解错误的是()【德邦物流】

A.null等价于没有任何值,是未知数。

B.对空值做加、减、乘、除等运算操作,结果仍为空

C.比较时使用关键字用“==null”和“!

=null”

D.比其他数据都大所以降序排序时NULL值总是排在最前但是在mySQL中NULL是最小的。

1.1.7.对事务回滚的正确描述是_____。

【赢璟网络】

A.将该事务对数据库的修改进行恢复

B.将事务对数据库的更新写入硬盘

C.跳转到事务程序的开头重新执行

D.将事务中修改的变量值恢复到事务开始时的初值

1.1.8.sql语句selectlast_name||’salaryis’||salaryfromemployees查询结果()【德邦物流】

Employees表结构如下:

A.King‘salaryis’24000

B.king24000

C.kingsalaryis24000

D.sql语句语法错误

1.1.9.{SQL题目}在pubs数据库titles表的notes列中搜索以字符串"50%"开头的所有记录,请选择以下正确的语句:

()(选择1项)【国研网络】

A.SELECT*FROMtitlesWHEREnotesLIKE'50%'

B.SELECT*FROMtitlesWHEREnotesLIKE'50/%%'ESCAPE'/'

C.Escape对转意进行说明;

D.SELECT*FROMtitlesWHEREnotesLIKE'50%'ESCAPE'%'

E.SELECT*FROMtitlesWHEREnotesLIKE'50%%%'ESCAPE'%'

1.1.10.如果A为null则返回B,否则返回A,应该使用下列哪个函数?

(   )【四川银海】

A.NULLIF(A,B)

B.NVL(A,B)

C.NVL2(A,B)

D.DECODE(A,B)

1.1.11.唯一标识表中的记录的一个或者一组列被称为()【中软融鑫】

A.外键

B.主键

C.关系

D.度

1.1.12.只有满足联接条件的记录才包含在查询结果中,这种联接为()【中软融鑫】

A.左联接

B.右联接

C.内部联接

D.完全联接

1.1.13.下列语句不属于ORACLEDDL的是()【掌中浩阅】

A.RENAME

B.TRUNCATE

C.MERGE

D.Alter

1.1.14.为简化用户的查询操作,又不增加数据的存储空间,常用方法为创建()【中科金财】

A.另一个表(TABLE)

B.游标

C.视图

D.索引

1.1.15.____是DBMS的基本单位,它是用户定义的一组逻辑一致的程序序列。

(C)【中科金财】

A.程序

B.命令

C.事务

D.文件

1.1.16.数据库中有以下数据:

ID(pri)(Auto)namepass

1aaa111

2bbb222

3ccc333

a.请用一条SQL语句将现有的三条记录复制一下,达到以下的效果:

insertintofooselectseq_foo.nextval,name,passfromfoo;

可适于拷贝数据库,反复运行还可将数据以几何级数增加用于测试;

ID(pri)(Auto)namepass

1aaa111

2bbb222

3ccc333

4aaa111

5bbb222

6ccc333

b.再用sql语句删除重复记录。

Deletefromfoowhereidnotin(Selectmin(id)fromfoogroupbyname,pass);

1.1.17.表名:

高考信息表

准考证号  科目    成绩

2006001    语文    119

2006001    数学    108

2006002    物理    142

2006001    化学    136

2006001    物理    127

2006002    数学    149

2006002    英语    110

2006002  语文    105

2006001  英语      98

2006002   化学    129

……

给出高考总分在600以上的学生准考证号。

Selectnum,sum(score)fromxinxibiaogroupbynumhavingsum(score)>600;

若还要按学号过滤,先过滤再分组,效率比较高;

Selectnumfromxinxibiaonumlike‘2006%’groupbynumhavingsum(score)>600;

1.1.18.数据库有两张表一个学生表(id,name,sex),一个学生成绩表(id,chineses,English,math),要求查询学生基本信息以及各科成绩和总成绩,总成绩要求在200到300之间,学生姓名降序。

【锐志信息】

Selectc+e+mFromstudentsjoingradegon(s.id=g.id)

1.1.19.现有关系数据库表如下:

1.1.20.垂直拆分举例:

网站登录页面,只存用户名,密码,主键等,提高效率;

1.1.21.水平拆分举例:

账单,每月一查;

学生表(学号char(6),姓名,性别,身份证号)

课程表(课号char(6),名称)

成绩表(id,学号,课号,分数)

用sql实现下面2题:

1.检索姓马的女同学情况(姓名,身份证号)

2.检索有一门或一门以上课程成绩大于等于90的所有学生信息(学号,姓名)

1Selectdistinctstu.id,namefromstudentjoinscoreonstudent.id=score.sidwherescore>=90

2select*fromstuwhereexists(select1fromscorewheresid=stu,idandscore>=90)

3都大于90;select*fromstuwhereidin(selectstu.idfromscoregroupbystu,idhavingmin(score)>=90)

4部分课程大于90;

selectstu.name,stu.sexfromstuwhereexists(select1fromscorewhersid=stu.idandscore>=90groupbystu,idhavingcount(cid)>=3)

1.1.22.有三张表,学生表Student,课程Course,学生课程表SC,学生可以选修多门课程,一门课程可以被多个学生选修,通过SC表关联。

1)写出建表语句;

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

Select*fromstuwhereexists(Selectfromscwheresid=stu.idGroupbysidhavingcount(cid)=(selectcount(c.id)fromcoursec));

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

1.1.23.表class和student结构如下,请完成后续SQL语句【兴侯】

表class

属性

类型(长度)

默认值

约束

含义

CLASSNO

数值

(2)

主键

班级编号

CNAME

变长字符(10)

非空

班级名称

表student

属性

类型(长度)

默认值

约束

含义

STUNO

数值(8)

主键

学号

SNAME

变长字符(12)

非空

姓名

SEX

字符

(2)

性别

BIRTHDAY

字符(8)

生日

EMAIL

变长字符(20)

唯一

电子邮件

SCORE

数值(5,2)

检查

成绩

CLASSNO

数值

(2)

外键,关联到表CLASS的CLASSNO主键

班级编号

 数据

STUNO

SNAME

SEX

BIRTHDAY

EMAIL

SCORE

CLASSNO

21

tom

19790203

tom@

89.50

1

56

jerry

默认值

2

a.修改表student的数据,将所有一班的学生成绩加10分。

Updatestudentsetscore=score+10whereclassno=1;

b.删除表student的数据,将所有3班出生日期晚于1981年5月12日的记录删除。

Deletefromstudentwhereclassno=3andbirthday>to_date(“1982-5-12”.”yyyy-mm-dd”)

c.按班级升序排序,成绩降序排序,查询student表的所有记录。

d.查询student表中所有三班成绩为空的学生记录。

e.表student与class联合查询,要求查询所有学生的学号,姓名,成绩,班级名称。

f.按班级编号分组统计每个班的人数、最高分、最低分、平均分,按平均分降序排序。

g.查询学生记录中所有成绩高于本班学生平均分的记录。

Selectstu.id,stu,nameFromstudentjoin(selectclassno,avg(score)avg_scorefromstudentgroupbyclassno)onstu.classno=cwherestu.score>avg_score;

h.查询所有学生记录中成绩前十名的学生的学号、姓名、成绩、班级编号。

Select*from(selectstu.id,stu.name,rownumnumfromstuorderbyscoredesc)wherenum<10;

1.1.24.有两张表student和score【易特英才】

Student:

学号,姓名,性别,年龄

Score:

学号,语文,数学,英语

1.查询张三的学号,姓名,性别,语文,数学,英语

2.查询语文比数学好的同学

3.查出姓名相同的学生学号

1.1.25.对一个用户登录模块,要求每个用户只允许3次登陆错误,超过则将锁定此帐户。

【炎黄盈动】

1数据库设计

USER(id,name,passwd,flag(错误次数0,1,2,3),lock_time)

Selectcount(*)fromUSERwherename=?

andpasswd=?

and(flag!

=3orflag=3and(sysdate-lock_time)>10*60*1000)

?

-->输入的用户名;

?

-->输入的密码加密后;

2主要的更改;

1.1.26.数据脚本

createtabletest1

piciVARCHAR2(30),

busicodeVARCHAR2(50),

amtNUMBER,

flagVARCHAR2

(1)

);

--Addcommentstothecolumnscommentoncolumntest1.flagis'1表示成功2表示失败';

insertintotest1values('20130201','0201111',10,1);

insertintotest1values('20130201','0201112',5,2);

insertintotest1values('20130201','0201113',10,2);

insertintotest1values('20130201','0201114',5,1);

insertintotest1values('20130202','0202111',10,1);

insertintotest1values('20130202','0202112',20,1);

insertintotest1values('20130202','0202113',20,1);

insertintotest1values('20130202','0202114',20,1);

insertintotest1values('20130203','0203111',10,2);

insertintotest1values('20130203','0203111',10,2);

insertintotest1values('20130203','0203111',10,2);

实现要求:

标识位flag1表示扣款成功2表示扣款失败一句sql查询出每天扣款成功笔数,成功金额,失败笔数,失败金额

Selectcount(decode(flag,1,1,null),sum(decode(flag,1,amt,0)),count(decode(flag,2,1,null),sum(decode(flag,2,amt,0))fromtest1groupbypici

1.1.27.【北京百悟】

书表(books)

book_id,book_name,creatdate,Lastmodifydate,decription

001,三个人的世界,2005-02-02,2005-07-07,NULL

作者表(authors)

A_id,A_name

01,王纷

02,李尚

03,泰和

部门表(depts)

d_id,d_name

001,编辑一部

002,编辑二部

003,编辑三部

书和作者关联表(bookmap)

book_id,A_id

001,01

001,02

001,03

部门和作者关联表(depmap)

d_id,a_id

001,01

002,02

003,03

找出每个部门的所写的总书量,比如,一本书有3个人写,如果三个人在不同的部门,则每个部门的总数量就是1.

Selectd_name,count(book_id)from(selectd_id,book_idfromdeptmapJoinbookmapusing(a_id)groupbyd_id,book_id)joindepts.Using(d_id)proupbyd_name;

最后结果如下:

部门,书量

编辑一部,1

编辑二部,1

编辑三部,1

1.1.28.【北京百悟】

两个表情况

表名:

wu_plan

ID   plan  model   corp_code plannum prixis

1   00001  exx22   nokia   2000   2001

2   00002  lc001   sony    3000   0

表名:

wu_bom

ID    plan      pact         amount    

1     00001     aa1           300

2     00001     aa2           200

3     00002     bb1           500

4     00002     bb2           800

5     00002     bb3           400

查询这两个表中plan唯一,每一个plan中,amount最少的,plannum大于prixis的记录。

结果是:

ID   plan model corp_code  plannum  prixis  pact  amount

1    00001 exx22  nokia   2000   0    aa2   200

2    00002 lc001  sony    3000   0   bb3  400

1.1.29.数据库方面:

【联盟优势】

createtabletbl_threat

(pk_threat_idintunsignednotnullauto_increment,

dt_log_timedatetime,//发生时间

i_severityint,//严重程度

i_device_idint,//设备id

str_tr_typevarchar(64),//告警类型

str_tr_namevarchar(256),//类型名称

i_work_idintunsigned,//工单id

dt_complete_timedatetime,//完成时间

i_statustinyintdefault0comment'0-新分派,1-重新激活2-完成',//告警状态

primarykey(pk_threat_id)

);

createtabletbl_work

(pk_work_idintnotnullauto_increment,

str_titlevarchar(256),//工单名称

i_owner_org_idintunsigned,//负责人组织id

i_owner_idint,//负责人id

dt_dispatch_timedatetime,//派单时间

dt_finish_timedatetime,//完成时间

i_is_historytinyintdefault0,//是否为历史工单

dt_expect_timedatetime,//期望完成时间

i_in_timetinyint

(1)default0,//及时性

i_prioritytinyint

(1),//优先级

primarykey(pk_work_id)

);

ps:

threat告警work工单

i_severity严重程度0代表一般1代表低危2代表中危3代表高危

1.请查出当前日期前三天发生的告警的类型名称、告警类型、发生时间、严重程度及派单时间用日期按照降序排列。

2.请查出当前日期前三天发生的告警的数量最多的告警类型及数量,数量按降序排列的前5个。

1.1.30.设有图书管理数据库:

【盈盛科技】

图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

1.检索书价在15元至25元(含15元和25元)之间的图书的书名、作者、书价和分类号,结果按分类号升序排序。

2.为图书表建立一个视图.

1.1.31.写一个oracle函数,输入参数(字符串str,整型len,字符c)返回字符串rstr

要求:

如果字符串str的长度小于len,则返回的字符串rstr为在字符串str前填充字符c达到长度为len的字符串。

如果字符串str的长度大于等于len,则返回的字符串rstr为str。

【盈盛科技】

参考答案(oracle):

1.1.32.表结构【盈盛科技】

(1).表名:

g_cardapply

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

g_applynovarchar8;//申请单号(关键字)

g_applydatebigint8;//申请日期

g_statevarchar2;//申请状态

(2).表名:

g_cardapplydetail

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

g_applynovarchar8;//申请单号

g_namevarchar30;//申请人姓名

g_idcardvarchar18;//申请人身份证号

g_statevarchar2;//申请状态

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

题目:

(1).查询身份证号码为440401430103082的申请日期

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

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1