SQL练习题Word下载.docx

上传人:b****5 文档编号:19742324 上传时间:2023-01-09 格式:DOCX 页数:26 大小:30.88KB
下载 相关 举报
SQL练习题Word下载.docx_第1页
第1页 / 共26页
SQL练习题Word下载.docx_第2页
第2页 / 共26页
SQL练习题Word下载.docx_第3页
第3页 / 共26页
SQL练习题Word下载.docx_第4页
第4页 / 共26页
SQL练习题Word下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

SQL练习题Word下载.docx

《SQL练习题Word下载.docx》由会员分享,可在线阅读,更多相关《SQL练习题Word下载.docx(26页珍藏版)》请在冰豆网上搜索。

SQL练习题Word下载.docx

2005001 

0001 

69

2005002 

89

删除除了自动编号不同, 

其他都相同的学生冗余信息

deletetablenamewhere 

notin(selectmin( 

自动编号)fromtablenamegroupby学号, 

姓名, 

课程编号, 

课程名称, 

分数)

4、请用SQL 

语句实现:

从TestDB 

数据表中查询出所有月份的发生额都比101 

科目相应月份的发生额高的科目。

请注意:

TestDB 

中有很多科目,都有1 

-12 

月份的发生额。

AccID 

科目代码,Occmonth 

发生额月份,DebitOccur 

发生额。

数据库名:

JcyAudit 

,数据集:

Select*fromTestDB

答:

selecta.*

fromTestDBa 

(selectOccmonth,max(DebitOccur)Debit101ccurfromTestDBwhereAccID='

101'

groupbyOccmonth)b

wherea.Occmonth=b.Occmonthanda.DebitOccur>

b.Debit101ccur

5、一个叫 

team 

的表,

里面只有一个字段name, 

一共有4 

条纪录,分别是a,b,c,d, 

对应四个球对,现在四个球对进行比赛,用一条sql 

语句显示所有可能的比赛组合.

你先按你自己的想法做一下,看结果有我的这个简单吗?

selecta.name,b.name

fromteama,teamb 

wherea.name<

b.name

6、面试题:

怎么把这样一个表儿

year 

monthamount

1991 

1.1

1.2

1.3

1.4

1992 

2.1

2.2

2.3

2.4

查成这样一个结果

yearm1 

m2 

m3 

m4

19911.11.21.31.4

19922.12.22.32.4 

答案一、

selectyear, 

(selectamountfrom 

aaamwheremonth=1 

andm.year=aaa.year)asm1,

aaamwheremonth=2 

andm.year=aaa.year)asm2,

aaamwheremonth=3 

andm.year=aaa.year)asm3,

aaamwheremonth=4 

andm.year=aaa.year)asm4

fromaaa 

groupbyyear

7、说明:

复制表( 

只复制结构, 

源表名:

a新表名:

b) 

SQL:

select*intobfromawhere1<

>

(where1=1,拷贝表结构和数据内容)

Oracle:

createtableb

As

Select*fromawhere1=2

[<

(不等于)(SQLServerCompact)

比较两个表达式。

当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则结果为TRUE。

否则,结果为FALSE。

]

8、说明:

