ЗНАЧЕНИЯ, КОТОРЫЕ МОГУТ ВЫДАВАТЬ ПОДЗАПРОСЫ
Скорее всего было бы удобнее, чтобы наш подзапрос в предыдущем примере возвращал одно и только
одно значение. Имея выбранным поле snum " WHERE city = "London" вместо "WHERE sname = 'Motika", можно получить
несколько различных значений. Это может сделать уравнение в предикате основного запроса невозможным для оценки
верности или неверности, и команда выдаст ошибку. При использовании подзапросов в предикатах основанных на
реляционных операторах , вы должны убедиться что использовали
подзапрос который будет выдавать одну и только одну строку вывода. Если вы используете подзапрос который не выводит
никаких значений вообще, команда не потерпит неудачи; но основной запрос не выведет никаких значений. Подзапросы
которые не производят никакого вывода (или нулевой вывод) вынуждают рассматривать предикат ни как верный ни как
неверный, а как неизвестный. Однако, неизвестный предикат имеет тот же самый эффект что и неверный: никакие строки
не выбираются основным запросом . Это плохая
стратегия, чтобы делать что-нибудь подобное следующему:
SELECT * FROM Orders WHERE snum = ( SELECT snum FROM
Salespeople WHERE city = Barcelona );
Поскольку мы имеем только одного продавца в Barcelona - Rifkin, то подзапрос будет
выбирать одиночное значение snum и следовательно будет принят. Но это - только в данном случае. Большинство SQL баз
данных имеют многочисленых пользователей, и если другой пользователь добавит нового продавца из Barcelona в таблицу,
подзапрос выберет два значения, и ваша команда потерпит неудачу.