sql >> データベース >  >> RDS >> Database

SQLINとSQLEXISTS

    SQLINとSQLEXISTS

    この記事では、SQLのINおよびEXISTS演算子について詳しく説明します。 。これら2つの演算子の違いは何であるかということは、開発者の間でよくある質問です。違いを知るために、まずこれらの各演算子について詳しく説明しましょう。

    IN演算子

    IN演算子は、指定された値が一連の値の値と一致する場合、または内部クエリによって返される場合に、結果を取得するために使用されます。 この演算子は、 WHEREでも使用できます。 複数の値を指定する句。 IN演算子は、 SELECT、INSERT、UPDATE、またはDELETEクエリでの複数のOR条件の使用を減らすため、OR演算子の頭字語と呼ばれることがよくあります

    この演算子では、サブクエリが最初に解決され、次にその結果が外部クエリの解決に使用されます。

    IN演算子の一般的な構文は次のとおりです。

    SELECT column_name
     FROM table_name
     WHERE column_name IN (value1, value2, …); 

    例:

    次のCustomerテーブルについて考えてみましょう。

    Cust_id Cust_name 都市 職業
    1 ハリー コルカタ ビジネス
    2 ロン ムンバイ 医師
    3 アルバス デリー エンジニア
    4 ドビー プネ 科学者
    5 スネイプ バンガロール 学生

    クエリ:

    SELECT *
     FROM Customer    
     WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer'); 

    上記のクエリは、医師、科学者、またはエンジニアのいずれかであるすべての顧客を返します。

    出力:

    Cust_id Cust_name 都市 職業
    2 ロン ムンバイ 医師
    3 アルバス デリー エンジニア
    4 ドビー プネ 科学者

    既存のオペレーター

    EXISTS演算子は、IN演算子とは異なり、ブール値を返します。 この演算子は、内部クエリの結果をチェックし、ブール値、つまりtrueまたはfalseを返します。内部クエリが単一または複数のレコードを返す場合、演算子はtrueを返します。それ以外の場合、レコードが見つからない場合はfalseを返します。

    この演算子は、最初の真のイベントが検出されるとすぐにそれ以上の処理を停止するため、効率的です。

    以下は、EXISTS演算子の構文です。

    SELECT column_names    
     FROM table_name    
     WHERE NOT EXISTS (    
     SELECT column_names     
     FROM table_name     
     WHERE condition    
     ); 

    例:

    次のCustomerテーブルについて考えてみましょう。

    Cust_id 名前 職業 年齢
    101 ハリー エンジニア 32
    102 ロン 開発者 30
    103 ドビー リーダー 28
    104 アルバス 科学者 45
    105 スネイプ カーペンター 26
    106 生姜 俳優 25
    107 NULL NULL NULL

    別のテーブルOrdersについて考えてみましょう。

    Order_id Cust_id Product_name Order_date
    1 101 ラップトップ 2021-01-10
    2 103 デスクトップ 2021-02-12
    3 106 iPhone 2021-02-15
    4 104 モバイル 2021-03-05
    5 102 TV 2021-03-20

    クエリ:

    SELECT Name, Occupation
     FROM Customer    
     WHERE EXISTS (
     SELECT *
     FROM Orders     
     WHERE Customer.Cust_id = Orders.Cust_id
     ); 

    上記のクエリは、少なくとも1つの注文を行ったすべての顧客の名前と職業を返します。

    出力:

    名前 職業
    ハリー エンジニア
    ロン 開発者
    ドビー リーダー
    アルバス 科学者
    生姜 俳優

    IN演算子とEXISTS演算子の差分テーブル

    IN演算子とEXISTS演算子の主な違いを以下に表形式で示します。

    IN演算子 EXISTSオペレーター
    OR条件の使用を最小限に抑えます。 内部クエリ内のレコードの存在をチェックします。
    内部クエリの値を外部クエリの値と比較します。 内部クエリとサブクエリの値は比較されません。
    IN句のブロック内のすべての値をチェックします。 最初の真の条件が満たされるとすぐに、それ以上の実行を停止します。
    TRUE、FALSE、またはNULLを返すことができます。 TRUEまたはFALSEのいずれかを返します。
    NULL値をチェックするために使用できます。 NULL値のチェックには使用できません。
    サブクエリと値の両方で使用されます。 サブクエリでのみ使用されます。
    内部クエリの結果が少ないほど、実行が速くなります。 内部クエリの結果が大きい場合でも、実行が高速になります。 IN演算子よりも効率的です。
    構文 :SELECT column_names FROM table_name WHERE column_name IN(subquery); 構文 :SELECT column_namesFROM table_nameWHERE [NOT] EXISTS(subquery);

    結論:

    このトピックでは、SQLのIN演算子とEXISTS演算子を比較しました。両方のオペレーターは同じ操作を行いますが、内部の動作は異なります。それらは異なる論理的働きをします。要件に応じて、いずれか1つを選択できます。ただし、 データセットが大きい場合は、常にEXISTS演算子を使用することをお勧めします。


    1. DataFrameをpostgresテーブルに書き込む方法は?

    2. MySQLのデータベースクエリ効率の最大化-パート2-

    3. オートコンプリートフィールド用の同様のUTF-8文字列

    4. SQLite-データベースファイルを開くことができませんでした