拷贝表( 

拷贝数据, 

a目标表名:

insertintob(a,b,c)selectd,e,ffroma;

9、说明:

显示文章、提交人和最后回复时间

selecta.title,a.username,b.adddatefromtablea,(selectmax(adddate)adddatefromtablewheretable.title=a.title)b

10. 

说明:

外连接查询( 

表名1 

a表名2 

b)

selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTERJOINbONa.a=b.c

ORACLE:

selecta.a,a.b,a.c,b.c,b.d,b.ffroma,b

wherea.a=b.c(+)

11. 

日程安排提前五分钟提醒

select*from 

日程安排 

wheredatediff('

minute'

开始时间,getdate())>

5

12. 

两张关联表,删除主表中已经在副表中没有的信息

Deletefrominfowherenotexists(select*frominfobzwhereinfo.infid=infobz.infid)

13.有两个表A 

和B 

,均有key 

和value 

两个字段,如果B 

的key 

在A 

中也有,就把B 

的value 

换为A 

中对应的value

这道题的SQL 

语句怎么写?

updatebsetb.value=(selecta.valuefromawherea.key=b.key)whereb.idin(selectb.idfromb,awhereb.key=a.key);

高级sql 

面试题

14.原表:

courseidcoursenamescore

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

Java 

70

2oracle90

3xml40

4jsp30

5servlet80

为了便于阅读, 

查询此表后的结果显式如下( 

及格分数为60):

courseidcoursenamescoremark

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

70pass

2oracle90pass

3xml40fail

4jsp30fail

5servlet80pass

写出此查询语句

selectcourseid,coursename,score,decode(sign(score-60),-1,'

fail'

'

pass'

)asmarkfromcourse

(SQL:

selectcourseid,coursename,score,(casewhenscore<

60then'

else'

end)asmarkfromcourse)

ORACLE:

selectcourseid,coursename,score,decode(sign(score-60),-1,'

(DECODE函数是ORACLEPL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数)

完全正确

SQL>

desccourse_v

NameNull?

Type

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

COURSEIDNUMBER

COURSENAMEVARCHAR2(10)

SCORENUMBER

select*fromcourse_v;

COURSEIDCOURSENAMESCORE

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

1java70

)asmarkfromcourse_v;

COURSEIDCOURSENAMESCOREMARK

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

1java70pass

15.SQL面试题

(1)

createtabletesttable1

idintIDENTITY,

departmentvarchar(12) 

select*fromtesttable1

insertintotesttable1values('

设计'

市场'

售后'

/*

结果

iddepartment

设计

市场

售后 

*/

createtabletesttable2

dptIDint,

namevarchar(12)

insertintotesttable2values(1,'

张三'

李四'

insertintotesttable2values(2,'

王五'

insertintotesttable2values(3,'

彭六'

insertintotesttable2values(4,'

陈七'

用一条SQL语句,怎么显示如下结果

iddptIDdepartmentname

设计 

张三

李四

市场 

王五

彭六

黑人 

陈七

答案:

SELECTtesttable2.*,ISNULL(department,'

黑人'

FROMtesttable1rightjointesttable2ontesttable2.dptID=testtable1.ID

也做出来了可比这方法稍复杂。

/

16.sql面试题

(2)

有表A,结构如下:

p_IDp_Nums_id 

11001 

11202 

2801 

31101 

3803 

其中:

p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。

请用SQL语句实现将上表中的数据合并,合并后的数据为:

p_IDs1_ids2_ids3_id 

110120 

2800 

31108 

s1_id为仓库1的库存量,s2_id为仓库2的库存量,s3_id为仓库3的库存量。

如果该产品在某仓库中无库存量,那么就是0代替。

结果:

selectp_id,

sum(casewhens_id=1thenp_numelse0end)ass1_id

sum(casewhens_id=2thenp_numelse0end)ass2_id

sum(casewhens_id=3thenp_numelse0end)ass3_id

frommyProgroupbyp_id

什么是相关子查询?

如何使用这些查询?

经验更加丰富的开发人员将能够准确地描述这种类型的查询。

相关子查询是一种包含子查询的特殊类型的查询。

查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。

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

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

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

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

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

答案:

selects#,snfromswhereS#in(selectS#fromc,scwherec.c#=sc.c#andcn=’税收基础’)

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

selectsn,sdfroms,scwheres.s#=sc.s#andsc.c#=’c2’

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

selectsn,sdfromswheres#notin(selects#fromscwherec#=’c5’)

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

select学员人数=count(distincts#)fromsc

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

selectsn,sdfromswheres#in(selects#fromscgroupbys#havingcount(distinctc#)>

5)

18、SQL面试题(4)

1.查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连续增长的列,完整的查询语句如下:

selecttop10*fromAwhereID>

(selectmax(ID)from(selecttop30IDfromAorderbyA)T)orderbyA

2.查询表A中存在ID重复三次以上的记录,完整的查询语句如下:

select*from(selectcount(ID)ascountfromtablegroupbyID)TwhereT.count>

3

简答题部分

1.触发器的作用?

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

它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。

可以联级运算。

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

2。

什么是存储过程?

用什么来调用?

存储过程是一个预编译的SQL 

语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。

如果某次操作需要执行多次SQL 

,使用存储过程比单纯SQL 

语句执行要快。

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

3。

索引的作用?

和它的优点缺点是什么?

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

它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。

索引可以是唯一的,创建索引允许指定单个列或者是多个列。

缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

什么是内存泄漏?

一般我们所说的内存泄漏指的是堆内存的泄漏。

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

当应用程序用关键字new 

等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free 

或者delete 

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

4。

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

为什么?

我是这样做的,尽可能使用约束,如check, 

主键,外键,非空字段等来约束,这样做效率最高,也最方便。

其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。

最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

5。

什么是事务?

什么是锁?

事务就是被绑定在一起作为一个逻辑工作单元的SQL 

语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。

为了确保要么执行,要么不执行,就可以使用事务。

要将有组语句作为事务考虑,就需要通过ACID 

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

锁:

在所以的 

DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。

与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。

当然锁还分级别的。

6。

什么叫视图?

游标是什么?

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

可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。

对视图的修改不影响基本表。

它使得我们获取数据更容易,相比多表查询。

游标:

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

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

可以对结果集当前行做修改。

一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

SQL数据库面试题以及答案(50例题)

Student(Sid,Sname,Sage,Ssex)学生表

Sid:

学号

Sname:

学生姓名

Sage:

学生年龄

Ssex:

学生性别

Course(Cid,Cname,T#)课程表

Cid:

课程编号

Cname:

课程名称

Tid:

教师编号

SC(Sid,Cid,score)成绩表

score:

成绩

Teacher(Tid,Tname)教师表

教师编号:

Tname:

教师名字

问题:

1、查询“001”课程比“002”课程成绩高的所有学生的学号

selecta.sidfrom

(selectsid,scorefromscwherecid='

001'

)a,

002'

)b

wherea.sid=b.sidanda.score>

b.score;

2、查询平均成绩大于60分的同学的学号和平均成绩

selectsid,avg(score)fromsc

groupbysid

havingavg(score)>

60;

3、查询所有同学的学号、姓名、选课数、总成绩

selects.sid,s.sname,count_cidas选课数,

sum_scoreas总成绩

fromstudents

leftjoin

(selectsid,count(cid)ascount_cid,sum(score)assum_score

fromscgroupbysid)sc

ons.sid=sc.sid;

4、查询姓‘李’的老师的个数:

selectcount(tname)

fromteacher

wheretnamelike'

李%'

;

5、查询没有学过“叶平”老师可的同学的学号、姓名:

selects.sid,s.sname

fromstudentass

wheres.sidnotin(

selectDISTINCTsid

fromscassc

wheresc.cidin(

selectcid

fromcourseasc

leftjointeacherastonc.tid=t.tid

wheret.tname='

叶平'

);

6、查询学过“叶平”老师所教的所有课的同学的学号、姓名:

wheres.sidin(

selectdistinctsc.sid

groupbysc.sid

HAVINGcount(cid)=

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

当前位置:首页 > 医药卫生 > 基础医学

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

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