Лабораторная работа № 4
Язык SQL. Простые запросы
Цель работы: освоить среду SQL Novigator и SQL Editor для создания SQL-запросов.
Теоретические сведения
Любой язык работы с базами данных должен предоставлять пользователю следующие возможности:
-
создавать базы данных и таблицы с полным описанием их структуры;
-
выполнять основные операции манипулирования данными, такие как вставка, модификация и удаление данных из таблиц;
-
выполнять простые и сложные запросы, осуществляющие преобразование необработанных данных в необходимую информацию.
Он должен быть универсальным, т.е. отвечать некоторому признанному стандарту, что позволит использовать один и тот же синтаксис и структуру команд при переходе от одной СУБД к другой. Язык SQL(Structured Query Language-язык структурированных запросов) удовлетворяет всем этим требованиям. В 1992 году создан международный стандарт (ISO)SQL, превративший его в стандартный язык определения и манипулирования реляционными базами данных, в том числе и Oracle8i..
Структура языка SQL
Язык SQL имеет два основных компонента:
-
язык DDL(Data Definition Language), предназначенный для определения структур базы данных;
-
язык DML(Data Manipulation Language), предназначенный для выборки и обновления данных.
Манипулирование данными
К операторам языка SQL DML относятся:
-
SELECT – выборка данных из базы;
-
INSERT – вставка данных в таблицу;
-
UPDATE – обновление (изменение) данных в таблице;
-
DELETE – удаление данных из таблицы.
Рассмотрим оператор SELECT и его возможности.
Назначение оператора SELECT состоит в выборке и отображении данных одной или более таблиц базы данных. Это исключительно мощный оператор, способный выполнять действия, эквивалентные операторам реляционной алгебры selection, projection и join, причем в пределах единственной выполняемой команды.
Общий формат оператора SELECT имеет вид:
SELECT [DISTINCT | ALL] {* | [column_expression [AS new_name]] [, . . . ]}
FROM table_name [alias] [, . . . ]
[WHERE condition]
[GROUP BY column_list] [HAVING condition]
[ORDER BY column_list]
Здесь параметр column_expression представляет собой имя столбца или выражение из нескольких имен. Параметр table_name является именем существующих в базе данных таблицы или представления, к которым необходимо получить доступ. Необязательный параметр alias – это сокращение, устанавливаемое для имени таблицы table_name. Обработка элементов оператора SELECT выполняется в следующей последовательности.
FROM Определяются имена используемой таблицы или нескольких таблиц
WHERE Выполняется фильтрация строк объекта в соответствии с заданными условиями
GROUP BY Образуются группы строк, имеющих одно и то же значение в указанном столбце
HAVING Фильтруются группы строк объекта в соответствии с указанным условием
SELECT Устанавливается, какие столбцы должны присутствовать в выходных данных
ORDER BY Определяется упорядоченность результатов выполнения оператора
Порядок предложений и фраз в операторе SELECT не может быть изменен. Операция SELECT является закрытой: результат запроса к таблице представляет собой другую таблицу. Существует множество вариантов записи данного оператора, например.
Пример 4.1. Выборка всех столбцов и всех строк из таблицы tabl_name
Упрощенный вариант записи значения «все столбцы» - вместо имен столбцов указывается символ (*).Т.е.
SELECT *
FROM tabl_name;
Пример 4.2. Использование ключевого слова DISTINCT
Иногда результат выполнения запроса содержит дублирующиеся значения, поскольку, в отличие от операции реляционной алгебры projection, оператор SELECT не исключает дублирующихся значений при выполнении проекции одного или нескольких столбцов. Для удаления из результирующей таблицы дублирующихся строк используется ключевое слово DISTINCT.
SELECT DISTINCT column_expression
FROM tabl_name;
Пример 4.3.Вычисляемые поля
Для создания вычисляемого поля в списке SELECT следует указать некоторое выражение языка SQL. В этих выражениях могут применяться операции сложения, вычитания, умножения и деления. При необходимости могут использоваться скобки. Для получения значения вычисляемого поля могут использоваться значения из нескольких столбцов таблицы, однако тип данных столбцов-участников должен быть цифровым. Имя расчетному столбцу можно присвоить фразой AS.
SELECT column_expression1, column_expression2 / 12 AS column_expression3
FROM tabl_name;
Пример 4.4.Выбор строк (секция WHERE)
В приведенных выше примерах в результате выполнения оператора SELECT выбирались все строки указанной таблицы. Иногда требуется поместить в результирующую таблицу только строки, удовлетворяющие определенному условию. Это условие формулируется в секции WHERE. Существует пять основных типов условий поиска (предикатов - по терминологии ISO).
-
Сравнение. Сравниваются результаты вычисления одного выражения с результатами вычисления другого выражения. При этом используются операции отношения и логические операции, аналогичные языку Паскаль.
-
Диапазон. Проверяется, попадает ли результат вычисления выражения в заданный диапазон значений. Границы диапазона задаются после ключевого слова BETWEEN / NOT BETWEEN.
-
Принадлежность к множеству. Проверяется, принадлежит ли результат вычисления выражения к заданному множеству значений, которое задается с помощью ключевого слова IN / NOT IN( список значений)
-
Соответствие шаблону. Проверяется, отвечает ли некоторое строковое значение заданному шаблону (LIKE / NOT LIKE). Существует два специальных символа шаблона, используемых при проверке символьных значений. Символ %(процент) заменяет любое количество любых символов. Символ _ (подчеркивание) заменяет один любой символ.
-
Значение NULL. Проверяется, содержит ли данный столбец определитель NULL(неизвестное значение). Ключевое слово IS NULL / IS NOT NULL используется при проверке отсутствия или наличия значения в столбце.
Пример 4.5. Сортировка результатов.
Секция ORDER BY включает список разделенных запятыми идентификаторов столбцов, по которым требуется упорядочить результирующую таблицу запроса. Идентификатор столбца может представлять собой либо его имя, либо номер, который идентифицирует элемент списка SELECT его позицией в этом списке. Номера столбцов используются в тех случаях, когда столбцы, по которым следует упорядочить результат , являются вычисляемыми, а фраза AS отсутствует. Признак упорядочения по возрастанию – ASC, по убыванию – DESC. Если в секции ORDER BY используется больше одного элемента, то самый левый элемент в списке называется главным ключом, все последующие – младшими ключами сортировки.
Пример 4.6. Использование обобщающих функций.
Стандарт ISO содержит определение пяти обобщающих функций:
-
COUNT возвращает количество значений в указанном столбце;
-
SUM возвращает сумму значений в указанном столбце;
-
AVG возвращает усредненное значение в указанном столбце;
-
MIN возвращает минимальное значение в указанном столбце;
-
MAX возвращает максимальное значение в указанном столбце;
Все эти функции оперируют со значениями в единственном столбце таблицы и возвращают единственное значение. Функции COUNT, MIN, MAX применимы как к числовым, так и к нечисловым полям, тогда как функции SUM и AVG могут использоваться только в случае числовых полей. За исключением COUNT (*), при вычислении результатов любых функций сначала исключаются все пустые значения, после чего требуемая операция применяется только к оставшимся конкретным значениям столбца. Вариант COUNT (*) является особым случаем использования функции COUNT – его назначение состоит в подсчете всех строк в результирующей таблице, независимо от того, содержатся там пустые, дублирующиеся или любые другие значения.
Обобщающие функции могут использоваться только в списке секции SELECT и в составе предложения HAVING. Во всех других случаях использование этих функций недопустимо.
Пример 4.7. Группирование результатов.
Запрос, в котором присутствует секция GROUP BY, называется группирующим запросом, поскольку в нем группируются данные, полученные в результате выполнения операция SELECT, после чего для каждой отдельной группы создается единственная суммарная строка. Каждый элемент списка должен иметь единственное значение для всей группы. Более того, предложение SELECT может включать только следующие типы элементов:
-
Имена столбцов;
-
Обобщающие функции;
-
Константы;
-
Выражения, включающие комбинации перечисленных выше элементов.
Пример 4.8. Ограничения на выполнение группирования (секция HAVING).
Секция HAVING требует всегда присутствия секции GROUP BY и используется для фильтрации групп, помещаемых в результирующую таблицу запроса. Секция HAVING имеет синтаксис схожий с синтаксисом секции WHERE, но назначение их различно.
Для работы с командами SQL используется стандартный интерфейс Oracle8i – SQL*Plus.
Задания
Для собственной БД написать запросы на языке SQL в соответствии со списком:
-
Вывести список работников данного предприятия по алфавиту.
-
Вывести всех менеджеров данного предприятия, имя, номер отдела, зарплату.
-
Вывести всех сотрудников, которые поступили на работу в феврале.
-
Вывести номер отдела и количество сотрудников, которые в нем работают.
-
Вывести фамилию сотрудника, его должность и фамилию менеджера, за которым он закреплен.
-
Вывести те отделы, в которых зарплата сотрудников превышает 1000 у.е.
-
Посчитать зарплату сотрудников по отделам с учетом их комиссионных.
-
Посчитать количество денег, которое тратится на выплату всем сотрудникам.
-
Вывести одним запросом сотрудника, получающего минимальное и максимальное количество денег и их возраст.
-
Вывести имена сотрудников в порядке убывания стажа.
11. Придумать три запроса на естественном языке и написать для них запросы.
Результат работы сохранить в файле.