Вы можете использовать выражение, основанное на столбце, а не просто сам столбец, в предложении SELECT подзапроса. Это может быть выполнено или с помощью реляционных операторов или с IN. Например, следующий запрос использует реляционный оператор = ( вывод показывается в Рисунке 10.6 ):
SELECT * FROM Customers WHERE cnum = ( SELECT snum + 1000 FROM Salespeople WHERE sname = Serres );
Он находит всех заказчиков чье значение поля cnum равное 1000, выше поля snum Serres. Мы предполагаем, что столбец sname не имеет никаких двойных значений ( это может быть предписано или UNIQUE INDEX, обсуждаемым в Главе 17 , или ограничением UNIQUE, обсуждаемым в Главе 18 ); иначе подзапрос может произвести многочисленные значения. Когда поля snum и сnum не имеют такого простого функционального значения, как например первичный ключ , что не всегда хорошо, запрос типа вышеупомянутого невероятно полезен.
SQL Execution Log
SELECT *
FROM Customers WHERE cnum =
(SELECT snum + 1000 WHERE Salespeople WHERE sname = ‘Serres’
cnum
cname
city
rating
snum
2002
Giovanni
Rome
200
1003
Рисунок 10.6: Использование подзапроса с
выражением
‹ Использование подзапросов, которые выдают много строк с помощью оператора IN
Вверх
Подзапросы выбирают одиночные столбцы ›