Welcome to Our Website

SQLヒント:左結合とWHERE句…彼らは本当に左結合ですか?

X

プライバシー&クッキー

このサイトはクッキーを使用しています。 継続しています。 クッキーの制御方法など、詳細をご覧ください。

それを得ました!,
広告

SQLクエリを確認して、左外部結合を使用している人を見つけることがありますが、それらの結合を内部結合に変換するWHERE句を使用します。 最近、私が述べたように、このメソッドは人にも思うブログで…ここで私はブログです。 √

まず、さまざまな結合に慣れていない場合は、先に進んで、私が書いたこの他のSQLヒントを読んでください。, さて、LEFT OUTER JOINについてもう少し学びましょう(ここからは単にLEFT JOINとして参照します)。

いくつかのサンプルデータから始めましょう。 これらのテストを自分で実行する場合は、独自のクエリの開始時に次のものを使用できます。 ご覧のとおり、二つのテーブル(テーブル変数)を作成します。,

“Table2″に関連付けられたレコードがあるかどうかにかかわらず、”Table1″のすべてのレコードを返し、関連付けられたレコードがあるときに”Table2″のデータを表示する場合は、

SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID;

Output:

ただし、クエリにWHERE句を追加して、IDが4未満の”Table2″からのデータのみを取得する場合は、クエリにWHERE句を追加します。私たちはこのようなことをするかもしれません:

SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID WHERE tb2.columnID < 4;

output:

しかし…両方のテーブルに一致するidがある値のみを取得することがわかりましたか?, うーん…それは内部結合のように非常に多くのように動作するようですか? それはそうであるからです。 信じてくれない? WHERE条件の有無にかかわらずLEFT JOINを実行した後、実行計画を見てください。 このままだ。

などのようにして周りを取得す。 まあ、左結合を行っているので、”Table1″のデータに関係なく、”Table2″からすべてのレコードを返す必要があるか、または返したいことは明らかです。, また、”Table2″の特定のレコードのデータを本当に返したくない場合は、結合述語(結合のON部分の”検索条件”)でそれらのレコードをフィルタリングできます。 たとえば、最後のクエリは代わりに次のように書かれます。

SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID AND tb2.columnID < 4;

Output:

5つのレコードを”Table1″から取得するが、基準を満たさなかった”Table2″からのデータは取得しない方法を参照してください。 基準を満たさないテーブル内のデータに対してNullを返すだけです。 かなり素晴らしい右?,

そして…実行計画をもう一度見て、実際にLEFT JOINを使用していることを証明できます。

値の代わりに誰かがIS NULL条件を使用する場合はどうですか? その場合、WHERE句でそれを使用できます。

SELECT * FROM @Table1 tb1 LEFT OUTER JOIN @Table2 tb2 ON tb1.colID = tb2.columnID WHERE tb2.columnID IS NULL;

出力:

そして、実行計画をもう一度見てみましょう:

左結合を実行し、NULLレコードのデータをフィルタリングしますか? ことになるという意味することができるようになりますと言うのでしょう期待することができるようになります.

代わりにIS NOT NULLを使用する場合はどうなりますか? まあ…それはまた別の話です。, 私は驚きを台無しにして、実際の値と同じように内部結合を行うことを教えてくれます。 あなたが私を信じていないなら、先に進んで自分でクエリを実行し、実行計画を見てください。それは左結合が実際に左結合であってもそうでなくてもよい方法です。

だから、あなたはそれを持っています。

このような情報を書きり、少なくとも、知る機会はあまり多いとはい

広告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です