ホームページ  >  記事  >  データベース  >  MySQL の高度なドリフトについての深い理解 (4)

MySQL の高度なドリフトについての深い理解 (4)

黄舟
黄舟オリジナル
2017-03-08 13:55:521096ブラウズ

結合

クロス結合

最も単純なタイプの結合はクロス結合です。これには、テーブルを乗算してすべてを含む積を作成することが含まれます。
例:
select * from students,person;//結果は 2 つのテーブルの組み合わせです
2 つのテーブルのすべての列が結合されて、すべての可能な組み合わせを含む結果セットが生成されます。このタイプはクロス結合と呼ばれ、結合後の結果のテーブルの行数は、結合に使用された各テーブルの行数の積と同じになります。
上記の相互接続はデータベース サーバーのパフォーマンスに大きな影響を与えるため、接続で where 句を使用して一部のレコードをフィルタリングすることをお勧めします。

内部結合/外部結合

内部結合は最も一般的なタイプの結合であり、結合のすべての部分を構成するすべてのテーブルからの一致が必要であり、一致しない行は除外されるため、最も均一です。最終結果 セット外の内部結合の最も一般的な例は等価結合です。これは、結合されたテーブル内のフィールドが各テーブル内のフィールドと同じであることを意味します。この場合、最終的な結果セットには、指定されたフィールドに一致する結合テーブル内の行のみが含まれます。

外部結合は非対称であり、結合の反対側の行と一致するかどうかに関係なく、結合の片側のすべての行が最終レコードに含まれます

結合のどちら側が保持されるかに応じて、SQL は左外部結合と右外部結合。左外部結合では、結合の左側にあるテーブルの、where 句に一致するすべてのレコードが最終結果セットに表示されます。右外部結合では、結合の右側にあるテーブルの、where 句に一致するすべてのレコードが最終結果セットに表示されます。

左外部結合: 「接続の左側の部分からすべての行を選択し、選択した行ごとに右側の部分から一致する値が表示されるか、NULL 行が表示されます。」と説明されています。 このタイプの結合は、左結合または左外部結合と呼ばれます。右結合または右外部結合はその逆です。

自己結合
このタイプの結合は、通常、内部結合を含むテーブル内のレコードを取得するために使用されます。

MySQL 4.0 以降では、接続に加えて、複数の選択クエリの出力を 1 つの結果セットに結合するために使用されるユニオン演算子もサポートしています。 ほとんどの場合、この演算子は、クエリによって生成された結果セットを別のテーブルに追加し、すべての結果を含む単一のテーブルを作成するために使用されます。

ユニオン演算子を使用して、できるだけ多くの選択クエリを結合しますが、次の 2 つの基本条件を満たす必要があります:

まず、各選択クエリによって返されるフィールドの数が同じである必要があります。
次に、各選択クエリのフィールドのデータ型が互いに一致する必要があります。

Union 演算子は、結合された結果セットから重複する行を自動的に削除します。

サブクエリ

where/havingクエリ
MySQLでは、where句またはhaving句にサブクエリを含めることができます。かっこで囲まれたサブクエリは、比較演算子、論理演算子、in 演算子、exists 演算子よりも優先されます。

having 句の比較演算子の前にサブクエリを使用して、親クエリによって作成されたグループをフィルタリングすることもできます。

in/exists/from query
比較演算子は、サブクエリによって返された結果列に値が含まれている場合にのみ適用されます。サブクエリによって返される結果セットが値のリストである場合、比較演算子を in 演算子に置き換える必要があります。

in 演算子は、結果セットに特定の値が存在するかどうかを検出できます。検出が成功すると、外部クエリが実行されます。

exists 演算子は、サブクエリが結果を生成したかどうかをクエリするために使用できます。これにより、exists テストが true を返した場合にのみ外部クエリを実行できます。
サブクエリによって生成された結果は、select の from 句でも使用できます。ステートメントをテーブルとして表示します。

つまり、内部クエリによって生成された結果テーブルは、外部クエリの from 句で使用されます。このようなテーブルは、SQL ではエクスポート テーブルになります。


この方法でサブクエリの結果を使用する場合、内部クエリによって生成された結果テーブルは最初に別のテーブル名を取る必要があり、そうでないと MySQL はテーブル内のカラムを参照する方法を認識できないことに注意してください。


以上がMySQL の高度なドリフトについての深い理解 (4)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。