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