SQL初学学习笔记(一)

来源:互联网 发布:织梦ajax提交表单 编辑:程序博客网 时间:2024/05/17 17:56

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.高性能的查询某行到某行间的查询方式;


0 0
原创粉丝点击