結合とクエリのような結合-それらは同等ですか?

Karthik T

この質問は、さまざまなひねりを加えて何度も行われていると思います。しかし、このトピックの一般的で包括的な理解を得たいと思います。(それはプログラミングSOに属しますか?..)

のテーブルsportsとのテーブルがあるとしましょうmatchesmatches、他のフィールドの中でsport_id列があり、これは1対多の関係です。

X日目に試合があるスポーツをリストアップしたいとしましょう。これは、考えられる3つの方法で行うことができます。

ネストされたクエリ-推論するのは簡単ですか?

SELECT * 
FROM sports 
WHERE id IN (SELECT sport_id FROM matches WHERE <DATE CHECK>)

どこから/どこから-書くのは簡単ですか?

SELECT sports.* 
FROM sports, matches 
WHERE sports.id = matches.sport_id 
  AND <DATE CHECK>

参加-私はあまり馴染みがないので、間違いを許してください

SELECT * 
FROM sports 
JOIN matches ON sports.id = matches.sport_id 
WHERE <DATE CHECK>

結合のバリエーションに基づく他の方法があり、ここでより適している可能性があります。おそらく内部結合です。

私が知りたいのは、これら3つをに基づいて比較する方法です。

  1. 同等の応答(同じ行が返されますか?)
  2. DBでのパフォーマンス
  3. それらはすべて1つのクエリ/ネットワーク呼び出しですか?
  4. これらの答えのいずれかがデータベースエンジンに依存していますか?
  5. これらの中からどのように選ぶことができますか?
  6. #2は#3のシンタックスシュガーですか?#1ですか?それとも、一部/すべてのケースで#3に最適化されていますか?
バーマー

2番目と3番目の形式は完全に同等です(3番目のバージョンに余分なコンマがあることを除いて)。FROM sports, matches暗黙的な結合でFROM sports JOIN matchesあり、は明示的な結合です。暗黙的結合は以前の形式であり、明示的結合はより現代的であり、データベースの専門家によって一般的に好まれています。

のバージョンWHERE INはほぼ同じですが、いくつかの違いがあります。まず、SELECT *結合で両方のテーブルから列を返しますsportsが、WHERE INクエリではからの列のみを返します。次に、の行がのsports複数の行一致する場合matches、結合は一致のペアごとに行を返します(クロス積を実行します)が、一致の数に関係なく、1回WHERE INから行を返しsportsます。

パフォーマンスの違いは実装によって異なります。明示的結合と暗黙的結合の間に違いはないはずです。これらは単なる構文糖衣です。ただし、データベースは常にWHERE INクエリを同じように最適化するとは限りませんたとえば、EXPLAINMySQLを使用した場合WHERE IN、サブクエリが返す行数が少ない場合でもクエリは外部テーブルに対してフルスキャンを実行し、サブクエリ内のテーブルのインデックスと列を照合することがよくあります。最近のMySQLバージョンの方がこれが優れていると言う人もいると思います。

それらはすべて1回のネットワーク通話になります。すべてのクエリは、データベースサーバーへの1回の呼び出しです。

ところで、WHERE EXISTS相関サブクエリで使用して、リストしなかった別のフォームがあります

SELECT *
FROM sports s
WHERE EXISTS (SELECT 1 
              FROM matches m 
              WHERE s.id = m.sport_id AND <DATE CHECK>)

これとの間のパフォーマンスの違いは、JOINやはり実装に依存します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

SQLクエリの左結合に続くすべての結合も左結合でなければならないというのは本当ですか?なぜまたはなぜそうではないのですか?

左外側の結合と存在する場所。それらは同等ですか?

Laravelの結合と左結合をクエリで結合

通常の結合とはどのような結合ですか

左結合クエリで内部結合クエリの結果を1つのクエリで使用するにはどうすればよいですか?

クエリの内部結合が認識されないようです

クエリの結果をパラメータとして必要な場合、SQLでどのように結合しますか?

サブクエリと同等の結合

クエリと結合の間でクエリの結果が異なる

一部の結果を除外しながら、いくつかのMySQLクエリを結合するにはどうすればよいですか?

このクエリでどのような種類の結合もできないのはなぜですか?

サブクエリ結合が直接結合よりもはるかに高速なのはなぜですか

PHPの内部結合クエリは、他のすべての結合クエリをそのように教えてくれますか?

Mysql:サブクエリでの左結合と内部結合

JPQL結合クエリを作成しようとすると、無効なパスが表示されるのはなぜですか?

SQLServerおよびOracleとPythonからの内部結合クエリ

別の列の値に応じて、クエリで複数の異なる列と結合を選択するにはどうすればよいですか?

それぞれのJavaと通常のJava-それらは同等ですか?

OracleSQLクエリで行をその行内の配列と結合するにはどうすればよいですか。

Oracle SQLでレコードと列の数が異なる2つのクエリを結合するにはどうすればよいですか?

MyBatisで。1つのテーブルに2つの異なるレコードをマップし、そのテーブルを結合するときに単一のクエリ結果を作成するにはどうすればよいですか?

これらの2つのクエリはどのようにして同じ結果を返しますが、異なる結合を使用しますか?(暗黙的クエリと明示的クエリ)

SQLServerクエリでテーブルを結合しようとするとエラーが発生するのはなぜですか

これはサブクエリですか、それとも単なる内部結合ですか

異なるテーブルからの 2 つのクエリを結合するにはどうすればよいですか

同じクエリで異なる集計関数の結果を結合するにはどうすればよいですか?

SQLで複雑な結合ステートメントの結果を適切にクエリするにはどうすればよいですか?

1つのphp関数で2つの異なるテーブルから2つのmysqlクエリを結合しようとする際の問題

異なる結果を比較する2つのクエリを結合するにはどうすればよいですか?

TOP 一覧

  1. 1

    Python / SciPyのピーク検出アルゴリズム

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  4. 4

    androidsoongビルドシステムによるネイティブコードカバレッジ

  5. 5

    ZScalerと証明書の問題により、Dockerを使用できません

  6. 6

    Reactでclsxを使用する方法

  7. 7

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  8. 8

    二次導関数を数値計算するときの大きな誤差

  9. 9

    Ansibleで複数行のシェルスクリプトを実行する方法

  10. 10

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  11. 11

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  12. 12

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  13. 13

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  14. 14

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  15. 15

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

  16. 16

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  17. 17

    値間の一致を見つける最も簡単な方法は何ですか

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    Rパッケージ「AppliedPredictiveModeling」のインストール中にエラーが発生しました

  20. 20

    画像変更コードを実行してもボタンの画像が変更されない

  21. 21

    好き/愛の関係のためのデータベース設計

ホットタグ

アーカイブ