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 ProductsWHERE 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_nameFROM(SELECT prod_name , ROW_NUMBER() OVER(ORDER BY prod_name) no_t1FROM Products)WHERE no_t1>=5注意: ROW_NUMBER() OVER(ORDER BY 列名) 这个函数用于排序后返回唯一的列名;
那如何解决小于8大于5行的筛选呢?SELECT prod_nameFROM(SELECT prod_name , ROW_NUMBER() OVER(ORDER BY prod_name) no_t2FROM ProductsWHERE ROWNUM <8 --(注意不要写成no_t2))WHERE no_t2>5
留待下次的解决的问题:
1.ROW_NUMBER()OVER函数的详解;
2.高性能的查询某行到某行间的查询方式;