私はLearning SQL 2nd Editionの本を読んでいました。SETオペレーションと の間に違いはありますか?オペレーションを離れるJOIN状況はありますか?SETJOIN
私が間違っている場合は訂正してJOINくださいSET。
私はLearning SQL 2nd Editionの本を読んでいました。SETオペレーションと の間に違いはありますか?オペレーションを離れるJOIN状況はありますか?SETJOIN
私が間違っている場合は訂正してJOINくださいSET。
集合演算はUNION、INTERSECT、EXCEPTです。これらは、同じスキーマを持つリレーションに対して集合操作を行うために使用されます。例: letR1とR2be は次のスキーマのものです。
R1 (A,B,C)
R2 (A,B,C)
R1 R2 =およびUNIONのすべての行の結合。R1R2
R1 R2 =とINTERSECTの両方の共通行。R1R2
R1 EXCEPTR2 = からのすべての行R1が に存在しませんR2。
同じスキーマ関係で集合操作を使用しますが、結果のスキーマが両方のスキーマの和集合である異なるスキーマ関係で結合操作を使用できることに注意してください。(通常、2 つ以上のテーブルを結合するために結合操作を使用します。)
joinいいえ、集合操作でできるすべてのことを で行うことはできません。ただし、2 つのテーブルの構造が同じで、それぞれに一意の識別子がある場合は、次のことができます。
Aunionは次のようになります。
select driver.id,
coalesce(t1.col1, t2.col1) as col1,
. . . -- repeat this for all columns
from (select distinct coalesce(t1.id, t2.id) as id
from ((select id
from t1
) full outer join
(select id
from t2
)
)
) driver left outer join
t1
on t1.id = driver.id left outer join
t2
on t2.id = driver.id
exceptとintersectも同じ方法でアプローチできますが、条件をドライバー テーブルに入れますfull outer join。
実際、行が各テーブルで一意であると仮定して、一意の ID を必要としないようにこの考え方を拡張できます。その場合、すべての列を含める必要があり、列の NULL 値も考慮する必要があるため、結合はより複雑になります。
とはいえ、このset操作にはいくつかの利点があります。
union、union all上記のクエリよりもはるかに読みやすいでしょう.unionですintersect。