Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_БД_ВМЕСТЕ С ГЛОССАРИЕМ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.59 Mб
Скачать

Использование псевдонимов (alias).

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

Псевдонимы (алиасы или имя корреляции) вводится в разделе FROM и пишутся через пробел после имени таблицы.

Имена корреляции должны использоваться в качестве префиксов перед именем столбца и отделяться от него точкой:

Пример:

SELECT S.Фамилия, O.НомОтд

FROM Сотрудники S, Отдел O

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

Пример:

SELECT S1.Фамилия AS Фамилия1, S2.Оклад AS ОкладМаленький

FROM Сотрудники S1, Сотрудники S2

WHERE S1.Оклад < S2.Оклад

11.4.Арифметические выражения.

Арифметические выражения в WHERE.

В WHERE формируется условие соединения таблиц, либо условие выбора строк.

Пример:

SELECT Фамилия, Оклад, Премия

FROM Сотрудники

WHERE Премия > 0,25*Оклад

Пример. Получить список инженеров в убывающем порядке отношения Премия/Оклад:

SELECT Фамилия, Оклад, Премия, Премия/Оклад

FROM Сотрудники

ORDER BY Премия/Оклад,DESC

11.5.Групповые функции.

К группам строк , извлеченным в результате запроса можно применить групповые функции:

AVG, COUNT, MAX, MIN, SUM

Пример. Определить средний оклад экономистов:

SELECT AVG(Оклад)

FROM Сотрудники

WHERE Должность = ‘Экономист’

Пример. Определить общий оклад и общую премию у всех инженеров:

SELECT SUM(Вклад), SUM(Премия)

FROM Сотрудники

WHERE Должность = ‘Инженер’

Групповые функции могут быть использованы в аналитических выражениях.

Пример:

SELECT AVG(Оклад+Премия)*12

FROM Сотрудники

WHERE Должность = ‘Инженер’

Пример. Определить в организации минимальные и максимальные оклады, и их разницу:

SELECT MAX(Оклад), MIN(Оклад), MAX(Оклад) - MIN(Оклад) AS Результат

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

Пример. Получить фамилию и оклад сотрудника с максимальным окладом, используя подзапрос:

SELECT Фамилия, Оклад

FROM Сотрудники

WHERE Оклад = ( SELECT МАХ(Оклад) FROM Сотрудники)

Тот же результат выдаст и следующий запрос:

SELECT Фамилия, MAX(Оклад).

Пример. Подсчитать количество сотрудников 30-го отдела, получающих премию:

SELECT COUNT(Премия)

FROM Сотрудники

WHERE Отдел = 30 AND (Премия >0 OR Премия NOT NULL)

COUNT можно использовать со словом DISTINCT

Пример. Подсчитать количество должностей сотрудников 30-го отдела:

SELECT COUNT (DISTINCT Должность)

FROM Сотрудники

WHERE Отдел = 30

COUNT(*) подсчитывает количество строк, удовлетворяющих условиям поиска выбора.

Пример:

SELECT COUNT(*)

FROM Сотрудники

WHERE Отдел = 30

Использование агрегативных функций в запросе вместе с операндом GROUP BY.

GROUP BY служит для выборки итоговых данных по группам:

Пример. Определить средний оклад сотрудников отделов № 10, №20, №30:

SELECT AVG(Оклад)

FROM Сотрудники

GROUP BY Отдел = 10 (20,30)

GROUP BY делит таблицу на группу строк с совпадающими значениями в одном и том же столбце или столбцах.

Пример. Выбрать номера отделов и средний оклад по отделу:

SELECT Отдел AVG(Оклад)

FROM Сотрудники

GROUP BY Отдел

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

Предложение GROUP BY всегда должно следовать за WHERE, если оно есть, а если WHERE нет – то за FROM

Для распределения строк по группам можно использовать значения столбцов.

Пример:

SELECT Отдел, Должность, COUNT(*), AVG(Оклад)

FROM Сотрудники

GROUP BY Отдел, Должность

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

SELECT НазвОтд, Должность, COUNT(*), AVG(Оклад)

FROM Сотрудники, Отделы

WHERE Сотрудники.Отдел = Отделы.Отдел

GROUP BY НазвОтд, Должность