Вложенная инструкция select в SQL Server

кто-нибудь может помочь мне понять, почему следующее не работает?

SELECT name FROM (SELECT name FROM agentinformation)

Я думаю, что мое понимание SQL неверно, потому что я думал, что это вернет то же самое, что и

SELECT name FROM agentinformation

разве внутренняя инструкция select не создает результирующий набор, который запрашивает внешняя инструкция SELECT?

2 ответов


вам нужно псевдоним подзапроса.

SELECT name FROM (SELECT name FROM agentinformation) a  

или точнее

SELECT a.name FROM (SELECT name FROM agentinformation) a  

ответ предоставлено Джо Стефанелли уже правильно.

SELECT name FROM (SELECT name FROM agentinformation) as a  

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

операторы, которые включают подзапрос, обычно принимают один из них форматы:

  • где выражение [не] в (подзапросе)
  • где выражение comparison_operator [ANY / ALL] (подзапрос)
  • где [не] существует (подзапрос)

проверить более правила подзапрос и типы подзапросов.

примеры вложенного подзапроса.

  1. IN / NOT IN-этот оператор принимает вывод внутреннего запроса после получения внутреннего запроса выполняется, который может быть равен нулю или более значений и отправить его во внешний запрос. Затем внешний запрос извлекает все совпадающие [в операторе] или не совпадающие [не в операторе] строки.

  2. ANY - [>ANY или любой оператор берет список значений, полученных внутренним запросом, и извлекает все значения, которые больше минимального значения списка. The

например >ANY (100,200,300), оператор ANY будет получать все значения больше, чем 100.

  1. ALL – [>ALL или ALL оператор берет список значений, полученных внутренним запросом, и извлекает все значения, которые больше максимума списка. Этот

например >ALL (100,200,300), оператор ALL будет получать все значения, превышающие 300.

  1. EXISTS - ключевое слово EXISTS создает логическое значение [TRUE / FALSE]. Это EXISTS проверяет наличие строк, возвращаемых вложенным запросом.