Для пользователей, которые регистрируются. Если Вам не приходит письмо с подтверждением email, пишите на admin[at]quizful[dot]net - будем подтверждать вручную. Просим прощения за доставленные неудобства.

С уважением,
команда Quizful
Знаете ли Вы, что

Вы можете подписаться на RSS ленту новых тестов сервиса Quizful, в том числе и отдельно по каждой категории

Топ контрибуторов
loading
loading
Лента обновлений
ссылка May 17 19:13
Комментарий от elirijndael:
Полностью согласен с valid_name.
ссылка May 17 18:47
Комментарий от Aleksandr89:
Неплохой тест. Для тех кто хочет ещё попрактиковатьс...
ссылка May 17 15:13
Комментарий от dpdpdp:
Поменяйте радиокнопки на чекбоксы.
Во втором варианте про...
ссылка May 17 11:55
Комментарий от Torredo812:
вот это подвох!!!
забываешь что х увеличился))и думае...
ссылка May 17 10:50
Комментарий от lesha1980:
Хороший вопрос. Получается, что проверяется только x в...
Статистика

Тестов: 130, вопросов: 5791. Пройдено: 126757 / 526597.

SQL Подзапросы

head tail Информация о статье
категория
Базы данных
дата16.07.2009
авторflexxs
голосов10

[Disclaimer: Данная статья была переведена в рамках "Конкурса на лучший перевод статьи" на сервисе Quizful. Ссылка на оригинал находится внизу страницы.]

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

Подзапросы являются альтернативным путем получения данных из множества таблиц.

Наряду с операторами сравнения такими, как =, <, >, >=, <= и др., Вы можете использовать подзапросы с перечисленными ниже конструкциями:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

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

1)Обычно, подзапрос возвращает только одну запись, но случается и так, что записей может быть много, тогда в условии WHERE используются такие операторы, как IN, NOT IN. Запрос может выглядеть следующий образом:

SELECT first_name, last_name, subject 
FROM student_details 
WHERE games NOT IN ('Cricket', 'Football'); 

Тогда результат будет примерно таким:

first_name    last_name   games
------------ ----------- ----------
Shekar Gowda Badminton
Priya Chandra Chess

2)Давайте рассмотрим используемую ранее таблицу student_details. Если Вы знаете имена студентов, изучающих естествознание (science), то можете получить их id, используя приведенный ниже запрос

SELECT id, first_name 
FROM student_details 
WHERE first_name IN ('Rahul', 'Stephen'); 

но, если Вы не знаете их имен, то для получения id Вам необходимо написать запрос, описанным ниже способом:

SELECT id, first_name 
FROM student_details 
WHERE first_name IN (SELECT first_name 
FROM student_details 
WHERE subject= 'Science'); 

Результат:

Id         first_name
-------- -------------
100 Rahul
102 Stephen

В описанном выше запросе, вначале выполняется внутренний запрос, затем внешний


3) Вы можете использовать подзапрос с оператором INSERT для добавления данных из одной таблицы в другую. Давайте попробуем сгруппировать всех студентов, которые изучают математику в таблицу math_group

INSERT INTO maths_group(id, name) 
SELECT id, first_name || ' ' || last_name 
FROM student_details WHERE subject= 'Maths' 

4) Подзапрос может использоваться с оператором SELECT, как описано ниже. Давайте используем таблицы product и order_items, объединив их между собой

select p.product_name, 
p.supplier_name,
(select order_id from order_items where product_id = 101) as order_id
from product p
where p.product_id = 101
product_name   supplier_name   order_id
-------------- -------------- ----------
Television Onida 5103

Соотнесенный подзапрос

Запрос называется соотнесенным, когда оба, и внутренний, и внешний, запросы взаимозависимы. Это означает, что для обработки каждой записи внутреннего запроса, должна быть получена также запись внешнего запроса, т.е. внутренний запрос всецело зависит от внешнего.

SELECT p.product_name FROM product p 
WHERE p.product_id = (SELECT o.product_id FROM order_items o 
WHERE o.product_id = p.product_id); 

Примечание:

1) Вы можете использовать столько вложенных запросов, сколько захотите, но в Oracle не рекомендуется использовать более 16 вложений.

2) Если подзапрос не зависит от внешнего запроса – он называется несоотнесенным подзапросом

----------
Оригинальный текст статьи: SQL Subquery

Если Вам понравилась статья, проголосуйте за нее

Голосов: 10  loading...
googperson   googman   googler   c0nst   rubynovich   yohan   ulidtko   Lenon1   access   serj