Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция № 8 Язык запросов SQL.doc
Скачиваний:
16
Добавлен:
20.09.2019
Размер:
98.82 Кб
Скачать

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).

  1. Оператор удаления таблицы имеет формат вида:

DROP TABLE <имя таблицы>

Оператор позволяет удалить имеющуюся таблицу. Например, для удаления таблицы с именем текущая достаточно записать оператор вида:

DROP TABLE текущая.

  1. Оператор создания индекса имеет формат вида:

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 определяет критерии, используемые, чтобы удалить или выбрать индивидуальные строки из вывода.