Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник SQL (Швыдков).doc
Скачиваний:
0
Добавлен:
11.12.2019
Размер:
441.34 Кб
Скачать

Синтаксис

SELECT Avg (выражение) as ….

FROM таблицa

[WHERE …]

Аргумент выражение является строковым выражением, которое определяет поле, содержащее числовые данные для вычисления среднего значения, или выражение, выполняющее вычисления с данными из этого поля. Операнды аргумента выражение могут включать

  • имя поля таблицы,

  • константу

  • или функцию.

(Функция может быть внутренней или определяться пользователем, но не может быть другой статистической функцией SQL).

Дополнительные сведения

Среднее значение, вычисленное функцией Avg, является числовым значением (сумма значений, деленная на их количество).

Функция Avg не включает в вычисления поля со значениями Null.

Следующий запрос определяет средний балл 112 группы

SELECT AVG([Экзамен])AS [Ср балл]

FROM Ведомость

WHERE Группа = 112;

Фамилия

Группа

Экзамен

Ср Балл

ИСАЕВ

104

3

3.33

ИСАЧКИН

112

4

КАМЕНЕВ

108

5

ИВАННИКОВ

112

3

ИВАНОВ

101

4

КАРТАШЕВ

112

3

КАШОЛКИН

101

5

[Оглавление]

Функции Min, Max

Возвращают минимальное и максимальное значения из набора значений, содержащихся в указанном поле запроса.

Синтаксис

SELECT Min (выражение) as ….

FROM таблицa

[WHERE …]

Аргумент выражение является строковым выражением, которое определяет поле, содержащее обрабатываемые данные, или выражение, выполняющее вычисления с данными из этого поля. Операнды аргумента выражение могут включать

  • имя поля таблицы,

  • константу

  • или функцию.

(Функция может быть внутренней или определяться пользователем, но не может быть другой статистической функцией SQL).

Дополнительные сведения

Функции Min и Max используются для определения наименьшего и наибольшего значений из поля на основе выборки или группировки. Например, можно применить эти функции для возврата наименьшей и наибольшей стоимости доставки. Если не указан способ группировки, используется вся таблица.

Следующий запрос определяет максимальную зарплату.

SELECT Max([К выплате])AS Максимум

FROM Ведомость

WHERE Факультет = ЭФ”;

Ведомость

Фамилия

Факультет

К выплате

Максимум

ИСАЕВ

MM

6500

14600

ИСАЧКИН

ЭФ

5000

КАМЕНЕВ

ВМК

4800

ИВАННИКОВ

ЭФ

4000

ИВАНОВ

ФФ

5800

КАРТАШЕВ

ЭФ

5600

КАШОЛКИН

ВМК

4500

[Оглавление]

Предложение GROUP BY

Объединяет записи с одинаковыми значениями в указанном списке полей в одну запись. Если инструкция SELECT содержит статистическую функцию SQL, например Sum или Count, то для каждой записи будет вычислено итоговое значение.

Синтаксис

SELECT списокПолей FROM таблица [WHERE] условиеОтбора GROUP BY [группируемыеПоля]

Ниже перечислены аргументы инструкции SELECT, содержащей предложение GROUP BY:

Элемент

Описание

группируемыеПоля

Имена полей (до 10), которые используются для группировки записей. Порядок имен полей в аргументе группируемыеПоля определяет уровень группировки для каждого из этих полей.

Дополнительные сведения

Предложение GROUP BY является необязательным.

Итоговые значения не рассчитываются, если инструкция SELECT не содержит статистической функции SQL.

Значения Null, которые находятся в полях, заданных в предложении GROUP BY, группируются и не опускаются. Однако статистические функции SQL не обрабатывают значения Null.

Используйте предложение WHERE для исключения записей из группировки, а предложение HAVING для применения фильтра к записям после группировки.

При использовании предложения GROUP BY все поля в списке полей инструкции SELECT должны быть либо включены в предложение GROUP BY, либо использоваться в качестве аргументов статистической функции SQL.

[Оглавление]

Следующий запрос анализирует экзаменационную оценочную ведомость и создает итоговую таблицу содержащую номер группы, количество студентов в группе и средний балл по предметам.

SELECT Группа, Count(Группа) as Колич, Avg(Эк) as [Ср б Эк], Avg(Инф) as [Ср б Инф]

INTO [Итоговая ведомость]

FROM Ведомость

GROUP BY Группа;

Ведомость Итоговая ведомость

Фамилия

Группа

Эк

Инф

Группа

Колич

Ср б Эк

Ср б Инф

АНДРЕЕВ

101

4

3

101

15

4,2

4,4

БАРАБАНОВ

104

5

2

102

17

3,9

3,3

БАРАНОВ

102

3

3

103

14

3,8

4,0

БРАГИН

101

2

4

104

16

4,1

3,8

БУБНОВ

104

3

3

105

15

4,5

3,9

ВЕРБИЦКИЙ

105

4

2

ВОДОЛАЗСКИЙ

102

5

3

ГЛОТОВ

102

4

4

ГОЛОВИН

103

3

5

…………………..

……

..

..

ГРИГОРОВИЧ

101

3

3

ДАНЦКЕР

102

2

2

Следующий пример подсчитывает количество студентов в МГУ на обучающимся на каждом факультете по курсам обучения

SELECT Факультет, Курс, Count(Фамилия) as Количество

FROM Ведомость

GROUP BY Факультет, Курс;

Ведомость

Фамилия

Факультет

Курс

Факультет

Курс

Количество

АНДРЕЕВ

ММ

4

MM

1

320

БАРАБАНОВ

ВМК

5

MM

2

290

БАРАНОВ

