кодесурса
«SQL

Оператор SQL EXISTS

script1adsense2code
script1adsense3code

EXISTS Оператор

EXISTS проверяет наличие результата подзапроса . Подзапрос EXISTS проверяет, получает ли подзапрос хотя бы одну строку. Если данные не возвращаются, тогда этот оператор возвращает FALSE.
Допустимый подзапрос EXISTS должен содержать внешнюю ссылку, и это должен быть коррелированный подзапрос .
Список выбора в подзапросе EXISTS фактически не используется при оценке EXISTS, поэтому он может содержать любой действительный список выбора.

Синтаксис:

 SELECT [имя_столбца ... | выражение1]
ОТ [имя_таблицы]
ГДЕ [НЕ] СУЩЕСТВУЕТ (подзапрос)

Параметры:

название Описание
column_name Имя столбца таблицы.
выражение1 Выражение состоит из одной константы, переменной, скалярной функции или имени столбца и может также быть фрагментами запроса SQL, которые сравнивают значения с другими значениями или выполняют арифметические вычисления.
table_name Наименование таблицы.
ГДЕ [НЕ] СУЩЕСТВУЕТ Проверяет подзапрос на наличие одной или нескольких строк. Если одна строка удовлетворяет условию подзапроса, она возвращает логическое значение ИСТИНА.
Когда подзапрос не возвращает совпадающих строк, необязательное ключевое слово NOT возвращает логическое значение ИСТИНА.

Содержание:

Иллюстрированное представление: оператор SQL EXISTS

«SQL

Поддержка СУБД: оператор EXISTS

СУБД команда
MySQL поддержанный
PostgreSQL поддержанный
SQL Server поддержанный
оракул поддержанный

Пример: оператор SQL EXISTS

Чтобы получить «agent_code», «agent_name», «working_area» и «Commission» от «агентов», с соблюдением следующих условий:

1. «оценка» в таблице «клиент» должна быть 3,

2. 'agent_code' в таблице 'customer' и 'agent' должен совпадать,

3. «комиссия» «агентов» должна располагаться в порядке возрастания,

4. вышеуказанные условия (1) и (2) должны соответствовать хотя бы одной строке,

можно использовать следующий оператор SQL:

SELECT agent_code,agent_name,working_area,commission 
FROM agents
WHERE exists
(SELECT * FROM  customer
WHERE grade=3
AND agents.agent_code=customer.agent_code)
ORDER BY commission;

Образец таблицы: клиент


Пример таблицы: агенты


Выход :

 AGENT_CODE AGENT_NAME WORKING_AREA COMMISSION
---------- -------------------- -------------------- ----------
A009 Бенджамин Хэмпшир .11
A002 Мукеш Мумбаи .11
A008 Alford New York .12
A010 Santakumar Chennai .14

ВЫБЕРИТЕ используя EXISTS

Пример таблицы: сотрудники


Пример таблицы: отделы


Пример таблицы: расположение


Для отображения сведений о сотруднике, который работает в стране Великобритания, мы можем использовать следующее утверждение:

SELECT EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES E
WHERE EXISTS (SELECT 1
FROM DEPARTMENTS D, LOCATIONS L
WHERE D.LOCATION_ID = L.LOCATION_ID
AND D.DEPARTMENT_ID = E.DEPARTMENT_ID
AND L.COUNTRY_ID ='UK');

Выход:

 EMPLOYEE_ID FIRST_NAME SALARY DEPARTMENT_ID
----------- -------------------- ---------- --------- ----
        203 Сьюзен 6500 40
        179 Чарльз 6200 80
        177 Джек 8400 80
        176 Джонатон 8600 80
        175 Алисса 8800 80
        174 Эллен 11000 80
        173 Sundita 6100 80
        172 Элизабет 7300 80
        171 Уильям 7400 80
        170 Тайлер 9600 80
        169 Харрисон 10000 80
        168 Лиза 11500 80
        167 Амит 6200 80
        166 Сундар 6400 80
        , , ,

SQL существует с GROUP BY

