Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 правильно ли я понял, что выполняется в \запросе  [new]
MasterMedia
Member

Откуда:
Сообщений: 23
Изучаю сейчас подзапросы по учебнику. Используется учебная БД pubs. Дан пример в книги, выяснить, каким данным о магазинах из БД pubs не соответствуют какие-либо строки с данными о скидках. Запрос выглядит так:
SELECT stor_id, stor_name
FROM stores
WHERE stor_id NOT IN
	(SELECT stor_id FROM discounts WHERE stor_id IS NOT NULL)


В вложенном подзапросе выбираются строки с данными о скидках, которые не имеют NULL значений. Операция IN возвращает определенный список значений. Соответственно, раз указанна операция NOT возле IN, то получаем отрицание к подзапросу и получаем на выходе строки, которые имеют stor_id = NULL. Правильно я понял и объяснил данный запрос?
27 июл 12, 19:35    [12927522]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли я понял, что выполняется в \запросе  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Как минимум, так:
SELECT stor_id, stor_name
FROM stores
WHERE stor_id NOT IN
	(SELECT x.stor_id FROM discounts x WHERE x.stor_id IS NOT NULL)
27 июл 12, 19:39    [12927534]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли я понял, что выполняется в \запросе  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
MasterMedia
Соответственно, раз указанна операция NOT возле IN, то получаем отрицание к подзапросу и получаем на выходе строки, которые имеют stor_id = NULL. Правильно я понял и объяснил данный запрос?
Нет, не правильно. Вы получаете строки, которых нет в списке. Т.е. если в таблице stores есть значения (1, 2, 3, 4, 5, 6), а подзапрос выбирает значения (1, 2, 3), то первый набор not in второй набор -- это (4, 5, 6).

Сообщение было отредактировано: 27 июл 12, 19:42
27 июл 12, 19:42    [12927538]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли я понял, что выполняется в \запросе  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Неправильно. Вы получите строки из таблицы stores, в которых значения столбца stor_id не нул и не содержатся в не нуловых значениях столбца stor_id таблицы discounts.
27 июл 12, 19:51    [12927554]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли я понял, что выполняется в \запросе  [new]
MasterMedia
Member

Откуда:
Сообщений: 23
Гавриленко Сергей Алексеевич
MasterMedia
Соответственно, раз указанна операция NOT возле IN, то получаем отрицание к подзапросу и получаем на выходе строки, которые имеют stor_id = NULL. Правильно я понял и объяснил данный запрос?
Нет, не правильно. Вы получаете строки, которых нет в списке. Т.е. если в таблице stores есть значения (1, 2, 3, 4, 5, 6), а подзапрос выбирает значения (1, 2, 3), то первый набор not in второй набор -- это (4, 5, 6).

В результирующей строке получим (4, 5, 6)? Простите, но про первый и второй набор не сильно понял, что вы имеете виду?
28 июл 12, 14:39    [12929384]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли я понял, что выполняется в \запросе  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
MasterMedia
Гавриленко Сергей Алексеевич
пропущено...
Нет, не правильно. Вы получаете строки, которых нет в списке. Т.е. если в таблице stores есть значения (1, 2, 3, 4, 5, 6), а подзапрос выбирает значения (1, 2, 3), то первый набор not in второй набор -- это (4, 5, 6).

В результирующей строке получим (4, 5, 6)? Простите, но про первый и второй набор не сильно понял, что вы имеете виду?
Какой такой строке? "Набор" - это набор данных из нескольких строк.
28 июл 12, 17:17    [12929642]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить