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

SQLite ОСВЕН оператор

В SQLite, EXCEPT операторът може да се използва за създаване на съставен SELECT оператор, който връща подмножеството от редове, върнати от левия SELECT които не се връщат от десния SELECT .

Пример

Да предположим, че имаме следните таблици:

SELECT * FROM Teachers;
SELECT * FROM Students;

Резултат:

TeacherId  TeacherName
---------  -----------
1          Warren     
2          Ben        
3          Cathy      
4          Cathy      
5          Bill       
6          Bill       

StudentId  StudentName
---------  -----------
1          Faye       
2          Jet        
3          Spike      
4          Ein        
5          Warren     
6          Bill       

Можем да използваме EXCEPT оператор, за да върне учители, които също не са студенти:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Резултат:

TeacherName
-----------
Ben        
Cathy      

Така че получаваме само стойности, които се появяват в Teachers таблица, която също не се показва в Students маса.

Можем да получим различни резултати, в зависимост от това коя маса е отляво и коя отдясно. Ето пример, който поставя Students таблица вляво и Teachers вдясно:

SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;

Резултат:

StudentName
-----------
Ein        
Faye       
Jet        
Spike      

Този път получаваме ученици, които не са и учители.

EXCEPT на SQLite операторът връща само отделни редове. Така че в нашия пример се връща само един ред за Cathy , въпреки че има двама учители с това име.

Някои други RDBMS ни позволяват да включваме дубликати в резултата, като приемем незадължителен ALL ключова дума с техния EXCEPT оператор, но SQLite не го прави (поне не към момента на писане). Чувствайте се свободни да проверите документацията на SQLite, в случай че нещо се промени.

Алтернатива

Възможно е да получите същия резултат, без да използвате EXCEPT оператор. Например, можем да пренапишем първия си пример на това:

SELECT 
    DISTINCT TeacherName
FROM Teachers t 
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);

Резултат:

TeacherName
-----------
Ben        
Cathy      

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 начина за изброяване на изгледите в база данни на SQLite

  2. Uncaught TypeError не може да извика метода 'opendatabase' на приставката undefined-SQLite с cordova 3.5

  3. импортирайте вече създадена sqlite база данни (xamarin)

  4. Как работи операторът LIKE в SQLite

  5. 2 примерни бази данни за SQLite