最新SQL练习题 下载本文

内容发布更新时间 : 2024/7/3 7:38:01星期一 下面是文章的全部内容请认真阅读。

精品文档

例题

1、写出一条Sql语句:取出表A中第31到第40记录 (Mysql)

select * from A limit 30, 10

MS-SQLServer

解1:select top 10 * from A where id not in (select top 30 id from A)

解2:select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

解3:select * from (select *, Row_Number() OVER (ORDER BY id asc) rowid FROM A) as A where rowid between 31 and 40

Oracle

select * from (select A.*,

row_number() over (order by id asc) rank FROM A)

where rank >=31 AND rank<=40;

2、用一条SQL 语句 查询出每门课都大于80 分的学生姓名

name kecheng fenshu 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90

精品文档

精品文档

A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)

select name from table group by name having min(fenshu)>80

3、学生表 如下:

自动编号 学号 姓名 课程编号 课程名称 分数 1 2005001 张三 0001 数学 69 2 2005002 李四 0001 数学 89 3 2005001 张三 0001 数学 69

删除除了自动编号不同, 其他都相同的学生冗余信息

A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)

4、请用SQL 语句实现:

从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。

AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。 数据库名:JcyAudit ,数据集:Select * from TestDB 答:select a.* from TestDB a

,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b

where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur

精品文档

精品文档

5、一个叫 team 的表,

里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合. 你先按你自己的想法做一下,看结果有我的这个简单吗?

select a.name, b.name from team a, team b where a.name < b.name

6、面试题:怎么把这样一个表儿

year month amount 1991 1 1.1 1991 2 1.2 1991 3 1.3 1991 4 1.4 1992 1 2.1 1992 2 2.2 1992 3 2.3 1992 4 2.4 查成这样一个结果 year m1 m2 m3 m4 1991 1.1 1.2 1.3 1.4 1992 2.1 2.2 2.3 2.4 答案一、

select year,

(select amount from aaa m where month=1 m1,

(select amount from aaa m where month=2 m2, 精品文档

and m.year=aaa.year) as and m.year=aaa.year) as