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,什么时候必须使用??谢谢
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,什么时候必须使用??谢谢
select * from
(
select a, rownum from table1
)
where rownum < 100;
不能写:
select a, rownum from table1
where rownum < 100;
2.as 别名,去掉也可以。
MSSQL下的例子:
select * from
(
select a, ROW_NUMBER() over (order by id desc) rownum from table1
)
where rownum < 100;
不能写:
select a, ROW_NUMBER() over (order by id desc) rownum from table1
where rownum < 100;
在from后面又加上一个查询,就是一个子查询,一般称为:派生表,你可以把它当成是一个中间结果集,也就是外层的select子句,会从内层中,别名为j的,中间结果集中再进行select,之所以要这么写是因为代码相对容易理解。不过你上面的代码,其实可以不用这么写,可以简单写成这样,这个和你上面写的是一样的:
SELECT DISTINCT nom
FROM "JouetSchema"."Jouet"
WHERE prix_base BETWEEN 15 AND 45
ORDER BY nom ASC;
那使用派生表的方法和使用with...as(select..from..)有什么区别呢?还是两者是等价的
as是重新声明一个字段的名字,像sum() count()这类统计结果是没有字段名,引用结果时不方便,于是就给一个自定义的名字。同样as也可以用作改名,如果不想使用在数据库里的字段名,可以改成自己喜欢的。注意:as的作用只限于查询的结果,不会修改数据库里的原字段名。
使用派生表的方法和使用with...as(select..from..)是一样的,SQL Server在2005之所以提出with这种写法,是因为通过with能是SQL 代码的结构更好,更加容易看懂,比如:本来在代码中会多次用到同一个派生表,那么得写多次,现在有了with,那么只要写一次就可以了,下面就可以多次引用,非常方便。另外,性能上和一般的派生表没什么区别,一般引用多次会计算多次,对于数据量比较大的,可以通过把查询出来的数据写入临时表来提高性能。性能方面和一般的派生表没什么差别。