遅い - sql 行 結合




UNIONを使用してSQL-JOIN ?? JOINを使用したUNION? (3)

私はこのインタビューの中でこの質問をしました。 UNIONキーワードを使用してJOINを実行できますか? JOINキーワードを使用してUNIONを実行できますか?

JOINキーワードを使用しないでJOINと同じ出力を得るべきですが、UNIONキーワードを使用しますか? 2. UNIONキーワードを使用しないでUNIONと同じ出力を得るべきですが、JOINキーワードを使用しますか?

可能であれば、これを行う方法の例を教えてもらえますか?


このようなことを意味しますか?

create table Test1 (TextField nvarchar(50), NumField int)
create table Test2 (NumField int)
create table Test3 (TextField nvarchar(50), NumField int)

insert into Test1 values ('test1a', 1)
insert into Test1 values ('test1b', 2)
insert into Test2 values (1)
insert into Test3 values ('test3a', 4)
insert into Test3 values ('test3b', 5)

select Test1.*
from Test1 inner join Test2 on Test1.NumField = Test2.NumField
union
select * from Test3

(SQL Server 2008で書かれています)

UNIONは、両方のSELECTステートメントの列数が同じで、列のデータ型が同じ(または少なくとも類似している)場合に機能します。
UNIONは、両方のSELECTステートメントが単一のテーブルからのみデータを選択するか、またはそれらの一方または両方がすでに複数のテーブルにJOINしているかどうかは気にしません。


これはインタビューの質問であるため、これらの機能の理解をテストしています。

彼らが期待している可能性のある答えは、「一般的に、異なるアクションを実行するときにこれを行うことはできません」ということです。これは、結合が結果セットの最後に行を追加する。

JoinとUnionの作業を行う唯一の方法は、行に2つのソースからのデータが含まれている場合です。

SELECT A.AA, '' AS BB FROM A
UNION ALL 
SELECT '' AS AA, B.BB FROM B

同じです:

SELECT ISNULL(A.AA, '') AS AA, ISNULL(B.BB, '') AS BB FROM A
FULL OUTER JOIN B ON 1=0

または、タイプが一致する1つのカラムだけでこれを行う:

SELECT A.AA AS TT FROM A
UNION ALL 
SELECT B.BB AS TT FROM B

同じです:

SELECT ISNULL(A.AA, B.AA) AS TT
FROM A
FULL OUTER JOIN B ON 1=0

あなたがこれを行う1つのケースは、複数のテーブルにデータが生成されているが、すべてを一緒に見たい場合です。しかし、このケースではUNIONを使用することをお勧めします。そうでなければ期待するでしょう。


インタビューは、あなたが商品を設定するためのフレームワークです。 覚えておいてください:質問に答えないでください;)

記者会見を考えてください。スポークスパーソンは、自分自身を捕まえるためにjournosからの難しい質問に答えるつもりはありません。 むしろ、彼らは既に答えを持っている質問を探しています。彼らはリリースしたい情報です(そしてそれ以上はありません)。

私がインタビューでこの問題に直面した場合、私は関係代数の知識を実証するためにそれを使用します。これは、私がインタビューに行った理由です。 私は "ここで関係代数について話す"という質問に気をつけています。これはそれです。

大まかに言えば、JOINは論理ANDの対応語ですが、UNIONは論理ORの対応語です。 したがって、コンベンションロジックを使用した同様の質問は、「あなたはORを使用していますか? 「ANDを使用してORを使用できますか?」 答えはあなたが使用することができる他のものに依存するでしょう。例えば、NOTは便利かもしれません;)

私はまた、プリミティブ演算子のセット、計算の完全性に必要な演算子のセット、実用に必要な演算子と省略表現のセットの違いについて議論したいと思います。

質問に直接答えようとすると、それ以上の疑問が生じます。 JOINは関係代数では「自然結合」を意味しますが、SQLではINNER JOIN意味します。 質問が特にSQLに関係する場合は、すべてのJOIN型について答える必要がありますか? UNION JOINどうですか?

1つの例を採用するために、SQLの外部結合は有名なUNIONです。 クリス・デイトは、私がこれまでに望むことができなかったよりも、

外部結合は、結果にNULLを生成するように明示的に設計されているため、一般的に回避する必要があります。 関連する言い方をすれば、それは一種の散弾銃の結婚です。それは、表を一種の労働組合に強制します。そうです。問題の表が労働組合の通常の要件(第6章を参照)に合致しなくても組合ではありません。 実際には、unionを実行する前にテーブルのいずれかまたは両方をヌルにパディングして、結局そのような通常の要件に準拠させることでこれを行います。 しかし、ヌルの代わりに適切な値で埋めてはならない理由はありません

SQLとリレーショナル理論、第1版CJ Date

あなたがインタビューで遭遇したいと思っていたものであれば、これは良い議論のポイントになるでしょう。

これらはほんの少しの思考にすぎません。 重要な点は、これらの質問を聞くことによって、インタビュアーがあなたに支店を提供していることです。 あなたはそれに何をぶつけますか? ;)







union