SQL数据库试题(笔试题)(6)

2019-04-02 19:59

sql 语言实现查找成绩排名10到20的学生 sql语句实现:

查询成绩表中10名至20名的学生

方法

select top 11 * from score where sno not in (select top 9 sno from score order by sc desc)order by sc desc

补充说明:score, sc, sno 分别为成绩表,成绩和学号。

这道冥思苦想了N久的题目原来只用一个top就搞定了,真是狂汗,看来还要看书。

用一句SQL取出第 m 条到第 n 条记录的方法

从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)

SELECT TOP n-m+1 * FROM Table

WHERE (id NOT IN (SELECT TOP m-1 id FROM Table ))

--从TABLE表中取出第m到n条记录 (Exists版本)

SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists

(Select * From (Select Top m-1 * From TABLE order by id) b Where b.id=a.id )

Order by id

--m为上标,n为下标,例如取出第8到12条记录,m=8,n=12,Table为表名

Select Top n-m+1 * From Table Where Id>(Select Max(Id) From

(Select Top m-1 Id From Table Order By Id Asc) Temp) Order By Id Asc

直接取得数据库中的分页记录 前提是表中必须有主键

取得第M条记录之后的N条记录: SELECT TOP N * FROM [TABLE]

WHERE (ID NOT IN (SELECT TOP M id FROM [TABLE]

ORDER BY [ORDER])) ORDER BY [ORDER]

Oracle中的实现,取得第M到N条记录: SELECT * FROM (

SELECT * , ROWNUM AS CON FROM (

SELECT * FROM [TABLE] ORDER BY [ORDER] )

WHERE ROWNUM <= N )

WHERE CON >= M;

查询表中连续的某几条记录

不要传任何列的条件参数,查询表中连续的某几条记录 如:表A,id列为主键 id name sex age

------------------------- 1 luoyi male 21 2 yaya female 20 3 lili female 22 4 wuyong male 25 .......................

这个表的记录还有很多,如果我想取第二、第三条记录,不为别的,我就想要这两条,这不仅在编程中会用到,而且在一些公司面试时也有类似考题(呵呵,我没有遇到过),在oracle和mssqlserver中SQL代码分别为:

二、ms sql server

在server中没有minus,只能用类似于oracle的第二种方法

select * from (select top 3 * from A) as b where b.id not in(select top 1 id from A)

三、绘制出来的结果为: id name sex age

-------------------------------- 2 yaya female 20 3 lili female 22

特点:一次查询,数据库只返回一页的数据。而不是取出所有的数据。 说明:

pagesize: 每页显示记录数 cureentpage:当前页数

select * from ( select TOP pagesize * FROM ( SELECT TOP

pagesize*cureentpage * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC

例子说明:

假如数据库表如下:

user_table:

id:主键,自增 username:字符 password:字符

假设有80条记录,每页显示10条记录,id 从1到80

现在按照id升序排列取出第三页的数据应该为:所取得记录的id 应该为 21到30。

这时该语句应该为:

select * from ( select TOP 10 * FROM ( SELECT TOP 30 * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC

原理如下:

先按照id从小到大升序取出30条记录(3*10),也就是:id 在 1-30 之间的记录 (SELECT TOP 30 * from user_table ORDER BY id ASC)

然后按照ID降序排列这30条记录,得到记录为id 在:从30到 1

然后在这些30条记录中取出前10条记录:取得的记录为:id 在30-21之间。这就是我们需要的数据,但这时是按照降序排列的,不符合要求。

最后在重新排序得到最终我们需要的数据。id在21-30之间。 随机取出若干条记录的SQL语句 随机取出若干条记录的SQL语句

Sql server:

select top 20 * from 表 order by newid()

高效SQL——合并多个字段值或多条记录

高效SQL——从无主键表中合并字段值 create table #T1 (

A varchar(10), B varchar(20) )

insert into #T1 values ('aa','1')

insert into #T1 values ('aa','9a') insert into #T1 values ('bb','1') insert into #T1 values ('bb','10') insert into #T1 values ('bb','16') insert into #T1 values ('aa','16') insert into #T1 values ('aa','17') insert into #T1 values ('aa','30') insert into #T1 values ('bb','6df') insert into #T1 values ('aa','5') insert into #T1 values ('aa','8') insert into #T1 values ('aa','ed')

所要的结果:

aa 1,9a,16,17,30,5,8,ed bb 1,10,16,6df

解决方法: 程序代码

declare @c varchar(1024) set @c=''

declare @x char(10),@y char(10)

set @x='' set @y=''

select @y=@x,@x=x.a,@c=@c + (case @x when @y then ',' else ';' + x.a + ':' end)

+x.d from (select b as d,a from #t1) as x order by x.a

set @c=substring(@c,2,len(@c)-1) select @c

为什么说是高效呢?

因为摒弃了游标和函数的途径,而采用变量的方式来保存值 也就是说避免了游标和函数自身的缺点 如果是简单地把字段值合并的sql语句: 程序代码

select c1||c2||c3 as name from table

中间可以添加字符常量和数字,如

select c1||'test'||c2||c3 as name from table

select c1||2||c2||c3 as name from table

如何用一条SQL语句,将多条记录(一个字段)合并为一个? 例如:

table字段为:tableID(nchar)

查询结果为不确定的多条:

tableID T1 T2 T3 T4 …… 如题:

A、B两个表拥有一样的表结构,都以id为主键,如何将A表中存在而B表中不存在的记录插入到B表中。

表结构如下:

create table A(

id int primary key, name varchar(20), password varchar(20)

A表记录:

ID NAME PASSWORD ------------------ 1 2 3 4 5

B表记录:

ID NAME PASSWORD ------------------ Tom 1234 Mary 1234 Lucy 1234 Billy 1234 Henry 1234


SQL数据库试题(笔试题)(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:四川省人民政府办公厅关于进一步做好被征地农民社会保障工作的通

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: