日期:2014-05-17  浏览次数:20433 次

关于查询from的问题
 SELECT  DISTINCT nom
 FROM (SELECT DISTINCT nom, prix_base FROM "JouetSchema"."Jouet") AS j
 WHERE prix_base BETWEEN 15 AND 45
 ORDER BY nom ASC;


好几次看到查询from句后面又跟一个(select from) ,我不清楚什么时候要用这样的写法,还有就是rename的as,什么时候必须使用??

谢谢

------解决方案--------------------
1.子查询时。尽管有时候写一个select也可以,但是这样分层写会让思路更清晰;有时候却是必须写,例如:
select * from
(
select a, rownum from table1
)
where rownum < 100;
不能写:
select a, rownum from table1 
where rownum < 100;
2.as 别名,去掉也可以。
------解决方案--------------------
as是可以省略,但是建议加上,增强可读性。from后面应该加一个“结果集”,而那个select出来的就是一个结果集。
------解决方案--------------------
引用:
SELECT  DISTINCT nom
 FROM (SELECT DISTINCT nom, prix_base FROM "JouetSchema"."Jouet") AS j
 WHERE prix_base BETWEEN 15 AND 45
 ORDER BY nom ASC;


好几次看到查询from句后面又跟一个(select from) ,我不清楚什么时候要用这样……


在from后面又加上一个查询,就是一个子查询,一般称为:派生表,你可以把它当成是一个中间结果集,也就是外层的select子句,会从内层中,别名为j的,中间结果集中再进行select,之所以要这么写是因为代码相对容易理解。

不过你上面的代码,其实可以不用这么写,可以简单写成这样,这个和你上面写的是一样的:
SELECT DISTINCT nom
FROM "JouetSchema"."Jouet"
WHERE prix_base BETWEEN 15 AND 45
ORDER BY nom ASC;

------解决方案--------------------
from后跟一个‘数据集’,最简单的select * from table where...   其实一张‘表’就是一个‘数据集’,只是‘表’是数据库里原始的‘数据集’。同理一个select子句也是一个‘数据集’,也可以跟在from后面,只不过是一个经过条件筛选或者处理的‘数据集’,不是数据库里的原始数据集。
as是重新声明一个字段的名字,像sum() count()这类统计结果是没有字段名,引用结果时不方便,于是就给一个自定义的名字。同样as也可以用作改名,如果不想使用在数据库里的字段名,可以改成自己喜欢的。注意:as的作用只限于查询的结果,不会修改数据库里的原字段名。