Здесь мы обсудили, как SQL EXIST может работать с GROUP BY в операторе select.

Пример:

Образец таблицы: клиент


Чтобы получить 'cust_code', 'cust_name', 'cust_city' и 'grade' из таблицы 'customer', с соблюдением следующих условий:

1. «оценка» в таблице «клиент» должна быть 2,

2. более 2 агентов присутствуют в классе 2,

3. «оценка» в таблице клиентов должна составить группу,

можно использовать следующий оператор SQL:

SELECT cust_code,cust_name,cust_city,grade
FROM customer
WHERE grade=2 AND
EXISTS(
SELECT COUNT(*) FROM customer
WHERE grade=2
GROUP BY grade
HAVING COUNT(*)>2);

Выход:

 CUST_CODE CUST_NAME CUST_CITY GRADE
---------- ---------------------------------------- --------------- ----------
C00013 Холмс Лондон 2
C00001 Micheal New York 2
C00025 Равиндран Бангалор 2
C00024 Кук Лондон 2
C00018 Флеминг Брисбан 2
C00022 Avinash Mumbai 2
C00017 Сринивас Бангалор 2
C00003 Мартин Торенто 2
C00014 Rangarappa Bangalore 2
C00016 Venkatpati Bangalore 2

SQL существует с IN

Вот пример оператора SQL EXISTS с использованием оператора IN.

На этой странице мы обсуждаем использование SQL EXISTS с оператором IN в операторе SELECT .

Пример:

Образец таблицы: клиент


Пример таблицы: заказы


Чтобы получить отличный «agent_code» из таблицы «orders» при следующих условиях:

1. 'agent_code' должен быть в результирующем 'agent_code' из таблицы 'customer', которая удовлетворяет условию ниже:

2. 'payment_amt' таблицы 'customer' должно быть больше 3000,

3. количество строк с указанным значением payment_amount превышает 10,

можно использовать следующий оператор SQL:

SELECT DISTINCT(agent_code)
FROM orders
WHERE agent_code IN(
SELECT agent_code
FROM customer WHERE payment_amt>3000
AND EXISTS(SELECT COUNT(*)
FROM customer GROUP BY payment_amt
HAVING COUNT(*)>10));

Выход:

 AGENT_CODE
----------
A004
A002
A007
A009
A011
A012
A010
A001
A008
A006
A005
A003

Вставить, используя EXISTS

Чтобы добавить сведения о сотрудниках в таблицу EMP_TEMP, которые работают в стране Великобритания, можно использовать следующий оператор SQL:

INSERT INTO EMP_TEMP SELECT *
FROM EMPNEW E
WHERE EXISTS (SELECT 1
FROM DEPARTMENTS D, LOCATIONS L
WHERE D.LOCATION_ID = L.LOCATION_ID
AND D.DEPARTMENT_ID = E.DEPARTMENT_ID
AND L.COUNTRY_ID ='UK');

Пример таблицы: сотрудники


Пример таблицы: отделы


Пример таблицы: расположение


Выход:

Вот строки, вставленные в таблицу EMP_TEMP:

 SQL> SELECT EMPLOYEE_ID, FIRST_NAME, HIRE_DATE, SALARY FROM emp_temp;
EMPLOYEE_ID FIRST_NAME HIRE_DATE SALARY
----------- -------------------- --------- ----------
        145 John 01-OCT-04 14000
        146 Карен 05-Янв-05 13500
        147 Alberto 10-MAR-05 12000
        148 Джеральд 15-ОКТ-07 11000
        149 Елени 29-ЯНВ-08 10500
        150 Петра 30-ЯНВ-05 10000
        151 Давид 24-МАР-05 9500
        152 Питер, 20 августа 2005 года, 9000
        153 Кристофер 30-МАР-06 8000
        , , ,  
        175 Алисса 19-МАР-05 8800
        176 Джонатон 24 марта 2006 года 8600
        177 Jack 23-APR-06 8400
        179 Чарльз 04-ЯНВ-08 6200
        203 Сьюзен 07-июнь-02 6500
35 выбранных строк.

