Части инструкции SELECT
Полный синтаксис инструкции SELECT является сложным, однако основные предложения можно вкратце описать следующим образом:
SELECT select_list
[ INTO new_table_name ]
FROM table_list
[ WHERE search_conditions ]
[ GROUP BY group_by_list ]
[ HAVING search_conditions ]
[ ORDER BY order_list [ ASC | DESC ] ]
- select_list
Описывает столбцы результирующего набора. Это список выражений, разделенных запятыми. Каждое выражение определяет как формат (тип данных и размер), так и источник данных для столбца результирующего набора. Каждое выражение списка выборки обычно ссылается на столбец в исходной таблице или представлении, предоставляющем данные, но может быть любым другим выражением, например константой или функцией Transact-SQL. Использование выражения * в списке выбора указывает, что должны быть возвращены все столбцы исходной таблицы.
- INTO new_table_name
Указывает, что результирующий набор используется для создания новой таблицы. Параметр new_table_name указывает имя новой таблицы.
FROM table_list
Содержит список таблиц, из которых будут извлечены данные результирующего набора. Этими источниками могут быть:- Базовые таблицы на локальном сервере, где работает SQL Server 2005.
- Представления в локальном экземпляре SQL Server. Внутри SQL Server разрешаются ссылки на представления относительно базовых таблиц, на которых построено представление.
- Связанные таблицы. Это таблицы в источниках данных OLE DB, к которым можно обратиться с помощью SQL Server. Это упоминается как распределенный запрос. К источникам данных OLE DB можно обратиться из SQL Server, связывая их как связанный сервер, или сослаться на источник данных в функции OPENROWSET или OPENQUERY.
Предложение FROM может также содержать спецификации соединения. Они задают определенный путь для SQL Server, который должен использоваться при навигации от одной таблицы к другой.
Предложение FROM также используется в инструкциях DELETE и UPDATE, чтобы определить таблицы, которые будут изменены.
WHERE search_conditions
Предложение WHERE является фильтром, задающим условия, которым каждая строка в исходных таблицах должна соответствовать, чтобы быть выбранной инструкцией SELECT. Только строки, удовлетворяющие условиям, вносят данные в результирующий набор. Данные из строк, не удовлетворяющих условиям, не используются.Предложение WHERE также используется в инструкциях DELETE и UPDATE, чтобы определить строки в целевой таблице, которые будут изменены.
- GROUP BY group_by_list
Предложение GROUP BY делит результирующий набор на группы на основании значений в столбцах group_by_list. Например, таблица Sales.SalesOrderHeader базы данных AdventureWorks имеет десять значений в TerritoryID. Предложение GROUP BY TerritoryID делит результирующий набор на 10 групп, по одной для каждого значения TerritoryID.
- HAVING search_conditions
Предложение HAVING является дополнительным фильтром, который применяется к результирующему набору. Логически предложение HAVING фильтрует строки из промежуточного результирующего набора, построенного путем выполнения любого из предложений FROM, WHERE или GROUP BY в инструкции SELECT. Предложения HAVING обычно используются с предложением GROUP BY, хотя предложение GROUP BY не требуется перед предложением HAVING.
ORDER BY order_list[ ASC | DESC ]
Предложение ORDER BY определяет порядок, в котором отсортированы строки в результирующем наборе. Параметр order_list указывает столбцы результирующего набора, которые составляют список сортировки. Ключевые слова ASC и DESC используются для указания того, в какой последовательности сортируются строки — возрастающей или убывающей.Предложение ORDER BY является важным, потому что в соответствии с реляционной теорией нельзя предполагать, что строки в результирующем наборе имеют какую-либо последовательность, если ORDER BY не указано. Предложение ORDER BY должно использоваться в любой инструкции SELECT, для которой важен порядок строк результирующего набора.
Предложения в инструкции SELECT должны быть указаны в соответствующем порядке.
Каждая ссылка на объект базы данных должна быть однозначной. Двусмысленность может исходить из следующих источников:
Может быть несколько объектов с одинаковым именем в системе. Например, как Schema1, так и Schema2 могут иметь таблицу по имени TableX. Чтобы разрешить эту двусмысленность и указать, что TableX принадлежит схеме Schema1, задайте имя таблицы вместе с именем схемы:
SELECT * FROM Schema1.TableX
База данных, в которой находится объект, не всегда может быть текущей базой данных при выполнении инструкции SELECT. Чтобы быть уверенным в том, что всегда используется правильный объект, независимо от настройки текущей базы данных, указывайте имя объекта с базой данных и схемой:
SELECT * FROM AdventureWorks.Purchasing.ShipMethod
Таблицы и представления, указанные в предложении FROM могут иметь дубликаты имен столбцов. Часто внешние ключи будут иметь то же самое имя столбца, какое имеет соответствующий первичный ключ. Чтобы разрешить эту двусмысленность с дублирующими именами, имя столбца должно быть указано с именем таблицы или представления:
SELECT DISTINCT Sales.Customer.CustomerID, Sales.Store.Name FROM Sales.Customer JOIN Sales.Store ON ( Sales.Customer.CustomerID = Sales.Store.CustomerID) WHERE Sales.Customer.TerritoryID = 1
Этот синтаксис становится громоздким, когда имена таблицы и представления должны быть оба полностью указанными. Можно решить эту проблему, назначив таблице имя корреляции, также известное как переменная диапазона или псевдоним, с помощью ключевого слова AS в предложении FROM. Полностью указанное имя таблицы или представления должно быть указано в предложении FROM. Все другие обращения к таблице или представлению затем могут использовать имя корреляции. Применение имен корреляции и полного указания имен таблиц в предыдущем образце дает такую инструкцию SELECT:
SELECT DISTINCT c.CustomerID, s.Name FROM Sales.Customer AS c JOIN Sales.Store AS s ON ( c.CustomerID = s.CustomerID) WHERE c.TerritoryID = 1
Дополнительные сведения о квалификаторах объекта см. в разделе Идентификаторы.
В электронной документации SQL Server многие примеры Transact-SQL упрощены путем отказа от использования составных имен. Хотя эти элементы опущены в примерах для удобства чтения, рекомендуем использовать составные имена в инструкциях Transact-SQL в промышленных системах.
См. также
Другие ресурсы
Выражения (Transact-SQL)
SELECT (Transact-SQL)
IDENTITY (свойство) (Transact-SQL)