В 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