SQL — Подзапросы

Подзапрос используется для возврата данных, которые будут использоваться в основном запросе, в качестве условия для дальнейшей фильтрации данных, подлежащих извлечению. Подзапросы могут использоваться с инструкциями SELECT, INSERT, UPDATE и DELETE вместе с операторами типа =, <,>,> =, <=, IN, BETWEEN и т. д. Существует несколько правил, которые применяются к подзапросам: - Подзапросы должны быть заключены в круглые скобки. - Подзапрос может иметь только один столбец в условии SELECT, если только несколько столбцов не указаны в основном запросе для подзапроса для сравнения выбранных столбцов. - Команда ORDER BY не может использоваться в подзапросе, хотя в основном запросе она использоваться может. В подзапросе может использоваться команда GROUP BY для выполнения той же функции, что и ORDER BY. - Подзапросы, которые возвращают более одной строки, могут использоваться только с несколькими операторами значений, такими как оператор IN. - Список SELECT не может содержать ссылки на значения, которые вычисляются для BLOB, ARRAY, CLOB или NCLOB. - Подзапрос не может быть сразу заключен в функцию set. - С подзапросом не может использоваться оператор BETWEEN. Однако оператор BETWEEN может использоваться внутри подзапроса.

Подзапросы с инструкцией SELECT

Подзапросы чаще всего используются с инструкцией SELECT. При этом используется следующий синтаксис:

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
  (SELECT column_name [, column_name ]
  FROM table1 [, table2 ]
  [WHERE])
  
Пример Рассмотрим таблицу CUSTOMERS, содержащую следующие записи: Теперь давайте выполним следующий подзапрос с инструкцией SELECT

SELECT * 
  FROM CUSTOMERS 
  WHERE ID IN (SELECT ID 
        FROM CUSTOMERS 
        WHERE SALARY > 4500) ;
        
В результате мы получим следующее

Подзапросы с инструкцией INSERT

Подзапросы также могут использоваться с инструкцией INSERT. Инструкция INSERT использует данные, возвращаемые из подзапроса, для вставки в другую таблицу. Выбранные в подзапросе данные могут быть изменены с помощью любых функций символа, даты или числа. Основной синтаксис следующий.

INSERT INTO table_name [ (column1 [, column2 ]) ]
  SELECT [ *|column1 [, column2 ]
  FROM table1 [, table2 ]
  [ WHERE VALUE OPERATOR ]
  
Пример Рассмотрим таблицу CUSTOMERS_BKP со структурой аналогичной таблице CUSTOMERS. Теперь, чтобы скопировать всю таблицу CUSTOMERS в таблицу CUSTOMERS_BKP, вы можете использовать следующий синтаксис.

INSERT INTO CUSTOMERS_BKP
  SELECT * FROM CUSTOMERS 
  WHERE ID IN (SELECT ID 
  FROM CUSTOMERS) ;
  

Подзапросы с инструкцией UPDATE

Подзапрос может использоваться в сочетании с инструкцией UPDATE. Один или несколько столбцов в таблице могут быть обновлены при использовании подзапроса с помощью инструкции UPDATE. Основной синтаксис следующий.

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
  (SELECT COLUMN_NAME
  FROM TABLE_NAME)
  [ WHERE) ]
  
Пример Исходя из того, что у нас есть таблица CUSTOMERS_BKP, которая является резервной копией таблицы CUSTOMERS, в следующем примере для всех записей, для которых AGE больше или равно 27, применяет коэффициент 0,25.

UPDATE CUSTOMERS
  SET SALARY = SALARY * 0.25
  WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
     WHERE AGE >= 27 );
     
В результате будут изменены две строки, и таблица CUSTOMERS будет выглядеть следующим образом.

Подзапросы с инструкцией DELETE

Подзапрос может использоваться в сочетании с инструкцией DELETE, так же как и со всеми описанными выше инструкциями. Основной синтаксис следующий.

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
  (SELECT COLUMN_NAME
  FROM TABLE_NAME)
  [ WHERE) ]
  
Пример Предположим, у нас есть таблица CUSTOMERS_BKP, которая является резервной копией таблицы CUSTOMERS. В следующем примере удаляются записи из таблицы CUSTOMERS для всех клиентов, AGE которых больше или равно 27.

DELETE FROM CUSTOMERS
  WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
     WHERE AGE >= 27 );
     
В результате будут изменены две строки и таблица CUSTOMERS будет выглядеть следующим образом.

22.01.2021

548
A B i U S JS

PHP HTML CSS
Чат
    Для входа только имэйл или имя и апроль
    Можно сменить аватар
    Имэйл Ваше имя
    Пароль