SQL初学学习笔记(一)

SQL初学

印象中只记得SELECT FROM WHERE,此次学习中记录遇到的一些执行的实际问题:

  •  运行环境:
  • OS:windows 10
  • 数据库为ORACLE 11g

一、检索返回指定行的相关问题:

ROWNUM 是否可以大于某值

ORACLE下

SELECT  prod_name

FROM Products

WHERE ROWNUM >=5;

实际有9列,但未报错,提示0 rows selected


SELECT  prod_name

FROM Products

WHERE ROWNUM<=5;

实际有9列,提示5 rows selected


那如何解决大于等于5行的筛选呢?

原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)依旧不成立,所以查不到记录。


1.要把ROWNUM先提取出来,再筛选


SELECT prod_name

FROM(

SELECT  prod_name ,ROWNUM no_t1

FROM Products

)

WHERE no_t1>=5

2.要不就是用函数 ROW_NUMBER()OVER(ORDER BY prod_name)
SELECT prod_name
FROM(
SELECT  prod_name , ROW_NUMBER() OVER(ORDER BY prod_name) no_t1
FROM Products
)
WHERE no_t1>=5
注意: ROW_NUMBER() OVER(ORDER BY 列名) 这个函数用于排序后返回唯一的列名;

那如何解决小于8大于5行的筛选呢?
SELECT prod_name
FROM(
SELECT  prod_name , ROW_NUMBER() OVER(ORDER BY prod_name) no_t2
FROM Products
WHERE ROWNUM <8 --(注意不要写成no_t2)
)
WHERE no_t2>5

留待下次的解决的问题:
1.ROW_NUMBER()OVER函数的详解;
2.高性能的查询某行到某行间的查询方式;


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值