кодесурса
«SQL

Подзапросы SQL

script1adsense2code
script1adsense3code

Что такое подзапрос в SQL?

Подзапрос - это SQL-запрос, вложенный в более крупный запрос.

  • Подзапрос может появляться в:
    • - предложение SELECT
    • - ОТ условия
    • - ГДЕ оговорка
  • Подзапрос может быть вложен в оператор SELECT, INSERT, UPDATE или DELETE или в другой подзапрос.
  • Подзапрос обычно добавляется в предложении WHERE другого оператора SQL SELECT.
  • Вы можете использовать операторы сравнения, такие как>, <или =. Оператор сравнения также может быть оператором из нескольких строк, таким как IN, ANY или ALL.
  • Подзапрос также называется внутренним запросом или внутренним выбором, в то время как оператор, содержащий подзапрос, также называется внешним запросом или внешним выбором.
  • Внутренний запрос выполняется первым перед его родительским запросом, чтобы результаты внутреннего запроса могли быть переданы во внешний запрос.

Вы можете использовать подзапрос в операторе SELECT, INSERT, DELETE или UPDATE для выполнения следующих задач:

  • Сравните выражение с результатом запроса.
  • Определите, включено ли выражение в результаты запроса.
  • Проверьте, выбирает ли запрос какие-либо строки.

Синтаксис:

«SQL
  • Подзапрос (внутренний запрос) выполняется один раз перед выполнением основного запроса (внешнего запроса).
  • Основной запрос (внешний запрос) использует результат подзапроса.

Пример подзапросов SQL:

В этом разделе вы познакомитесь с требованиями использования подзапросов. У нас есть следующие две таблицы «студент» и «оценки» с общим полем «StudentID».



студенческие оценки

Теперь мы хотим написать запрос, чтобы определить всех студентов, которые получили более высокие оценки, чем у студентов, у которых StudentID - «V002», но мы не знаем отметок «V002».
- Чтобы решить проблему, нам нужны два запроса. Один запрос возвращает оценки (хранящиеся в поле Total_marks) «V002», а второй запрос определяет студентов, которые получили более высокие оценки, чем результат первого запроса.

Первый запрос:

SELECT *  
FROM `marks`  
WHERE studentid = 'V002';

Результат запроса:


Результат запроса 80.
- Используя результат этого запроса, здесь мы написали еще один запрос, чтобы определить студентов, которые получили более высокие оценки, чем 80. Вот запрос:

Второй запрос:

SELECT a.studentid, a.name, b.total_marks
FROM student a, marks b
WHERE a.studentid = b.studentid
AND b.total_marks >80;

Результат запроса:


Выше двух запросов определили студентов, которые получают лучший номер, чем студент, у которого StudentID - «V002» (Абхай).

Вы можете объединить два вышеупомянутых запроса, поместив один запрос в другой. Подзапрос (также называемый «внутренний запрос») - это запрос в скобках. Смотрите следующий код и результат запроса:

Код SQL:

SELECT a.studentid, a.name, b.total_marks
FROM student a, marks b
WHERE a.studentid = b.studentid AND b.total_marks >
(SELECT total_marks
FROM marks
WHERE studentid =  'V002');

Результат запроса:


Наглядное представление подзапроса SQL:

«SQL

Подзапросы: Общие правила

Оператор SELECT подзапроса почти аналогичен оператору SELECT и используется для начала обычного или внешнего запроса. Вот синтаксис подзапроса:

Синтаксис:

 (ВЫБЕРИТЕ [DISTINCT] subquery_select_argument
FROM {table_name | view_name}
{table_name | view_name} ...
[ГДЕ search_conditions]
[GROUP BY aggregate_expression [, aggregate_expression] ...]
[HAVING search_conditions])

Подзапросы: Руководство

Есть несколько рекомендаций, которые следует учитывать при использовании подзапросов:

  • Подзапрос должен быть заключен в скобки.
  • Подзапрос должен быть расположен справа от оператора сравнения.
  • Подзапросы не могут манипулировать своими результатами внутри, поэтому предложение ORDER BY не может быть добавлено в подзапрос. Вы можете использовать предложение ORDER BY в основном операторе SELECT (внешний запрос), которое будет последним предложением.
  • Используйте однорядные операторы с однорядными подзапросами.
  • Если подзапрос (внутренний запрос) возвращает нулевое значение для внешнего запроса, внешний запрос не будет возвращать никаких строк при использовании определенных операторов сравнения в предложении WHERE.

