【1】存在するループを使用して外部テーブルを 1 つずつクエリし、各クエリの存在する条件ステートメントをチェックします。 exists の条件文がレコードの行を返すことができる場合 (行の数は関係なく、返される行数であれば)、条件は真となり、現在ループされているレコードが返されます。逆に、exists の条件文がレコード行を返すことができない場合、条件は false となり、現在ループされているレコードは破棄されます。 存在条件はブール条件のようなもので、結果セットを返すことができる場合は 1、結果セットを返すことができない場合は 0 になります。 構文の形式は次のとおりです。 [not] が存在する tables_name から * を選択します (select..); 次に例を示します。 p_user_2から*を選択 存在する場所(ID=12のp_userから*を選択) p_user テーブルに ID 12 のレコードがある場合は、p_user_2 テーブルのすべてのレコードが返されます。それ以外の場合は、返されるレコードは空になります。 存在しない場合は、上記の逆の処理が行われます。 一般的に、テーブルAにn個のレコードがある場合、existsクエリはこれらのn個のレコードを1つずつ取り出し、exists条件をn回判断します。 【2】で構文の形式は次のとおりです。 select * from A where column in (select column from B); ここで、column は A の列であり、に対応するサブクエリ ステートメントは 1 つの列と複数の行を含む結果セットを返すことに注意してください。 in に対応する select ステートメントによって返される結果は 1 つの列である必要があることに注意してください。複数行にすることもできます。 次に例を示します。 p_user_2 から * を選択、ID は [not] である (p_user から ID を選択) p_user テーブルの id セットに id が含まれる p_user_2 のレコードを照会します。 not in はその逆です。 【3】existsとinの関係SQL が変更されると、2 つは同じ目標を達成できます。 p_user_2から*を選択 where id [not] in (select id from p_user ); p_user_2から*を選択 存在する[存在しない]場所 (id = p_user_2.id の場合、p_user から id を選択) では、いつ exists と in を使用すればよいのでしょうか? ** クエリ対象の 2 つのテーブルのサイズが同じである場合、in と exists の使用にほとんど違いはありません。 ** **2 つのテーブルのうち 1 つが小さく、もう 1 つが大きい場合、大きい方のサブクエリ テーブルには が使用され、小さい方のサブクエリ テーブルには が使用されます。** 例: テーブル A (小さいテーブル)、テーブル B (大きいテーブル) ① サブクエリテーブルはテーブルBです。 Aから*を選択 cc が (B から cc を選択) にある場合 //効率は低いですが、テーブル A の列 cc のインデックスを使用します。 Aから*を選択 存在する場所(cc=A.cc の場合、B から cc を選択) //テーブル B の列 cc のインデックスを使用して、効率を高めます。 ② サブクエリテーブルはテーブルAです。 Bから*を選択 cc が (A から cc を選択) にある場合 // テーブル B の列 cc のインデックスを使用すると効率が高くなります。 Bから*を選択 存在する場所(cc=B.cc の場合、A から cc を選択) //テーブル A の列 cc のインデックスを使用するため、効率は低くなります。 クエリ ステートメントで not in が使用されている場合、内部テーブルと外部テーブルの両方が完全にスキャンされ、インデックスは使用されません。ただし、not exists のサブクエリでは、引き続きテーブルのインデックスを使用できます。 **したがって、どちらのテーブルが大きいかに関係なく、not exists を使用する方が not in を使用するよりも高速です。 ** 【4】いずれか/一部/すべて① any、in、some、allはそれぞれサブクエリキーワードの1つです any は、=、>、>=、<、<=、<> と組み合わせて使用して、それぞれどのデータとも等しい、より大きい、以上、より小さい、以下、等しくないを表すことができます。 all は、=、>、>=、<、<=、<> と組み合わせて使用して、等しい、より大きい、以上、より小さい、以下、等しくないの範囲のすべてのデータを表すことができます。 サブクエリの構文は次のとおりです。 オペランド比較演算子 any (サブクエリ); オペランド(サブクエリ) オペランド coparison_operator some (サブクエリ); オペランド比較演算子 all (サブクエリ); any、all キーワードは比較演算子と一緒に使用する必要があります。 ② any キーワードは、「サブクエリによって返される列の任意の値について、比較結果が true の場合は true を返す」という意味です。 例えば: t_user から age を選択 (age > any の場合) (t_user_copy から age を選択)。 テーブル t_user に (10) を含む行があり、t_user_copy に (21,14,6) が含まれている場合、式は true になります。t_user_copy に (20,10) が含まれているか、テーブル t_user_copy が空の場合、式は false になります。テーブル t_user_copy に (null, null, null) が含まれている場合、式は不明です。 all は「サブクエリによって返される列のすべての値について、比較が true と評価された場合は true を返す」という意味です。 例えば: t_user から age を選択します (age > all の場合) (t_user_copy から age を選択)。 テーブルt_userに(10)を含む行があると仮定します。テーブル t_user_copy に (-5, 0, +5) が含まれている場合、10 は t_user_copy にある 3 つの値すべてより大きいため、式は true になります。テーブル t_user_copy に (12, 6, null, -100) が含まれている場合、t_user_copy には 10 より大きい値 12 があるため、式は false になります。テーブル t_user_copy に (0, null, 1) が含まれている場合、式は不明です。 t_user_copy が空のテーブルの場合、結果は true になります。 ③ ない/in not in は "<>all" の別名であり、使用方法も同じです。 のステートメントは「=any」と同じです。 例えば: s1 = any の場合、t1 から s1 を選択する (t2 から s1 を選択する)。 s1 が (t2 から s1 を選択) 内にある場合、t1 から s1 を選択。 ステートメント some は any のエイリアスであり、同じように使用されます。 例えば: s1 <> any の場合、t1 から s1 を選択 (t2 から s1 を選択)。 s1 <> some の場合、t1 から s1 を選択 (t2 から s1 を選択)。 上記のクエリでは、some は「テーブル t1 の some s1 はテーブル t2 の s1 と等しくない」と簡単に理解できます。このステートメントは、any として解釈すると誤りになります。 要約するMySQL の exists、in、any の基本的な使用法に関するこの記事はこれで終わりです。MySQL の exists、in、any に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 純粋な CSS で中空効果を実現するためのサンプルコード
実際のプロジェクトでは、上下のスクロール バーと左右のスクロール バーは DIV 内にないため、右の...
1. はじめにデータベース内のデータ量が一定レベルに達すると、システムパフォーマンスのボトルネックを...
HTML で CSS を使用する 3 つの方法: 1. インラインスタイル: 要素のスタイル属性を通...
質問:オリジン サーバーはターゲット リソースの表現を見つけることができないか、既存の表現を公開した...
なぜprettierを使うのですか?大企業では、フロントエンド開発コードに独自のコード標準がある場合...
序文MySQL データベースの文字列型は、CHAR、VARCHAR、BINARY、BLOB、TEXT...
ウェブサイトやサービスのパフォーマンスは、データベースの設計(適切な言語開発フレームワークを選択した...
コードをコピーコードは次のとおりです。 <html xmlns="http://ww...
Linux での MySQL データベースのマスター/スレーブ同期構成の利点は、この方法をバックアッ...
Flex レイアウトの紹介英語の Flex はフレキシブル ボックス、つまり伸縮性のあるボックスを...
原文記事、転載の際は著者と出典を明記してください! Web デザインは間違いなくテクノロジーであり、...
以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピー<htm...
目次序文子コンポーネントは親コンポーネントにデータを渡す1. 親コンポーネントから子コンポーネントに...
1. ショートカットCtrl + Shift + Pを使用してコンソールを呼び出します 2、「スニペ...
解決: pythearn2 パッケージをダウンロードしたディレクトリで、setup.py ファイルを...