SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Operator INTERSECT SQLite

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      

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przecięcie SQLite

  2. Close nigdy nie zostało wyraźnie wywołane w bazie danych

  3. Android :błąd Sqlite - (1) bliski zera:błąd składni

  4. funkcja sprawdzająca, czy SQLite używa journal_mode=WAL lub journal_mode=DELETE

  5. Symuluj ORDER BY w SQLite UPDATE, aby poradzić sobie z ograniczeniem unikalności