我不是职业搞数据库的,我做的事web,因为分页,自己写的sql出错,百度别人的
会用但看不懂,所以特来求教!
这是我写的sql:select * from
(select * from user_info where rownum < = 8)
where rownum>=5
结果,这一段根本不执行!我百度了,发现这样一段代码,和我的类似:SELECT * FROM ( SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21
我看不懂这条写的,为什么他的就执行了 ?问题:
1、我的错在哪里?
2、他的代码里,SELECT A.*, ROWNUM RN 指的是什么 ?
3、为什么我百度的代码里, WHERE RN >= 21改成WHERE ROWNUM >=21报错?----------------
菜鸟,忘提示!!!望指教!!!
会用但看不懂,所以特来求教!
这是我写的sql:select * from
(select * from user_info where rownum < = 8)
where rownum>=5
结果,这一段根本不执行!我百度了,发现这样一段代码,和我的类似:SELECT * FROM ( SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21
我看不懂这条写的,为什么他的就执行了 ?问题:
1、我的错在哪里?
2、他的代码里,SELECT A.*, ROWNUM RN 指的是什么 ?
3、为什么我百度的代码里, WHERE RN >= 21改成WHERE ROWNUM >=21报错?----------------
菜鸟,忘提示!!!望指教!!!
解决方案 »
- 怎么把两条记录通过一条sql 查询出来?
- oracle 用rownum作分页查询时 提示缺失右括号??
- 跪求:使用distinct如何能在得到目标字段不重复值的同时返回其他字段值?
- 请问Oracle怎么查询登陆日志
- 用not exists 取最大值为什么没用
- 在编译proc是出现Error 172: "szg.cpp", line 265 # Undeclared variable 'oraca'.请问是怎么解决
- 有谁应用oracle application server 请给我帮助。
- sql问题请教
- 还分!
- oracle 导出数据库以及导入数据库
- 通过like 对当前用户 方案管理下的表查询
- 查询结果中但一个值等于某某值时,显示为另一个值,其它值不变,怎么写?
谢谢,那我的第一个问题就被解决了 !
现在还有问题,那就是后面我贴出了别人写的sql代码,
在第二个sql代码(别人写的)中,就出现了WHERE RN >= 21 啊!
---------
另外,可否连我的问题2、3一并解决呢 ?
3、为什么我百度的代码里, WHERE RN >= 21改成WHERE ROWNUM >=21报错?
--应该不会报错吧?最多是查不出数据罢了。
我原本认为的是:A只是user_info这张表查出的所有数据的一个别名,然后A与rn构成新的一张表显示出来,于是,我决定去掉别名A,我改成SELECT * FROM ( SELECT *, ROWNUM RN
FROM (SELECT * FROM user_info ) WHERE ROWNUM <= 8 order by id ) WHERE RN >= 3
可此时程序就报错了!
错误提示:ORA-00923,未找到要求的from关键字。请问这是为什么 ? 能够解释 ?
那么别名何时开始可以用 ?
我把百度的代码改了下,
select * from (
select A.*, rownum rn from (select * from user_info) A where rn < 8
)
where rn > 3
代码就错了!
而如果把内层的where rn<8改成 rownum<8,sql就正确了!
请问,1、这是为什么?2、别名何时可用?
我还有些疑惑,在 7 楼提出来了,能否指点下 !估计是oracle的语法所致吧,,在sqlserver数据库是可以你这么写的。
我原本认为的是:A只是user_info这张表查出的所有数据的一个别名,然后A与rn构成新的一张表显示出来,于是,我决定去掉别名A,我改成SELECT * FROM ( SELECT *, ROWNUM RN
FROM (SELECT * FROM user_info ) WHERE ROWNUM <= 8 order by id ) WHERE RN >= 3
可此时程序就报错了!
错误提示:ORA-00923,未找到要求的from关键字。请问这是为什么 ? 能够解释 ?
你确定你的user_info这个表是存在的吗?
那么别名何时开始可以用 ?
我把百度的代码改了下,
select * from (
select A.*, rownum rn from (select * from user_info) A where rn < 8
)
where rn > 3
代码就错了!
而如果把内层的where rn<8改成 rownum<8,sql就正确了!
请问,1、这是为什么?2、别名何时可用?别名 在外层查询用啊。。
那么别名何时开始可以用 ?
我把百度的代码改了下,
select * from (
select A.*, rownum rn from (select * from user_info) A where rn < 8
)
where rn > 3
代码就错了!
而如果把内层的where rn<8改成 rownum<8,sql就正确了!
请问,1、这是为什么?2、别名何时可用?
因为rn这时候还不起作用,别名在外层才起作用。就是说你起的别名在当前where字句中是不能用的,必须再套一层from语句
我原本认为的是:A只是user_info这张表查出的所有数据的一个别名,然后A与rn构成新的一张表显示出来,于是,我决定去掉别名A,我改成SELECT * FROM ( SELECT *, ROWNUM RN
FROM (SELECT * FROM user_info ) WHERE ROWNUM <= 8 order by id ) WHERE RN >= 3
可此时程序就报错了!
错误提示:ORA-00923,未找到要求的from关键字。请问这是为什么 ? 能够解释 ?
你确定你的user_info这个表是存在的吗?
是的,是这张表:user_info (代表user`s information)那请问为什么错了呢 ?【我用的是Oracle数据库】
我还有些疑惑,在 7 楼提出来了,能否指点下 !提2点 1:oracle查询中 单纯的*和其他字段不能一起使用 否则报错 找不到from
在上面SELECT *, ROWNUM RN FROM ... 语法有问题 2:SELECT *, ROWNUM RN FROM (SELECT * FROM user_info )
后面这个子查询有必要么 直接select a.*,rownum rn from user_info a where ...就可以了
我原本认为的是:A只是user_info这张表查出的所有数据的一个别名,然后A与rn构成新的一张表显示出来,于是,我决定去掉别名A,我改成SELECT * FROM ( SELECT *, ROWNUM RN
FROM (SELECT * FROM user_info ) WHERE ROWNUM <= 8 order by id ) WHERE RN >= 3
可此时程序就报错了!
错误提示:ORA-00923,未找到要求的from关键字。请问这是为什么 ? 能够解释 ?可以解释的,这里SELECT *, ROWNUM RN
FROM (SELECT * FROM user_info的*,是不行的,不能这样查询,只能查询一个*或者rownum。
我原本认为的是:A只是user_info这张表查出的所有数据的一个别名,然后A与rn构成新的一张表显示出来,于是,我决定去掉别名A,我改成SELECT * FROM ( SELECT *, ROWNUM RN
FROM (SELECT * FROM user_info ) WHERE ROWNUM <= 8 order by id ) WHERE RN >= 3
可此时程序就报错了!
错误提示:ORA-00923,未找到要求的from关键字。请问这是为什么 ? 能够解释 ?可以解释的,这里SELECT *, ROWNUM RN
FROM (SELECT * FROM user_info的*,是不行的,不能这样查询,只能查询一个*或者rownum。
如果要一起查询的话起个别名,这个结果集就会当做一个表来查询,就可以用查询表的方式查询他的所有字段啦
那么别名何时开始可以用 ?
我把百度的代码改了下,
select * from (
select A.*, rownum rn from (select * from user_info) A where rn < 8
)
where rn > 3
代码就错了!
而如果把内层的where rn<8改成 rownum<8,sql就正确了!
请问,1、这是为什么?2、别名何时可用? select 语句执行时,先加载from ,其次加载 where ,然后加载select部分, select A.*, rownum rn from (select * from user_info) A where rn < 8; 这个语句,执行完from部分后会执行where部分,这时候 rownum还未定义为 rn 所以就出错了
我在9楼提出了个别名的问题:
我依然不知道Oracle中别名什么时候用。
请看场景1:
首先请看一个正确的:select * from user_info a where a.id = 2
这里我定义完别名 a 后直接使用a ,a.id =2 就可以了。请看场景2:
然而在9楼提出的,
select * from (
select A.*, rownum rn from (select * from user_info) A where rn < 8
)
where rn > 3
我在这里也是,内层定义完rownum别名rn后直接使用rn却错了 !场景1和场景2都是使用别名,怎么1对了2错了呢 ?
那么别名何时开始可以用 ?
我把百度的代码改了下,
select * from (
select A.*, rownum rn from (select * from user_info) A where rn < 8
)
where rn > 3
代码就错了!
而如果把内层的where rn<8改成 rownum<8,sql就正确了!
请问,1、这是为什么?2、别名何时可用? select 语句执行时,先加载from ,其次加载 where ,然后加载select部分, select A.*, rownum rn from (select * from user_info) A where rn < 8; 这个语句,执行完from部分后会执行where部分,这时候 rownum还未定义为 rn 所以就出错了 高手,明白了 !
我在9楼提出了个别名的问题:
我依然不知道Oracle中别名什么时候用。
请看场景1:
首先请看一个正确的:select * from user_info a where a.id = 2
这里我定义完别名 a 后直接使用a ,a.id =2 就可以了。请看场景2:
然而在9楼提出的,
select * from (
select A.*, rownum rn from (select * from user_info) A where rn < 8
)
where rn > 3
我在这里也是,内层定义完rownum别名rn后直接使用rn却错了 !场景1和场景2都是使用别名,怎么1对了2错了呢 ?
这2个 很明显的不同 表别名和字段别名表别名 只能在当个查询里面用到字段别名 是为了在外层查询用的 在当个查询里面使用 肯定会报错 找不到改字段
我在9楼提出了个别名的问题:
我依然不知道Oracle中别名什么时候用。
请看场景1:
首先请看一个正确的:select * from user_info a where a.id = 2
这里我定义完别名 a 后直接使用a ,a.id =2 就可以了。请看场景2:
然而在9楼提出的,
select * from (
select A.*, rownum rn from (select * from user_info) A where rn < 8
)
where rn > 3
我在这里也是,内层定义完rownum别名rn后直接使用rn却错了 !场景1和场景2都是使用别名,怎么1对了2错了呢 ?
这2个 很明显的不同 表别名和字段别名表别名 只能在当个查询里面用到字段别名 是为了在外层查询用的 在当个查询里面使用 肯定会报错 找不到改字段听这么一说,倒有点糊涂 !
那么18楼说的对不 ?
是对的 一般sql执行顺序
(1) FROM 子句 组装来自不同数据源的数据
(2) WHERE 子句 基于指定的条件对记录进行筛选
(3) GROUP BY 子句 将数据划分为多个分组
(4) 使用聚合函数进行计算
(5) 使用HAVING子句筛选分组
(6) 计算所有的表达式
(7) 使用ORDER BY对结果集进行排序 用sql语法表示的话 大致这样
1. FROM
2. WHERE
3. GROUP BY
4. SUM、AVG..
5. HAVING
6. SELECT
7. DISTINCT
8. ORDER BY
9. TOP
是对的 一般sql执行顺序
(1) FROM 子句 组装来自不同数据源的数据
(2) WHERE 子句 基于指定的条件对记录进行筛选
(3) GROUP BY 子句 将数据划分为多个分组
(4) 使用聚合函数进行计算
(5) 使用HAVING子句筛选分组
(6) 计算所有的表达式
(7) 使用ORDER BY对结果集进行排序 用sql语法表示的话 大致这样
1. FROM
2. WHERE
3. GROUP BY
4. SUM、AVG..
5. HAVING
6. SELECT
7. DISTINCT
8. ORDER BY
9. TOP
学习了 HJ_daxian 是我见过的 同Dave,向上一个级别的oracle大牛