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

Операторы сравнения. Таблица 5.

Оператор

Описание

>,<,=, <=,>=,<>

Больше, меньше, меньше или равно, больше или равно, не равно

ALL

Применяется совместно с операторами сравнения при сравнении со списком значений

BETWEEN

Применяется при поверке нахождения значения внутри заданного интервала (включая границы)

IN

Применяется для проверки значения в списке

LIKE

Применяется при проверке соответствия значений заданной маске

Приведем примеры применения вышеуказанных операторов:

SELECT наименование, цена

FROM Товар

WHERE наименование BETWEEN ‘К ‘AND ‘Н’

Выбирает наименование товара, начинающегося с букв от К до Н.

SELECT наименование, цена

FROM Товар

WHERE наименование_производителя LIKE «*гидро*»

Выбирает наименование товара, в названии производителя которого содержится подстрока «гидро».

Предложение ORDER BY

Это предложение является необязательным и применяется для сортировки результирующего набора данных по одной ил нескольким колонкам. Для определения направления сортировки используются ключевые слова ASC (по возрастанию) или DESC (по убыванию). По умолчанию сортировки производится по возрастанию. Синтаксис предложения имеет вид:

ORDER BY столбец 1 [{ASC DESC}] [,столбец2 [{ASC DESC}] [,..]

Напимер:

SELECT наименование, цена

FROM Товар

WHERE наименование BETWEEN ‘К ‘AND ‘Н’

ORDER BY цена

Связывание таблиц

При помощи операторов языка SQL можно извлекать данные более чем из одной таблицы. Одна из возможностей сделать это заключается в связывании таблиц по одному общему полю. Однако даже без связывания таблиц в результате оператора получится набор данных, содержащий все возможные комбинации строк каждой из исходных таблиц (декартово произведение):

SELECT наименование_продукта, категория_продукта

FROM Продукт, Категория

Запрос, показанный ниже, указывает, какой категории принадлежит данный продукт:

SELECT наименование_продукта, категория_продукта

FROM Продукт, Категория

WHERE Продукт.категория_номер=Категория.категория_номер

Присутствующее в операторе ограничение указывает, что из связываемых таблиц извлекаются только те строки, в которых атрибуты «номер» имеют одинаковое значение Название столбца указывается только вместе с названием таблицы; в противном случае оператор будет неоднозначным.

Можно использовать другие типы связывания таблиц: оператор INNER JOIN (внутреннее соединение) обеспечивает присутствие в результирующем наборе записей, значения в связанных полях которых совпадают. Внешние соединения (OUTER JOIN) позволяют включить в результат запроса все строки из одной таблицы и соответствующие им строки из другой, например:

SELECT наименование_продукта, категория_продукта

FROM Продукт LEFT OUTER JOIN Категория

WHERE Продукт.категория_номер=Категория.категория_номер

Предложения GROUP BY

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

GROUP BY {столбец1} [,..]

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

SELECT DISTINCTROW Оценки. номер абитуриента, Sum(Оценки. полученный балл) AS Sum_Полученный балл

FROM Оценки

GROUP BY Оценки. номер абитуриента;

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

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

SELECT DISTINCTROW Оценки. номер абитуриента, Sum(Оценки. полученный балл) AS Sum_Полученный балл

FROM Оценки

GROUP BY Оценки.номер абитуриента;

HAVING Sum(Оценки.полученный балл)>12

Ключевые слова ALL и DISTINCT

Эти ключевые слова управляют выводом дублирующих строк результирующего набора записей. Ключевое слово DISTINCT указывает, что строки результирующего набора должы быть уникальны, в то время как ключевое слово ALL указывает, что возвращать необходимо все строки.

Вложенные последовательности запросов.

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

SELECT номер_клиента

FROM Счета_клиентов

WHERE номер_счета IN

(SELECT номер_счета

FROM Счета

WHERE филиал= «Бауманский»)

В данном случае подзапрос возвращает множество кортежей, состоящих из номеров_счетов отношения Счета, которые обрабатывает филиал «Бауманский». Он вложен во внешний запрос, который сравнивает номера-счетов каждого кортежа отношения Счета_клиентов с возвращенным внутренним запросом множеством номеров счетов. Если рассматриваемый номер счета есть в указанном множестве, будет возвращен номер_клиента этого кортежа. Для проверки принадлежности к множеству используется оператор IN.

Существуют определенные типы запросов, которые лучше реализовывать с помощью подзапросов; преимущественно это так называемые проверки существования. Предположим, что требуется получить данные о клиентах, которые не имеют счетов. Можно создать следующий запрос с вложенным подзапросом:

SELECT *

FROM Клиенты

WHERE номер_клиента NOT IN

(SELECT номер_клиента

FROM Клиенты_счета)

Если будет возвращено пустое множество, то это означает лишь одно – у каждого клиента есть, по крайней мере, один счет.

Модификация данных.

Оператор UPDATE

Для изменения значений в одном или нескольких столбцах таблицы испльзуется оператор UPDATE. Синтаксис этого оператора имеет вид:

UPDATE таблица

SET столбец1= выражение1 [, столцец2= выражение2] […]

[WHERE условие]

Выражение в предложении SET может быть константой или результатом вычислений.

UPDATE Счет

SET баланс=баланс+1000.00

WHERE баланс>0

Оператор DELETE

Оператор используется для удаления строк из таблиц, синтаксис оператора имеет вид:

DELETE

FROM таблица

[WHERE условие]

Предложение WHERE не является обязательным, однако, если его не включить, то будут удалены все записи таблицы. Полезно использовать оператор SELECT c тем же синтаксисом, что и оператор DELETE, чтобы предварительно проверить, какие записи будут удалены.

Оператор INSERT

Оператор выполняет функцию добавления записей в таблицу и имеет следующий синтаксис:

INSERT INTO

([список столбцов]

{VALUES ({DEFAULT|NULL|выражение}

} [,..]

)

Определение данных в SQL.

Создание таблиц –CREATE TABLE

Чтобы из таблицы извлекать данные, необходимо ее существование в базе данных; базовое отношение создается с помощью оператора CREATE TABLE. Синтаксис этого оператора имеет вид:

CREATE TABLE таблица

(столбец1 тип1 [(размер1)]

[,...]

)

В этом операторе следует указать имя поля, тип данных для него, длину (для некоторых типов данных). Например, создадим таблицу Заказ с полями: номер_заказа, ФИО_исполнителя, сумма_заказа, где номер_заказа – первичный ключ:

CREATE TABLE Заказ

(номер_заказа Integer(6) NOT NULL PRYMARY KEY,

ФИО_исполнителя CHAR (20),

Сумма_заказа Integer(4)

)

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

Оператор ALTER TABLE

Этот оператор предназначен для изменения структуры существующей таблицы; применяя его можно удалить или добавит поле к существующей таблице:

1.добавление поля

ALTER TABLE таблица ADD [COLUMN] столбец тип столбца

[(размер)]

2.удаление поля

ALTER TABLE таблица DROP [COLUMN] столбец

[(размер)]

Дополнительные ограничения

Для того чтобы указать, что данное поле должно иметь определенное значение в каждой строке таблицы, необходимо указывать ограничение NOT NULL. Это ограничение можно накладывать на любой столбец таблицы, если необходимо запретить задание неопределенных значений.

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

CREATE TABLE Заказ

(номер_товара NOT NULL ,

цена NOT NULL,

PRYMARY KEY (номер_товара, цена)

Существует ограничение на уникальность атрибутов, не являющихся первичным ключом отношения – UNIQUE. Это ограничение можно использовать, если есть необходимость определить потенциальные ключи отношения.

Для реляционной модели данных существенным является указания внешнего ключа. При объявлении внешних ключей необходимо наложить соответствующие ограничения на столбец. Например, в таблице Счета клиентов существует два внешних ключа «номер_счета» и «номер_клиента». Они задаются следующим образом:

CREATE TABLE Счета_клиентов

(номер_счета NOT NULL REFERENCES Счет,

номер_клиента NOT NULL RЕFERENCES Клиент,

PRYMARY KEY (номер_счета, номер_клиента)

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

CREATE TABLE Товар

(номер_товара INTEGER (5) NOT NULL PRIMARY KEY,

категория_товара CHAR (1)

CHECK (категория_товара = ‘A’ OR категория_товара=’D’

);

При таком задании ограничения атрибута «категория_товара» любая попытка ввести значения, отличные от ‘А’ и ‘D’ будет отклонена.

Создание представлений

Представление – логическое отношение, содержимое которого является производным уже существующим отношениям. В языке SQL представление создается при помощи оператора SELECT, который позволяет задать содержимое представления:

CREATE VIEW Счет1

AS

SELECT *

FROM Cчет

WHERE тип_счета = ‘депозитный’

Удаление объектов базы данных

Таблицы, представления удаляются из базы данных при помощи оператора DROP.

DROP TABLE Клиент;

DROP VIEW Счета_клиентов.

При удалении таблицы удаляются все представления, которые ссылаются на нее.

Управление доступом к данным в SQL.

Доступ к данным в многопользовательской среде регулируется с помощью операторов GRANT и REVOKE. В каждом операторе необходимо уазать пользователя, объект (таблицу, представление), по отношению к которому задаются полномочия, и сами полномочия. Следующий оператор GRANT задает пользователю Х возможность производить выборку данных из таблицы Клиент:

GRANT SELECT ON Клиент TO X

Оператор REVOKE аннулирует все предоставленные ранее полномочия.