SAS proc sql create table (where=()) 选项与 sql 查询中的 where 子句有何不同以及何时使用?

问题描述 投票:0回答:1

据我所知,两个示例代码块将产生相同的输出,但在第一个语句中,where 在内部查询完成后应用,而在第二个语句中,where 在语句运行期间应用。

我的想法是否正确,因为过滤发生得更早并减少了连接中的数据,第二个选项的性能会更高?创建表的“where”选项什么时候会成为首选选项?

proc sql;
create table (where=(field1=1))
select a.field1, a.field2
from table1 a
join table2 b
on a.field1 = b.field1;
quit;
proc sql;
create table
select a.field1, a.field2
from table1 a
join table2 b
on a.field1 = b.field1;
where a.field1 = 1;
quit;
sas where-clause proc-sql
1个回答
0
投票

语法

数据集选项

(where=(...))
是一个选项,只能在该表上放置条件。

select man.name, woman.name
from man(age > 60), woman(age between 50 and 60)
where man.address = woman.address;

SQL

where
子句适用于查询中涉及的所有表,因此如果两个表具有相同名称的字段,则必须限定该名称。

select man.name, woman.name
from man, woman
where man.address = woman.address
  and man.age > 60
  abd woman.age between 50 and 60;

加工中

从逻辑上讲,数据集选项在涉及查询之前应用于数据表,并且该条件的结果存储在临时表中,该临时表可能很大。 然而实际上,所有 SQL 在应用于数据之前都会经过“优化器”,所以我不认为这有什么区别。

© www.soinside.com 2019 - 2024. All rights reserved.