Оператор SQL EXISTS
EXISTS Оператор
EXISTS проверяет наличие результата подзапроса . Подзапрос EXISTS проверяет, получает ли подзапрос хотя бы одну строку. Если данные не возвращаются, тогда этот оператор возвращает FALSE.
Допустимый подзапрос EXISTS должен содержать внешнюю ссылку, и это должен быть коррелированный подзапрос .
Список выбора в подзапросе EXISTS фактически не используется при оценке EXISTS, поэтому он может содержать любой действительный список выбора.
Синтаксис:
SELECT [имя_столбца ... | выражение1] ОТ [имя_таблицы] ГДЕ [НЕ] СУЩЕСТВУЕТ (подзапрос)
Параметры:
название | Описание |
---|---|
column_name | Имя столбца таблицы. |
выражение1 | Выражение состоит из одной константы, переменной, скалярной функции или имени столбца и может также быть фрагментами запроса SQL, которые сравнивают значения с другими значениями или выполняют арифметические вычисления. |
table_name | Наименование таблицы. |
ГДЕ [НЕ] СУЩЕСТВУЕТ | Проверяет подзапрос на наличие одной или нескольких строк. Если одна строка удовлетворяет условию подзапроса, она возвращает логическое значение ИСТИНА. Когда подзапрос не возвращает совпадающих строк, необязательное ключевое слово NOT возвращает логическое значение ИСТИНА. |
Содержание:
Иллюстрированное представление: оператор SQL EXISTS
Поддержка СУБД: оператор 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
- Упражнения по SQL, практика, решение
- SQL Получить данные из таблиц [33 Упражнения]
- Булевы и реляционные операторы SQL [12 упражнений]
- Подстановочные знаки SQL и специальные операторы [22 упражнения]
- Агрегатные функции SQL [25 упражнений]
- Вывод запроса форматирования SQL [10 упражнений]
- SQL-запросы к нескольким таблицам [7 упражнений]
- ФИЛЬТРАЦИЯ И СОРТИРОВКА в базе данных персонала [38 упражнений]
- SQL СОЕДИНЯЕТ
- SQL ПОДПИСИ
- SQL Union [9 упражнений]
- SQL View [16 упражнений]
- Управление учетными записями пользователей SQL [16 упражнение]
- База данных фильмов
- ОСНОВНЫЕ запросы к базе данных фильмов [10 упражнений]
- ПОДПИСКИ на фильм База данных [16 упражнений]
- ПРИСОЕДИНЯЕТСЯ к базе данных фильма [24 упражнения]
- Футбольная база
- Вступление
- ОСНОВНЫЕ запросы по футболу базы данных [29 упражнений]
- ПОДПИСКИ по футбольной базе данных [33 упражнения]
- База данных больницы
- База данных сотрудников
- ОСНОВНЫЕ запросы к базе данных сотрудников [115 упражнений]
- БРОНИРОВАНИЕ на сотрудника База данных [77 Упражнения]
- Еще не все!
Хотите улучшить вышеуказанную статью? Вносите свои заметки / комментарии / примеры через Disqus.
Предыдущая: НЕКОТОРЫЕ
Далее: Wildcard & Like
Новый контент: Composer: менеджер зависимостей для PHP , R программирования