轻松掌握SQL Sever中各种语句的完整语法

发表于:2008-5-30 13:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

24、说明:选择从10到15的记录


select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc


随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)


对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:


Randomize

RNumber = Int(Rnd*499) +1


While Not objRec.EOF

If objRec("ID") = RNumber THEN

... 这里是执行脚本 ...

end if

objRec.MoveNext

Wend


这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了?


采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:


Randomize

RNumber = Int(Rnd*499) + 1


SQL = "SELECT * FROM Customers WHERE ID = " & RNumber


set objRec = ObjConn.Execute(SQL)

Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")


不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。


再谈随机数


现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。


为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:


SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3


假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):

SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"


注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。


随机读取若干条记录,测试过


Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)

Sql server:select top n * from 表名 order by newid()

mysql select * From 表名 Order By rand() Limit n


Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)


语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...


使用SQL语句 用...代替过长的字符串显示


语法:


SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename

Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;


Conn.Execute说明

 

54/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号