Лекция 14: Извлечение данных при помощи Transact-SQL
Список выборки
Как уже говорилось, список выборки – это заданный в предложении SELECT список выражений или колонок, указывающий, какие данные должны выдаваться. Выражение может быть списком из имен колонок, из функций, и из констант. Список выборки может содержать несколько выражений и имен колонок, разделенных запятыми. В предыдущих примерах список выборки был таким:
au_fname, au_lname
Метасимвол "*". В списках выборки можно применять звездочку (символ "*"), являющуюся метасимволом (подстановочным символом, "джокером"), обозначающим все колонки из всех таблиц и представлений, указанных в предложении FROM запроса. Например, чтобы вернуть все колонки всех строк таблицы sales из базы данных pubs, воспользуйтесь таким запросом:
SELECT * FROM sales GO
Далее в этой лекции будет раздел "Перекрестные соединения", в котором описано, что произойдет, если в предложении FROM оператора SELECT, содержащего звездочку, указать более одной таблицы.
Выражения IDENTITYCOL и ROWGUIDCOL. Чтобы извлекать значения из идентифицирующей колонки таблицы (identity column, см. "Создание таблиц баз данных" ), вы можете применять в списках выборки просто выражение IDENTITYCOL. Ниже дан пример запроса для базы данных Northwind, у которой таблица Employees (Сотрудники) имеет идентифицирующую колонку:
USE Northwind GO SELECT IDENTITYCOL FROM Employees GO
Набор результатов этого запроса будет выглядеть примерно так:
EmployeeID ------------- 3 4 8 . . . 9 (всего 9 строк)
Обратите внимание, что заголовок колонки в наборе результатов – такой же, как имя колонки этой таблицы, обладающей свойством IDENTITY (в нашем случае – EmployeeID).
Примерно так же вы можете применять в списке выборки выражение ROWGUIDCOL, обозначающее колонку, обладающую свойством ROWGUIDCOL. Свойство ROWGUIDCOL может иметь лишь колонка, имеющая тип данных uniqueidentifier.
Алиасы колонок.В списках выборки можно применять алиасы колонок, благодаря чему можно поменять заголовок, выдаваемый в наборе результатов. Алиасы могут оказаться полезными в случаях, когда надо пояснить смысл колонки или чтобы дать заголовок колонке, используемой в функции, а также в качестве ссылки для предложения ORDER BY.
Когда в разных таблицах имеются колонки с одинаковыми именами, вы можете захотеть, чтобы в выводе в заголовках выдавались не только имена колонок, но и имена таблиц; это улучшит понимание выводимой информации. Рассмотрим теперь примеры с колонкой lname таблицы employee базы данных pubs. Можно дать такой запрос:
USE pubs GO SELECT lname FROM employee GO
Этот запрос выдаст такие результаты:
lname ---------- Cruz Roulet Devon . . . O’Rourke Ashworth Latimer (всего 43 строки)
Если вы хотите, чтобы в наборе результатов вместо имеющегося заголовка "lname" выводился бы заголовок "Фамилия сотрудника", подчеркнув тем самым, что фамилии взяты из таблицы сотрудников, то надо применить ключевое слово AS, вот так:
SELECT lname AS "Фамилия сотрудника" FROM employee GO
Эта команда выдаст такой вывод:
Фамилия сотрудника ------------------------- Cruz Roulet Devon . . . O’Rourke Ashworth Latimer (всего 43 строки)
Алиасы колонок можно применять в сочетании с другими типами выражений в списке выборки, а также их можно применять в предложениях ORDER BY для ссылок на колонки. Предположим, что в списке выборки имеется вызов функции. Выводу этой функции можно назначить алиас (т.е. имя), воспользовавшись ключевым словом AS после вызова функции. Если при вызове функции не пользоваться алиасом, то колонка ее вывода не будет вообще иметь никакого заголовка. Ниже дан пример оператора, назначающего заголовок "Maximum Job ID" выводу функции MAX:
SELECT MAX(job_id) AS "Maximum Job ID" FROM employee GO
Алиас колонки заключен в кавычки, потому что он состоит из нескольких слов, разделенных пробелами. Если алиас не содержит пробелов (как в следующем нашем примере), то его не нужно заключать в кавычки.
Алиас колонки, заданный в предложении SELECT, может применяться в качестве аргумента предложения ORDER BY, он позволяет предложению ORDER BY ссылаться на колонку из предложения SELECT. Это полезно, когда в списке выборки содержится функция, вывод которой должен быть отсортирован. Ниже приведен пример команды, выдающей количество проданных книг в каждом из магазинов, причем вывод отсортирован по этому количеству. В предложении ORDER BY применяется алиас Quantity_of_Books, заданный в списке выборки:
SELECT SUM(qty) AS Quantity_of_Books, stor_id FROM sales GROUP BY stor_id ORDER BY Quantity_of_Books GO
В этом примере алиас не заключен в кавычки, потому что он не содержит пробелов.
Если бы в этом запросе мы не задали бы алиас для колонки SUM(qty), то мы могли бы поместить в предложение ORDER BY не алиас, а SUM(qty), как показано в приведенном ниже примере. Вывод был бы таким же, за исключением того, что колонка сумм проданных книг выводилась бы без заголовка:
SELECT SUM(qty), stor_id FROM sales GROUP BY stor_id ORDER BY SUM(qty) GO
Помните, что алиасы колонок применяются для задания заголовков колонок вывода и никак не влияют не результаты запросов.