Формирование запросов на выборку данных в SQL
Для формирования запросов на выборку
данных в SQL используется оператор SELECT. Его формат представлен ниже: SELECT [ALL I
DISTINCT] selectitemcommalist FROM tablereferencecommalist [WHERE
conditional_expression] [GROUP BY column_name_commalist] [HAVING
conditionalexpression] [ORDER BY order item commalist] является достаточно сложным оператором, позволяющим выбирать
данные из одной или нескольких таблиц, выполнять группировку, обработку данных
с помощью агрегатных функций, формировать вложенные запросы и т.д. Выражение SELECT обрабатывается целиком,
а не «построчно», как обычно бывает в языках программирования. В несколько
обобщенном виде схема выполнения оператора SELECT выглядит следующим
образом:
1) выполняется раздел FROM;
2) выполняется раздел WHERE (если есть);
) выполняется GROUP BY (если есть);
4) выполняется HAVING (если есть);
5) выполняются определения в
разделе SELECT:
6) выполняется ORDER BY (если есть).
Начнем с рассмотрения обязательного
раздела SELECT. В нем указывается список элементов выборки select-item-commalist, который не должен быть
пустым. Также может использоваться ключевое слово ALL или DISTINCT. Первое из них
указывает, что в результате запроса могут быть повторяющиеся строки, второе -
что повторения отбрасываются. Например, используется ключевое слово
DISTINCT и есть три совпадающих строки, тогда в результате из них
останется только одна. Когда явно ничего не указано, то подразумевается ALL.
Рассмотрим теперь пример с заданием
имени столбца и использованием текстовой константы в столбце. Если необходимо
явно указать, как столбец будет называться в выводимых результатах запроса, это
можно сделать в списке элементов выборки в разделе SELECT. Новое имя указывается
после исходного названия столбца через про - бел или после необязательного
ключевого слова «as». Ниже приведен пример, в котором список фамилий и инициалов
студентов сопровождается подписью «Фамилия и инициалы».DISTINCT «Фамилия и инициалы» as
Label1/ FIO FROM Students
Подпись задается с помощью строковой
константы, которые в SQL берутся в одинарные кавычки. Называться столбец с подписью будет Label 1. Результат выполнения
этого запроса для набора данных из табл. 7.2 представлен в табл. 7.3. Как
отмечалось выше, ключевое слово «as» в SELECT можно пропустить, но иногда оно позволяет сделать текст на SQL более понятным.
Если необходимо получить все
значения из интервала, можно использовать конструкцию BETWEEN… AND…. Пусть имеется таблица
Book
с информацией о книгах, и в ней целочисленный стол - бец Year, содержащий год издания
книги. Получить все книги, издан - ные с 1990 по 2002 год включительно, можно с
помощью приведен - ного ниже запроса (т.к. «Year» для MS SQL Server является ключе - вым
словом, название столбца снова в квадратных скобках). SELECT * FROM Book(Year) BETWEEN 1990 AND 2002 Аналогичный результат даст запрос* FROM Book [Year]>=1990 AND [Year]<=2002
Если наоборот нужны все книги, кроме
изданных в этот период, можно использовать конструкцию NOT BETWEEN:* FROM Book[Year] NOT BETWEEN 1990 AND 2002
Для приведенного выше примера запрос
SELECT
* FROM Results GROUP BY StudID должен привести к ошибке. При использовании GROUP BY, в разделе SELECT могут быть указаны
только те столбцы, но которым произво - дится группировка. Прочие столбцы могут
указываться, если они вы - ступают в качестве аргументов а1регатных функций,
сопоставляющих группе значений одно.
Ниже приведены основные агрегатные
функции:
- среднее значение: AVG ((DISTINCT | ALL) <выражение>);
- максимум: МАХ([DISTINCT|ALL] <выражение>);
- минимум: MIN([DISTINCT I
ALL] <выражение>);
- сумма: SUM([DISTINCT I
ALL] <выражение>);
Группировка может проводиться и по
нескольким столбцам: для этого в разделе GROUP BY нужно перечислить их
через запятую. Кроме того, можно группировать строю! по значению некоторой
функции от данных в столбцах. Например, на рис. 7.1. а представлена таблица Device, в которой есть столбец
DatePurch типа Date. В столб - це содержатся даты покупки устройств. Пусть необходимо
подсчи - тать, сколько устройств было приобретено в каждом году (рис. 7.1, б).
В Transact-SQL есть функция YEARO, позволяющая получить из даты значение года. Сам запрос будет
выглядеть следующим образом: SELECT YEAR(DatePurch) [Год], COUNT(Devld) [К-во устройств] FROM Device GROUP BY YEAR(DatePurch)
Рассмотрим пример запроса,
выводящего записи отсортирован - ными по двум столбцам: по названию предмета по
возрастанию и оценке - по убыванию.
SELECT Subj, StudID,
Mark FROM ResultsBY Subj, Mark DESC
Список литературы
1. Диго С.М. Базы
данных. Проектирование и создание: Учебно-методический комплекс. - М.: Изд.
центр ЕАОИ, 2008. - 171 с.
. Диго С.М.
Проектирование и использование баз данных: учебник для вузов по направлению и
специальности «Информ. систе - мы в экономике» / С.М. Диго. - М.: Финансы и
статистика, 1995. - 207 с.
3. Дейт К.Дж. Введение
в системы баз данных, 6-е издание: Пер. с англ. - К.; М.; СПб.: Издательский
дом «Вильяме», 1999. - 848 с.
4. Карпова Т.С. Базы
данных: модели, разработка, реализация. - СПб.: Питер, 2002 - 304 с.
. Кириллов В.В.
Введение в реляционные базы данных. / В.В. Кириллов. Г.Ю. Громов - СПб.:
БХВ-Петербург, 2009. - 464 с.
6. N. Sharma, R.F. Chong и др. Database fundamentals / [Электронный ресурс] URL:
https7/w\vw.ibm.com/developenvorks/\vikis/display/db2oncampus/FREE+
ebook+-+Database+fundamcntals
7. Крёнке Д. Теория и
практика построения баз данных. 8-е нзд - СПб.: Питер, 2003. (Серия «Классика computer science»). - 800 с.
. Советов Б.Я. Базы
данных: Теория и практика. Учеб. для вту - зов / Б.Я. Советов, В.В.
Цехановский, В.Д. Чертовской. -2-е изд., стер. - М.: Высшая школа, 2007. - 463
с.
9. Кузнецов С.Д. Базы
данных: языки и модели. Учебник - М.: ООО «Бином-Пресс», 2008. - 720 с.
10. Кривошеин М. ER: диаграммы сущность -
связь. [Электрон - ный ресурс] URL: http://mikkri.narod.ru/library/pdf/ER_Modeling.pdf
П. Ицик
Бен Гаи. Microsoft SQL
Server 2008. Осиобы Т SQL: Пер. с англ. - СПб.:
БХВ-Петербург, 2009. - 432 с.