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

SQL EXISTS оператор за начинаещи

В SQL, EXISTS операторът посочва подзаявка, която да тества за съществуването на редове. Връща TRUE когато подзаявката върне един или повече реда.

Подзаявката е заявка, която е вложена в друга заявка (или дори друга подзаявка)

Тази статия съдържа някои основни примери за EXISTS оператор.

Изходни таблици

Следните таблици се използват за примерите на тази страница.

SELECT * FROM PetTypes;
SELECT * FROM Pets;

Резултат:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
| 4           | Rabbit    |
+-------------+-----------+
(4 rows affected)
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)

Пример

Ето пример за демонстрация на EXISTS оператор.

SELECT 
    pt.PetTypeId,
    pt.PetType
FROM PetTypes pt
WHERE EXISTS ( 
    SELECT p.PetTypeId 
    FROM Pets p 
    WHERE p.PetTypeId = pt.PetTypeId 
    );

Резултат:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Този пример ни показва колко вида домашни любимци има в нашия хотел за домашни любимци. Всъщност има четири типа домашни любимци, но само три от тях съвпадат с истински домашен любимец в Pets таблица.

Това осигурява същия резултат, който бихме получили със следната заявка, която използва IN оператор.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Използване на NOT EXISTS

Бихме могли да добавим NOT оператор, за да отхвърлите резултатите и да видите колко вида домашни любимци не в нашия хотел за домашни любимци.

SELECT 
    pt.PetTypeId,
    pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS ( 
    SELECT p.PetTypeId 
    FROM Pets p 
    WHERE p.PetTypeId = pt.PetTypeId 
    );

Резултат:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

В този случай нашата база данни съдържа домашен любимец тип Rabbit , но в момента нямаме зайци като домашни любимци.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Пазете се от подвеждащи данни от SET STATISTICS IO

  2. Прикривайте чувствителни данни във вашите планове за изпълнение

  3. Предимства и сигурност в услугата за релационна база данни на Amazon

  4. SQL GROUP BY Клауза за начинаещи

  5. Обявяване на общата наличност на SQL Compliance Manager 5.9