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

SQLiteINTERSECTオペレーター

    SQLiteでは、INTERSECT 演算子は、複合SELECTを作成するために使用されます 左右のSELECTの結果の共通部分を返すステートメント ステートメント。つまり、2つのクエリを組み合わせますが、両方のクエリで返される行のみを返します。

    次のテーブルがあるとします。

    SELECT * FROM Employees;
    SELECT * FROM Customers;

    結果:

    EmployeeId  EmployeeName
    ----------  ------------
    1           Bart        
    2           Jan         
    3           Ava         
    4           Rohit       
    5           Monish      
    6           Monish      
    7           Monish      
    
    CustomerId  CustomerName
    ----------  ------------
    1           Mia         
    2           Rohit       
    3           Peter       
    4           Ava         
    5           Monish      
    6           Monish      

    INTERSECTを使用できます 顧客でもある従業員を返すオペレーター:

    SELECT EmployeeName FROM Employees
    INTERSECT
    SELECT CustomerName FROM Customers;

    結果:

    EmployeeName
    ------------
    Ava         
    Monish      
    Rohit       

    したがって、Employeesに表示される値のみを取得します Customersにも表示されるテーブル テーブル。

    SQLiteによるINTERSECTの実装 演算子は個別の行のみを返します。したがって、上記の例では、その名前の従業員と顧客が複数いる場合でも、Monishに対して1行だけが返されます。

    他のRDBMSでは、オプションのALLを受け入れることで、結果に重複を含めることができます。 INTERSECTを含むキーワード 演算子ですが、SQLiteはそうではありません(少なくとも、執筆時点ではそうではありません)。何か変更があった場合は、SQLiteのドキュメントを確認してください。

    代替クエリ

    INTERSECTを使用しなくても同じ結果を得ることができます オペレーター。たとえば、最初の例を次のように書き直すことができます。

    SELECT 
        DISTINCT EmployeeName
    FROM Employees e
    WHERE EXISTS (SELECT CustomerName FROM Customers c
    WHERE e.EmployeeName = c.CustomerName);

    結果:

    EmployeeName
    ------------
    Ava         
    Rohit       
    Monish      

    1. ORA-30926:ソース表で安定した行のセットを取得できません

    2. Oracleでカレンダーテーブルにデータを入力する方法は?

    3. PostgreSQLで日付をユリウス日に変換する

    4. オラクル。日付と時刻を出力する方法は?