Я прохожу онлайн-курс по базе данных. Теперь я понимаю следующий запрос
SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
что-то вроде
SELECT column1 FROM t1 WHERE TRUE;
но, подойдя к подзапросу с EXISTS, я впадаю в замешательство.
(Колледж имеет ключ (имя, штат).) Следующий запрос ищет названия колледжей, в которых есть другие колледжи в том же штате.
SELECT name,state
FROM College C1
WHERE EXISTS (SELECT * FROM College C2
WHERE C1.state = C2.state and C1.name != C2.name);
Подзапрос вернет отношение, верно? так как оно находится внутри круглых скобок, оно вычисляется первым.
И возвращаемое отношение действительно существует из-за моей таблицы, созданной на основе артефактов. Таким образом, оператор EXISTS всегда возвращает TRUE, результатом является полная таблица с выбранными столбцами.
Правки: извините за не очень хорошую демонстрацию. вот мое отношение
Standford CA
Berkley CA
MIT MA
истинный результат
Standford CA
Berkley CA
но я думаю, что это должно быть
Standford CA
Berkley CA
MIT MA
Видимо ошибка в моих рассуждениях. Подскажите, где это и что нужно исправить?