2. Оператор изменения структуры таблицы имеет формат вида:
ALTER TABLE <имя таблицы>
({ADD, MODIFY, DROP} <имя столбца> [<тип данных>]
[NOT NULL]
[, {ADD, MODIFY, DROP}<имя столбца> [<тип данных>]
[NOT NULL]]…)
Изменение структуры таблицы может состоять в добавлении (ADD), изменении (MODIFY), или удалении (DROP) одного или нескольких столбцов таблицы. Правила записи оператора ALTER TABLE такие же, как и оператора CREATE TABLE. При удалении столбца указывать <тип данных> не нужно.
Пример 2. Добавления поля таблицы.
Пусть в созданной ранее таблице товары необходимо добавить поле количество, отводимое для хранения величины запаса товара. Для этого следует записать оператор вида:
ALTER TABLE товары (ADD количество SQL_INTEGER).
Оператор удаления таблицы имеет формат вида:
DROP TABLE <имя таблицы>
Оператор позволяет удалить имеющуюся таблицу. Например, для удаления таблицы с именем текущая достаточно записать оператор вида:
DROP TABLE текущая.
Оператор создания индекса имеет формат вида:
CREATE [UNIQUE] INDEX <имя индекса>
ON <имя таблицы>
(<имя столбца> [ASC|DESC]
[, <имя столбца>[ ASC|DESC]…)
Оператор позволяет создать индекс для одного или нескольких столбцов заданной таблицы с целью ускорения выполнения запросных и поисковых операций с таблицей. Для одной таблицы можно создать несколько индексов.
Задав необязательную опцию UNIQUE, можно обеспечить уникальность значений во всех указанных в операторе столбцах. По существу, создание индекса с указанием признака UNIQUE означает определение ключа в созданной ранее таблице.
При создании индекса можно задать порядок автоматической сортировки значений в столбцах – в порядке возрастания ASC (по умолчанию), или в порядке убывания DESC. Для разных столбцов можно задать различный порядок сортировки.
Пример 3. Создание индекса.
Пусть для таблицы служащие, имеющей поля имя, зарплата, руководитель и отдел, требуется создать индекс код_служ для сортировки имен в алфавитном порядке и убыванию размеров зарплаты. Оператор создания индекса может иметь вид:
CREATE INDEX код_служ
ON служащие (имя, зарплата DESC).
5. Оператор удаление индекса имеет формат вида:
DROP INDEX <имя индекса>
Этот оператор позволяет удалить созданный ранее индекс с соответствующим именем. Так, например, для уничтожения индекса код_служ к таблице служащие достаточно записать оператор:
DROP INDEX код_служ.
6. Оператор создания представления имеет формат вида:
CREATE VIEW <имя представления>
[(<имя столбца>[,<имя столбца>]…)]
AS <оператор SELECT >
Данный оператор позволяет создать представление. Если имена столбцов в представлении не указываются, то будут использоваться имена столбцов из запроса, описываемого соответствующим оператором SELEC.
Пример 4. Создание представления.
Пусть имеется таблица компании описания производителей товаров с полями: код_комп – идентификатор компании, имя_комп – название организации, адрес_комп – адрес и телефон – телефон, а также таблица товары производимых товаров с полями: тип – вид товара, код_комп – индекс компании, имя – название товараи цена – цена товара. Таблицы связаны между собой по полю код_комп. Требуется создать представление реклама с краткой информацией о товарах и их производителях: вид товара, название производителя, и цена товара. Оператор определения представления может иметь следующий вид:
CREATE VIEW
реклама
AS
SELECT
товары.тип, компании.имя_комп, товары.цена
FROM
товары, компании
WHERE
товары.код_комп = компании.код_комп
7. Оператор удаления представления имеет формат вида:
DROP VIEW <имя представления>
Оператор позволяет удалить созданное ранее представление. При удалении представления таблицы, участвующие в запросе, удалению не подлежат. Удаление представления реклама производится оператором вида:
DROP VIEW реклама.
8 Оператор выборки записей имеет формат вида:
SELECT [ALL|DISTINCT]
<список данных>
FROM <список таблиц>
[WHERE <условие выборки>]
[GROUP BY <имя столбца> [,<имя столбца>]…]
[HAVING <условие поиска>]
[ORDER BY <спецификация>[,<спецификация>]…]
Это наиболее важный оператор из всех операторов языка SQL. Функциональные возможности его огромны, рассмотрим основные из них.
Оператор SELECT позволяет производить выборку и вычисления над данными из одной или нескольких таблиц. Результатом выполнения оператора является ответная таблица, которая может иметь (ALL), или не иметь (DISTING) повторяющиеся строки. По умолчанию в ответную таблицу включаются все строки, в том числе и повторяющиеся. В отборе данных участвуют записи одной или нескольких таблиц, перечисленных в списке операнда FROM.
Список данных может содержать имена столбцов, участвующих в запросе, а также выражения над столбцами. В простейшем случае в выражениях можно записывать имена столбцов, знаки арифметических операций (+, -, *, /), константы и круглые скобки. Если в списке данных записано выражение, то наряду с выборкой данных выполняются вычисления, результаты которого попадают в новый (создаваемый) столбец ответной таблицы.
При использовании в списках данных имен столбцов нескольких таблиц для указания принадлежности столбца некоторой таблице применяют конструкцию вида: <имя таблицы>.<имя столбца>.
Операнд WHERE задает условия, которым должны удовлетворять записи в результирующей таблице. Выражение <условие выборки> является логическим. Его элементами могут быть имена столбцов, операции сравнения, арифметические операции, логические связки (И, ИЛИ, НЕТ), скобки, специальные функции LIKE, NULL, IN и т.д.
Операнд GROUP BY позволяет выделять группы в результирующем множестве записей. Группой являются записи с совпадающими значениями в столбцах, перечисленных за ключевыми словами GROUP BY. Выделение групп требуется для использования в логических выражениях операндов WHERE и HAVING, а также для выполнения операций (вычислений) над группами.
В логических и арифметических выражениях можно использовать следующие групповые операции (функции): AVG (среднее значение в группе), MAX (максимальное значение в группе), MIN (минимальное значение в группе), SUM (сумма значений в группе), COUNT (число значений в группе).
Операнд HAVING действует совместно с операндом GROUP BY и используется для дополнительной селекции записей во время определения групп. Правила записи <условия поиска> аналогичны правилам формирования <условия выборки> операнда WHERE.
Операнд ORDER BY задает порядок сортировки результирующего множества. Обычно каждая <спецификация> аналогична соответствующей конструкции оператора CREAT INDEX и представляет собой пару вида: <имя столбца> [ASC|DESC].
Оператор SELECT может иметь и другие более сложные синтаксические конструкции.
Одной из таких конструкций, например, являются так называемые подзапросы. Они позволяют формулировать вложенные запросы, когда результаты одного оператора SELECT используются в логическом выражении условия выборки операнда WHERE другого оператора SELECT.
Вторым примером более сложной формы оператора SELECT является оператор, в котором отобранные записи в дальнейшем предполагается модифицировать (конструкция FOR UPDATE OF). СУБД после выполнения такого оператора обычно блокирует (защищает) отобранные записи от модификации их другими пользователями.
Еще один случай специфического использования оператора SELECT - выполнение объединений результирующих таблиц при выполнении нескольких операторов SELECT (операнд UNION).
Пример 5. Выбор записей.
Для таблицы сотрудники, имеющей поля: имя (имя), зарплата (зарплата сотрудника), руководитель (руководитель отдела), отдел (отдел), требуется вывести имена сотрудников и размер их зарплаты, увеличенный на 100 единиц. Оператор выбора можно записать следующим образом:
SELECT имя, зарплата+100
FROM сотрудники.
Пример 6. Выбор с условием.
Вывести названия таких отделов таблицы сотрудники, в которых в данный момент отсутствуют руководители. Оператор SELECT для этого запроса можно записать так:
SELECT отдел
FROM сотрудники
WHERE руководитель is NULL.
Пример 7. Выбор с группированием.
Пусть требуется найти минимальную и максимальную зарплаты для каждого из отделов (по таблице сотрудники). Оператор SELECT для этого запроса имеет вид:
SELECT отдел, MIN(зарплата), MAX(зарплата)
FROM сотрудники
GROUP BY отдел.
Пример 8. Пусть требуется из таблицы СОТРУДНИКИ выделить запись о сотруднике с максимальной зарплатой.
SELECT Имя, Зарплата, Руководитель, Отдел
FROM СОТРУДНИКИ
WHERE Зарплата = (SELECT MAX(Зарплата)
FROM СОТРУДНИКИ);
Пример 9. Пусть требуется из таблицы СОТРУДНИКИ вывести суммарную зарплату по 1, 3 и 7 отделам.
SELECT СОТРУДНИКИ.отдел, Sum(СОТРУДНИКИ.зарплата) AS [Sum-зарплата]
FROM СОТРУДНИКИ
GROUP BY СОТРУДНИКИ.отдел
HAVING (((СОТРУДНИКИ.отдел) In (1,3,7)));
Предложение HAVING определяет критерии, используемые, чтобы удалить или выбрать определенные группы из вывода. Предложение HAVING должно ссылаться на агрегаты и поля, выбранные GROUP BY.
Предложение WHERE определяет критерии, используемые, чтобы удалить или выбрать индивидуальные строки из вывода.