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