私はLearning SQL 2nd Editionの本を読んでいました。SET
オペレーションと の間に違いはありますか?オペレーションを離れるJOIN
状況はありますか?SET
JOIN
私が間違っている場合は訂正してJOIN
くださいSET
。
私はLearning SQL 2nd Editionの本を読んでいました。SET
オペレーションと の間に違いはありますか?オペレーションを離れるJOIN
状況はありますか?SET
JOIN
私が間違っている場合は訂正してJOIN
くださいSET
。
集合演算はUNION
、INTERSECT
、EXCEPT
です。これらは、同じスキーマを持つリレーションに対して集合操作を行うために使用されます。例: letR1
とR2
be は次のスキーマのものです。
R1 (A,B,C)
R2 (A,B,C)
R1 R2 =およびUNION
のすべての行の結合。R1
R2
R1 R2 =とINTERSECT
の両方の共通行。R1
R2
R1 EXCEPT
R2 = からのすべての行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
。