В SQLite INTERSECT операторът се използва за създаване на съставен SELECT оператор, който връща пресечната точка на резултатите от левия и десния SELECT изявления. С други думи, той комбинира две заявки, но връща само онези редове, които са върнати и в двете заявки.
Пример
Да предположим, че имаме следните таблици:
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, въпреки че има множество служители и множество клиенти с това име.
Други 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