Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
db / Лекции / 6 семестр / Языки запросов.docx
Скачиваний:
134
Добавлен:
23.03.2015
Размер:
280.32 Кб
Скачать
        1. Функции преобразования

Стандарт SQL предлагает единственную функцию преобразования данных из одного типа в другой – это функция CAST.

Функция CAST производит преобразование выражения, заданного первым аргументом, в тип, заданный вторым аргументом. Преобразование допускается только для определенных пар типов данных.

CAST(выражение AS тип)

в некоторых СУБД вместо функции используется соответствующее выражение:

CAST выражение AS тип

Запрос.Вывести имя, зарплату как число и зарплату как строку

SELECT Name AS "Фамилия",

Salary AS "Зарплата как число",

CAS(Salary AS varchar(1O)) AS "Зарплата как строка"

FROM TEACHER;

      1. Итогилекции(урока)

Усвоив материал этого урока, студенты научились:

  • использовать агрегатные функции;

  • строить выражения с использованием агрегатных функций;

  • использовать строковые функции;

  • использовать числовые функции;

  • использовать временные функции;

  • использовать функции преобразования.

    1. Группировка и сортировка (0)

      1. Аннотация к лекции

В этом уроке мы рассмотрим еще три фразы предложения SELECT, а именно: HAVING, GROUPBYиORDERBY. Первая из них позволяет группировать строки таблицы и применять к созданным группам агрегатные функции. В нашем курсе мы рассмотрим простейшие варианты группировки,дополнительные возможности фразы GROUP BY предлагается вынести на самостоятельное изучение.

Фраза HAVING используется вместе с фразой GROUP BY и позволяет формулировать условия на группах строк для дополнительного отбора.

Фраза ORDER BY позволяет сортировать строки результирующей таблицы.

      1. Запросы с группировкой строк

        1. Понятие группировки строк

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

Именно для этого предназначена фраза GROUPBY. Она позволяет все множество строк таблицы разделить на группы по признаку равенства значений одного или нескольких столбцов (и выражений над ними). ФразаGROUPBYдолжна располагаться вслед за фразойWHERE(если она отсутствует, то за фразойFROM). Общий синтаксис фразыGROUPBYследующий:

GROUPBYвыражение[, выражение] ...

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

Рассмотрим возможности фразы GROUP BY, переходя от простых вариантов ее использования к более сложным.

        1. Группировка по одному столбцу

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

Запрос.Для каждого корпуса подсчитать количество находящихся в нем кафедр.

SELECT Building AS "Корпус",

COUNT(*)AS"К-во кафедр"

FROM DEPARTMENT

GROUP BY Building;

Если в запросе используются фразы и WHERE, и GROUP BY, строки, не удовлетворяющие условию фразы WHERE, исключаются до выполнения группировки. Вследствие этого группировка производится только по тем строкам, которые удовлетворяют условию.

Запрос.Для каждого корпуса подсчитать количество аудиторий с количеством мест больше 30.

SELECT Building AS "Корпус",

COUNT(*) AS "K-во аудиторий"

FROM ROOM

WHERE Seats > 30

GROUP BY Building;

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

Запрос.Вывести названия факультетов и суммарный фонд финансирования их кафедр.

SELECT f.Name AS "Факультет",

SUM(d.Fund) AS "Фонд кафедр"

FROM FACULTY f, DEPARTMENT d

WHERE f.FacPK = d.FacFK

GROUP BY f.Name;

Запрос. Для каждого факультета, расположенного в корпусе 6, вывести количество групп и студентов пятого курса.

SELECT f.Name, Count(*), SUM(Quantity)

FROM FACULTY f, DEPARTMENT d, SGROUP g

WHERE f.FacPK = d.FacFK AND

d.DepPK = g.DepFK AND

f.Building = '6' AND Year = 5

GROUP BY f.Name;