据我所知,两个示例代码块将产生相同的输出,但在第一个语句中,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;
数据集选项
(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 在应用于数据之前都会经过“优化器”,所以我不认为这有什么区别。