ОБНОВЛЕНИЕ с использованием EXISTS

Пример таблицы: сотрудники


Чтобы обновить комиссию сотрудников до нуля, которые получают зарплату 14000 и выше, можно использовать следующий оператор SQL:

UPDATE EMPNEW E
SET COMMISSION_PCT = 0
WHERE EXISTS (SELECT 1
FROM EMPNEW
WHERE EMPLOYEE_ID = E.EMPLOYEE_ID
AND SALARY>=14000);

Выход:

Вот строки до обновления комиссии:

 EMPLOYEE_ID FIRST_NAME SALARY COMMISSION_PCT
----------- -------------------- ---------- --------- -----
        100 Стивен 24000
        101 Neena 17000
        102 Lex 17000
        145 Иоанна 14000 .4

Вот внесенные строки после обновления комиссии:

 EMPLOYEE_ID FIRST_NAME SALARY COMMISSION_PCT
----------- -------------------- ---------- --------- -----
        100 Стивен 24000 0
        101 Неена 17000 0
        102 Lex 17000 0
        145 Иоанна 14000 0

УДАЛИТЬ, используя EXISTS

Пример таблицы: сотрудники


Чтобы удалить сведения о сотруднике, который работал 14 лет и старше, можно использовать следующий оператор SQL:

DELETE FROM EMPNEW E
WHERE EXISTS (SELECT 1
FROM EMPNEW
WHERE EMPLOYEE_ID = E.EMPLOYEE_ID
AND (TO_CHAR(SYSDATE,'YYYY')- TO_CHAR(HIRE_DATE,'YYYY'))>=14);

Выход:

Вот строки перед удалением, которые работали 14 лет и более:

 EMPLOYEE_ID FIRST_NAME HIRE_DATE
----------- -------------------- ---------
        102 Lex 13-Jan-01
        108 Nancy 17-AUG-02
        109 Даниил 16 августа 02
        114 Den 07-DEC-02
        203 Сьюзен 07 июня 02
        204 Герман 07-июнь-02
        205 Шелли 07-ИЮНЬ-02
        206 Уильям 07 июня 02

Вот результат после выполнения команды:

SQL> DELETE FROM EMPNEW E
  2  WHERE EXISTS (SELECT 1
  3  FROM EMPNEW
  4  WHERE EMPLOYEE_ID = E.EMPLOYEE_ID
  5  AND (TO_CHAR(SYSDATE,'YYYY')- TO_CHAR(HIRE_DATE,'YYYY'))>=14);
8 rows deleted.

SQL НЕ существует

Здесь мы обсудили, как SQL NOT EXISTS работает с оператором select.

Пример:

Образец таблицы: клиент


Пример таблицы: заказы


Чтобы получить 'agent_code', 'ord_num', 'ord_amount' и 'cust_code' из таблицы 'orders', с соблюдением следующего условия -

1. любой агент таблицы «customer», не имеющий «payment_amt», равен 1400,

можно использовать следующий оператор SQL:

SELECT agent_code,ord_num,ord_amount,cust_code
FROM orders a
WHERE NOT EXISTS(
SELECT agent_code
FROM  customer
WHERE payment_amt=1400 AND a.cust_code=cust_code);

Выход :

 AGENT_CODE ORD_NUM ORD_AMOUNT CUST_C
---------- ---------- ---------- ------
A005 200134 4200 C00004
A007 200112 2000 C00016
A004 200122 2500 C00003
A008 200111 1000 C00020
A008 200114 3500 C00002
A002 200133 1200 C00009
A002 200128 3500 C00009
A002 200120 500 C00009
A010 200109 3500 C00011
A004 200108 4000 C00008
A004 200121 1500 C00008
A002 200113 4000 C00022
A002 200126 500 C00022
A002 200123 500 C00022
A006 200129 2500 C00024
........
........

Смотрите нашу базу данных моделей

Упражнения по SQL

Хотите улучшить вышеуказанную статью? Вносите свои заметки / комментарии / примеры через Disqus.

Предыдущая: НЕКОТОРЫЕ
Далее: Wildcard & Like

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code