SQL练习题.docx
《SQL练习题.docx》由会员分享,可在线阅读,更多相关《SQL练习题.docx(27页珍藏版)》请在冰豆网上搜索。
SQL练习题
例题
1、写出一条Sql语句:
取出表A中第31到第40记录(Mysql)
select*fromA limit30,10
MS-SQLServer
解1:
selecttop10*fromAwhereidnotin(selecttop30idfromA)
解2:
selecttop10*fromAwhereid>(selectmax(id)from(selecttop30idfromA)asA)
解3:
select*from(select*,Row_Number()OVER(ORDERBYidasc)rowidFROMA)asAwhererowidbetween31and40
Oracle
select*
from(selectA.*,
row_number()over(orderbyidasc)rank
FROMA)
whererank>=31ANDrank<=40;
2、用一条SQL 语句查询出每门课都大于80 分的学生姓名
name kecheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
A:
selectdistinctnamefromtablewherenamenotin(selectdistinctnamefromtablewherefenshu<=80)
selectnamefromtablegroupbynamehavingmin(fenshu)>80
3、学生表如下:
自动编号 学号 姓名课程编号课程名称分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
删除除了自动编号不同, 其他都相同的学生冗余信息
A:
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
where=and>
5、一个叫 team 的表,
里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.
你先按你自己的想法做一下,看结果有我的这个简单吗
select,
fromteama,teamb
where<
6、面试题:
怎么把这样一个表儿
year monthamount
1991 1
1991 2
1991 3
1991 4
1992 1
1992 2
1992 3
1992 4
查成这样一个结果
yearm1 m2 m3 m4
1991
1992
答案一、
selectyear,
(selectamountfrom aaamwheremonth=1 and=asm1,
(selectamountfrom aaamwheremonth=2 and=asm2,
(selectamountfrom aaamwheremonth=3 and=asm3,
(selectamountfrom aaamwheremonth=4 and=asm4
fromaaa groupbyyear
7、说明:
复制表( 只复制结构, 源表名:
a新表名:
b)
SQL:
select*intobfromawhere1<>1 (where1=1,拷贝表结构和数据内容)
Oracle:
createtableb
As
Select*fromawhere1=2
[<>(不等于)(SQLServerCompact)
比较两个表达式。
当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则结果为TRUE。
否则,结果为FALSE。
]
8、说明:
拷贝表( 拷贝数据, 源表名:
a目标表名:
b)
SQL:
insertintob(a,b,c)selectd,e,ffroma;
9、说明:
显示文章、提交人和最后回复时间
SQL:
select,,fromtablea,(selectmax(adddate)adddatefromtablewhere=b
10. 说明:
外连接查询( 表名1 :
a表名2 :
b)
SQL:
select,,,,,fromaLEFTOUTERJOINbON=
ORACLE:
select,,,,,froma,b
where=(+)
11. 说明:
日程安排提前五分钟提醒
SQL:
select*from 日程安排 wheredatediff('minute',f 开始时间,getdate())>5
12. 说明:
两张关联表,删除主表中已经在副表中没有的信息
SQL:
Deletefrominfowherenotexists(select*frominfobzwhere=)
13.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value
这道题的SQL 语句怎么写
updatebset=(selectfromawhere=wherein(selectfromb,awhere=;
高级sql 面试题
14.原表:
courseidcoursenamescore
-------------------------------------
1 Java 70
2oracle90
3xml40
4jsp30
5servlet80
-------------------------------------
为了便于阅读, 查询此表后的结果显式如下( 及格分数为60):
courseidcoursenamescoremark
---------------------------------------------------
1 Java 70pass
2oracle90pass
3xml40fail
4jsp30fail
5servlet80pass
---------------------------------------------------
写出此查询语句
selectcourseid,coursename,score,decode(sign(score-60),-1,'fail','pass')asmarkfromcourse
(SQL:
selectcourseid,coursename,score,(casewhenscore<60then'fail'else'pass'end)asmarkfromcourse)
ORACLE:
selectcourseid,coursename,score,decode(sign(score-60),-1,'fail','pass')asmarkfromcourse
(DECODE函数是ORACLEPL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数)
完全正确
SQL>desccourse_v
NameNullType
-----------------------------------------------------------------------------
COURSEIDNUMBER
COURSENAMEVARCHAR2(10)
SCORENUMBER
SQL>select*fromcourse_v;
COURSEIDCOURSENAMESCORE
------------------------------
1java70
2oracle90
3xml40
4jsp30
5servlet80
SQL>selectcourseid,coursename,score,decode(sign(score-60),-1,'fail','pass')asmarkfromcourse_v;
COURSEIDCOURSENAMESCOREMARK
----------------------------------
1java70pass
2oracle90pass
3xml40fail
4jsp30fail
5servlet80pass
面试题
(1)
createtabletesttable1
(
idintIDENTITY,
departmentvarchar(12)
)
select*fromtesttable1
insertintotesttable1values('设计')
insertintotesttable1values('市场')
insertintotesttable1values('售后')
/*
结果
iddepartment
1 设计
2 市场
3 售后
*/
createtabletesttable2
(
idintIDENTITY,
dptIDint,
namevarchar(12)
)
insertintotesttable2values(1,'张三')
insertintotesttable2values(1,'李四')
insertintotesttable2values(2,'王五')
insertintotesttable2values(3,'彭六')
insertintotesttable2values(4,'陈七')
/*
用一条