关于SQL语句

本文是卢飞大哥的学习心得.

不同数据库中如何使用SQL来控制返回记录的条数以及常见错误分析
在项目实现中可能需要返回满足条件的几条记录而不是全部记录,如返回一个班的第一名,第二名,第三名学生的记录信息,返回该月所卖出的图书中销量排行前三的图书名等等,当然实现这种功能有很多的方法,这里我近描述用简单的SQL和数据库的属性或函数来实现该功能。(以下示例仅选取五条记录)
1. MySql
SELECT field1, field2, field3 [,……] FROM Table_Name limit 5
2. Oracle
SELECT field1, field2, field3 [,……] FROM Table_Name WHERE ROWNUM<= 5
3. SQL Server
SELECT  TOP(5)  FROM Table_Name
这里的语句都比较简单,一看就明白, 但是在数据库中是如何进行筛选记录的呢? 这里我就是用Oracle的语句来讲述,仅仅是个人理解,如果有什么不对请留言告知,一切以学习为主.
言归正传,在Oracle中执行SELECT field1, field2, field3 [,……] FROM Table_Name WHERE ROWNUM<= 5主要分以下几步来实现:
1. Oracle 执行SQL从数据库中找出所有的满足条件的记录。
2. 获取第一条记录,并且设置ROWNUM的值为1.
3. 判断ROWNUM是否<=5, 如果小于或等于5Oracle返回该记录,如果大于5Oracle就不返回该条记录。
4. Oracle继续获取下一条记录,如果3成功获取了一条记录,则ROUNNUM的值就会加1,并用来标识第二条的记录,否则ROUNNUM保持不变。
5. 继续第3步,一直到找到五条记录或便利完所有的记录是结束。
以上仅仅个人理解,下面我就用一个常见的错误来结束本文。
现在有很多人使用Oracle写的选择记录条数的SQL语句如下, 先不要看后文,不知道你认为下面的两个语句的输出结果是怎么样的,如果在有足够的相应的记录的情况下。
1. SELECT field1, field2, field3 [,……] FROM Table_Name WHERE ROWNUM = 5
2. SELECT field1, field2, field3 [,……] FROM Table_Name WHERE ROWNUM = 1
第一条语句是不会返回任何记录的,因为在Oracle中只会执行上面步骤的1,2,3,5,这样ROWNUM的值将始终为1,始终不可能等于5. 而第2条语句只返回第一条记录,原因也就不需要我来详述了。
4. 当然还有MySql, SQL Server中该类语句的执行我就不细述了,如果有兴趣,你可以在论坛中讨论,当然如果你认为我写的有偏差请留言告知,不胜感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值