ММ

3

MM

3

280

БРАГИН

ЭФ

2

MM

4

275

БУБНОВ

ММ

1

MM

5

260

ВЕРБИЦКИЙ

ЭФ

4

BMK

1

340

ВОДОЛАЗСКИЙ

ВМК

5

BMK

2

320

ГЛОТОВ

ЭФ

4

BMK

3

315

ГОЛОВИН

ММ

3

BMK

4

307

…………………..

…..

BMK

5

298

ГРИГОРОВИЧ

ВМК

1

ЭФ

1

420

ДАНЦКЕР

ЭФ

2

ЭФ

2

380

Предложение HAVING

Определяет, какие сгруппированные записи отображаются при использовании инструкции SELECT с предложением GROUP BY. После того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING отберет те из полученных записей, которые удовлетворяют условиям отбора, указанным в предложении HAVING.

Синтаксис

SELECT списокПолей FROM таблица WHERE условиеОтбора GROUP BY группируемыеПоля HAVING условиеГруппировки

Ниже перечислены аргументы инструкции SELECT, содержащей предложение HAVING:

Элемент

Описание

группируемыеПоля

Имена полей (до 10), которые используются для группировки записей. Порядок имен полей в аргументе группируемыеПоля определяет уровень группировки для каждого из этих полей.

условиеГруппировки

Выражение, определяющее, какие сгруппированные записи следует отображать.

Предложение HAVING является необязательным.

Предложение HAVING похоже на предложение WHERE, которое определяет, какие записи должны быть отобраны. После того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING указывает, какие из полученных записей должны быть отобраны:

SELECT КодТипа, Sum(НаСкладе)

FROM Товары

GROUP BY КодТипа

HAVING Sum(НаСкладе) > 100;

Предложение HAVING может содержать до 40 выражений, связанных логическими операторами, такими как And и Or.

[Оглавление]

Инструкция SELECT [предикат]

Предикат позволяют отобрать записи среди выбранных с помощью запроса на языке SQL.

Элемент

Описание

предикат

Один из следующих предикатов отбора:

ALL, DISTINCT, DISTINCTROW TOP. Предикаты используются для ограничения числа возвращаемых записей. Если они отсутствуют, по умолчанию используется предикат ALL.

Синтаксис

SELECT [ALL / DISTINCT / DISTINCTROW / [TOP n [PERCENT]]] имена полей {смотри выше } FROM таблица

Элемент

Описание

ALL

Если инструкция SQL не содержит ни одного предиката, то подразумевается предикат ALL. Отбираются все записи, соответствующие условиям, заданным в инструкции SQL.

DISTINCT

Исключает записи, которые содержат повторяющиеся значения в выбранных полях. Чтобы запись была включена в результат выполнения запроса, значения в каждом поле, включенном в инструкцию SELECT, должны быть уникальными. Например, в таблице «Сотрудники» есть однофамильцы. Если две записи содержат значение «Иванов» в поле «Фамилия», то следующая инструкция SQL возвратит только одну из них:

SELECT DISTINCT Фамилия

FROM Сотрудники;

Если опустить предикат DISTINCT, этот запрос возвратит обе записи для фамилии Иванов. Если предложение SELECT содержит более одного поля, то для включения записи в результат выполнения запроса необходимо, чтобы совокупность значений во всех этих полях была уникальной. Результат выполнения инструкции SQL, содержащей предикат DISTINCT, является необновляемым и не отражает последующие изменения, внесенные другими пользователями.

[Оглавление]

DISTINCTROW

Опускает данные, основанные на целиком повторяющихся записях, а не отдельных повторяющихся полях. Например, создан запрос, объединяющий таблицы «Клиенты» и «Заказы» по полю «КодКлиента». Таблица «Клиенты» не имеет повторяющихся значений в поле «КодКлиента», а таблица «Заказы» содержит, поскольку каждый клиент может сделать несколько заказов. Следующая инструкция SQL показывает, как можно использовать предикат DISTINCTROW для получения списка клиентов, разместивших хотя бы один заказ, без включения сведений о самих заказах:

SELECT DISTINCTROW Название

FROM Клиенты INNER JOIN Заказы

ON Клиенты.КодКлиента = Заказы.КодКлиента

ORDER BY Название;

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

[Оглавление]

TOP n [PERCENT]

Возвращает определенное число записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY. Следующая инструкция SQL позволяет получить список 25 лучших студентов выпуска 1994 года:

SELECT TOP 25 Имя, Фамилия

FROM Студенты

WHERE [Год Выпуска] = 1994

ORDER BY [Средний Балл] DESC;

Если предложение ORDER BY будет опущено, запрос возвратит произвольный набор 25 записей из таблицы «Студенты», удовлетворяющих предложению WHERE. Предикат TOP не осуществляет выбор между равными значениями. Если в предыдущем примере средние баллы двадцать пятого и двадцать шестого студента будут равны, то запрос возвратит 26 записей.

Кроме того, можно использовать зарезервированное слово PERCENT для возврата определенного процента записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY. Предположим, что вместо 25 лучших студентов следует отобрать студентов, попавших в последние 10 процентов:

SELECT TOP 10 PERCENT Имя, Фамилия

FROM Студенты

WHERE [Год Выпуска] = 1994

ORDER BY [Средний Балл] ASC;

Предикат ASC обеспечивает возврат последних значений. Значение, следующее после предиката TOP должно быть числовым значением типа Integer без знака. Предикат TOP не влияет на возможность обновления запроса.

[Оглавление]

Инструкция UPDATE

Создает запрос на обновление, который изменяет значения полей указанной таблицы на основе заданного условия отбора.