Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК Основы информ. технологий. А.А.Стец.-2012.docx
Скачиваний:
290
Добавлен:
15.02.2016
Размер:
3.98 Mб
Скачать

Лабораторная работа №20 «sql-запросы. Запросы с вычислениями.»

Цель работы: получить навыки создания и редактирования запросов по заданным параметрам с вычислениями из таблиц базы данных, используя команды SQL.

Порядок выполнения работы:

Справочная информация

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

Очень часто в таблицах содержатся записи с повторяющимися по какому-то полю значениями. Например, в таблице Выполненные работы могут для одного и того же кода эксперта выполняться различные темы с разным числом часов. Бывает нужным, например, определить для одного кода эксперта суммарные выполненные им число часов. В этом случае используются групповые функции SQL.

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

  • Avg – вычисление среднего арифметического;

  • Sum – вычисление суммы;

  • Min, Max – вычисление минимума или максимума;

  • Count – вычисление количества записей;

  • First – выводит первое встретившееся значение поля

Например, по команде:

SELECT First([фамилия]), Avg([оценка]) FROM Результаты

GROUP BY [№ зачетной книжки]

группировка осуществляется по номеру зачетной книжки; при этом в запрос выводятся фамилии и средний балл для каждой фамилии.

Более правильно для полей, над которыми выполнена групповая функция, указывать еще и новое имя поля, т.к. группировка функции – это арифметическая операция над полем:

SELECT First ([фамилия]) AS фамилия,Avg ([оценка]) AS [средний балл],

FROM Результаты GROUP BY [№ зачетной книжки]

Предварительно перед группировкой можно осуществлять отбор записей по условию WHERE:

SELECT Avg ([оценка]) AS [средний балл], FROM Результаты

WHERE [оценка] >2 GROUP BY [фамилия]

В этом запросе средняя оценка по заданной фамилии будет вычисляться без учета оценки 2.

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

SELECT Avg ([оценка]) AS [средний балл],FROM Результаты

GROUP BY [Код дисциплины] HAVING Avg ([оценка]) < 4

в запросе помещаются только записи со средней оценкой меньше 4.

В условии HAVING можно использовать все операции доступные в условии WHERE.

Выбор из нескольких таблиц

Командой SELECT можно выполнять выборку записей из двух таблиц. Для этого используется ключевое слово INNER JOIN. По этому ключевому слову в запрос помещаются записи, одновременно именующиеся в обеих таблицах. Например, по команде:

SELECT студенты.фамилия, оценки.оценка

FROM студенты INNER JOIN оценки

ON студенты.[код студента]=оценки.[код студента]

Из таблицы Студенты извлекается поле Фамилия, а из таблицы Оценки — поле Оценка. Какую из связанных двух таблиц указывать перед INNER JOIN, а какую – после, в данном случае безразлично. В команде, как видно из примера, необходимо после ключевого слова ON указать поля, по которым таблицы связаны между собой. Заметим, что при выборе записей из двух таблиц извлекаемое поле обязательно необходимо указывать вместе с указанием через точку и самой таблицы.

Вместо ключевого слова INNER JOIN можно использовать LEFT JOIN или RIGHT JOIN. В частности, при использовании LEFT JOIN будут извлекаться все записи таблицы, указанной слева от LEFT JOIN, и соответствующие записи, имеющиеся в правой таблице. Если для записи левой таблицы нет соответствующей записи правой таблицы, то на этом месте выводятся пробелы. Например, по команде:

SELECT студенты.фамилия, оценки.оценка FROM студенты LEFT JOIN оценки

ON студенты.[код студента]=оценки.[код студента]

Запрос будет выглядеть следующим образом:

Фамилия

Оценка

Иванов

Петров

4

Сидоров

5

Коробов

Как видим, в поле Оценка для Иванова и Коробова оценка не проставлена (стоит пробел). Это значит, что в таблице Оценки для этих фамилий не существовало соответствующих записей.

При выборке из трех таблиц также используются ключевые слова INNER JOIN, LEFT JOIN и RIGHT JOIN. Для формирования связи для третьей таблицы необходимо взять в круглые скобки всю инструкцию JOIN для первых двух таблиц. При этом открывающая скобка ставится сразу за ключевым словом FROM, а закрывающая скобка – в конце инструкции:

SELECT студенты.*, оценки.*, организации.* FROM (студенты LEFT JOIN оценки

ON студенты.[код студента]=оценки.[код студента]) INNER JOIN организации

ON студенты.[код организации]=организации.[код организации]

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

SELECT студенты.*, оценки.*

FROM студенты LEFT JOIN оценки

ON студенты.[код студента]=оценки.[код студента]

WHERE студенты.фамилия < ”K”

Удаление записей в таблице выполняется командой DELETE. Например, по команде DELETE * FROM Cтудент удалятся все записи из таблицы студент.

По команде

DELETE * FROM Cтудент

WHERE [дата рождения] > #01/01/81#

удаляются записи с датой рождения > 01.01.81 г.

Отметим, что даты набираются по стандарту США, т.е. месяц/число/год.

По команде

DELETE *FROM Cтудент INNER JOIN [Cтудент-заочник]

ON Cтудент.группа=[Cтудент заочник].группа

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

Удаление поля выполняется командой:

ALTER TABLE Cтудент DROP COLUMN [дата]

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

Добавление в таблицу нового поля выполняется командой:

ALTER TABLE Cтудент ADD COLUMN [группа] TEXT (5)

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

Для указания числового типа можно использовать SINGLE (число одинарной точности) или DOUBLE (число двойной точности).

Формирование новой записи в таблицу выполняется командой INSERT INTO: