W SQLite INTERSECT
operator służy do tworzenia złożonego SELECT
instrukcja zwracająca przecięcie wyników lewego i prawego SELECT
sprawozdania. Innymi słowy, łączy dwa zapytania, ale zwraca tylko te wiersze, które są zwracane w obu zapytaniach.
Przykład
Załóżmy, że mamy następujące tabele:
SELECT * FROM Employees;
SELECT * FROM Customers;
Wynik:
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
Możemy użyć INTERSECT
operator zwraca pracowników, którzy są również klientami:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;
Wynik:
EmployeeName ------------ Ava Monish Rohit
Więc otrzymujemy tylko wartości, które pojawiają się w Employees
tabela, która pojawia się również w Customers
stół.
Implementacja INTERSECT
w SQLite operator zwraca tylko różne wiersze. Tak więc powyższy przykład zwraca tylko jeden wiersz dla Monish, mimo że istnieje wielu pracowników i wielu klientów o tej nazwie.
Inne RDBMS pozwalają nam na uwzględnienie duplikatów w wyniku poprzez zaakceptowanie opcjonalnego ALL
słowo kluczowe z ich INTERSECT
operatora, ale SQLite tego nie robi (przynajmniej nie w momencie pisania). Zachęcamy do zapoznania się z dokumentacją SQLite na wypadek jakichkolwiek zmian.
Alternatywne zapytanie
Możliwe jest uzyskanie tego samego wyniku bez użycia INTERSECT
operator. Na przykład moglibyśmy przepisać nasz pierwszy przykład do tego:
SELECT
DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName);
Wynik:
EmployeeName ------------ Ava Rohit Monish