Тип подзапросов

  • Подзапрос из одной строки: возвращает ноль или одну строку.
  • Многострочный подзапрос: возвращает одну или несколько строк.
  • Подзапросы с несколькими столбцами: возвращает один или несколько столбцов.
  • Коррелированные подзапросы: ссылаются на один или несколько столбцов во внешнем операторе SQL. Подзапрос известен как коррелированный подзапрос, поскольку подзапрос связан с внешним оператором SQL.
  • Вложенные подзапросы: подзапросы помещаются в другой подзапрос.

На следующей сессии мы подробно обсудили вышеуказанные темы. Помимо вышеуказанного типа подзапросов, вы можете использовать подзапрос внутри операторов INSERT, UPDATE и DELETE. Вот краткое обсуждение:

Подзапросы с оператором INSERT

Оператор INSERT может использоваться с подзапросами. Вот синтаксис и пример подзапросов, использующих оператор INSERT.

Синтаксис:

 INSERT INTO table_name [(column1 [, column2])]
SELECT [* | column1 [, column2]
FROM table1 [, table2]
[ГДЕ ЗНАЧЕНИЕ ОПЕРАТОРА];

Если мы хотим вставить те заказы из таблицы 'orders', которые имеют advance_amount 2000 или 5000, в таблицу 'neworder', можно использовать следующий SQL:

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


Код SQL:

INSERT INTO neworder
SELECT * FROM  orders
WHERE advance_amount in(2000,5000);

Выход:

«подзапрос

Чтобы увидеть более подробную информацию о подзапросах с использованием оператора INSERT, нажмите здесь .

Подзапросы с оператором UPDATE

В операторе UPDATE вы можете установить новое значение столбца, равное результату, возвращенному подзапросом из одной строки. Вот синтаксис и пример подзапросов, использующих оператор UPDATE.

Синтаксис:

 ОБНОВЛЕНИЕ таблицы SET имя_ столбца = новое_значение
[ГДЕ ОПЕРАТОР [ЗНАЧЕНИЕ]
(ВЫБЕРИТЕ COLUMN_NAME
FROM TABLE_NAME)     
[ ГДЕ) ]

Если мы хотим обновить эту ord_date в таблице 'neworder' с помощью '15-JAN -10 ' с разницей ord_amount и advance_amount меньше минимального ord_amount таблицы 'orders', можно использовать следующий SQL:

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


Код SQL:

UPDATE neworder
SET ord_date='15-JAN-10'
WHERE ord_amount-advance_amount<
(SELECT MIN(ord_amount) FROM orders);

Выход:

«подзапрос

Чтобы увидеть более подробную информацию о подзапросах с использованием оператора UPDATE, нажмите здесь .

Подзапросы с оператором DELETE

Оператор DELETE может использоваться с подзапросами. Вот синтаксис и пример подзапросов, использующих оператор DELETE.

Синтаксис:

 DELETE FROM TABLE_NAME
[ГДЕ ОПЕРАТОР [ЗНАЧЕНИЕ]
(ВЫБЕРИТЕ COLUMN_NAME    
FROM TABLE_NAME)    
[ ГДЕ) ]

Если мы хотим удалить те заказы из таблицы 'neworder', у которых advance_amount меньше максимального значения advance_amount таблицы 'orders', можно использовать следующий SQL:

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


Код SQL:

DELETE FROM neworder
WHERE advance_amount<
(SELECT MAX(advance_amount) FROM orders);

Выход:

«подзапрос

Чтобы увидеть более подробную информацию о подзапросах с использованием оператора DELETE, нажмите здесь .

Что дальше?

Примечание. Выводы указанного оператора SQL, показанного здесь, взяты с использованием Oracle Database 10g Express Edition.

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

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

Предыдущий: Использование предложения where для объединения таблиц на основе неключевых столбцов
Далее: Подзапросы с одной строкой

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


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code