Подзапросы SQL
Что такое подзапрос в SQL?
Подзапрос - это SQL-запрос, вложенный в более крупный запрос.
- Подзапрос может появляться в:
- - предложение SELECT
- - ОТ условия
- - ГДЕ оговорка
- Подзапрос может быть вложен в оператор SELECT, INSERT, UPDATE или DELETE или в другой подзапрос.
- Подзапрос обычно добавляется в предложении WHERE другого оператора SQL SELECT.
- Вы можете использовать операторы сравнения, такие как>, <или =. Оператор сравнения также может быть оператором из нескольких строк, таким как IN, ANY или ALL.
- Подзапрос также называется внутренним запросом или внутренним выбором, в то время как оператор, содержащий подзапрос, также называется внешним запросом или внешним выбором.
- Внутренний запрос выполняется первым перед его родительским запросом, чтобы результаты внутреннего запроса могли быть переданы во внешний запрос.
Вы можете использовать подзапрос в операторе SELECT, INSERT, DELETE или UPDATE для выполнения следующих задач:
- Сравните выражение с результатом запроса.
- Определите, включено ли выражение в результаты запроса.
- Проверьте, выбирает ли запрос какие-либо строки.
Синтаксис:
- Подзапрос (внутренний запрос) выполняется один раз перед выполнением основного запроса (внешнего запроса).
- Основной запрос (внешний запрос) использует результат подзапроса.
Пример подзапросов 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:
Подзапросы: Общие правила
Оператор 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 - Слайд-презентация
- Подзапросы с одной строкой
- Несколько подзапросов строк и столбцов
- Коррелированные подзапросы с использованием псевдонимов
- Вложенные подзапросы
Примечание. Выводы указанного оператора SQL, показанного здесь, взяты с использованием Oracle Database 10g Express Edition.
Упражнения по 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.
Предыдущий: Использование предложения where для объединения таблиц на основе неключевых столбцов
Далее: Подзапросы с одной строкой
Новый контент: Composer: менеджер зависимостей для PHP , R программирования