SQLite
 sql >> база данни >  >> RDS >> SQLite

SQLite INTERSECT оператор

В 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      

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Данните се попълват от датата на конкретна таблица вместо от цялата таблица в sqlite

  2. IntentService блокира потребителския интерфейс на моето приложение

  3. SQLite Intersect

  4. Как да добавя определен брой празни редове в sqlite?

  5. Как да форматирате дата и час в SQLite