Операторы манипулирования данными
Оператор выборки записей SELECT является наиболее важным и имеет большие функциональные возможности. Его полный формат имеет вид:
SELECT [ALL|DISTINCT]
список_полей
FROM список_таблиц
[WHERE условие_выборки]
[GROUP BY поля_группировки]
[ORDER BY поля_сортировки]
Конструкции, приведенные в квадратных скобках, не являются обязательными.
При указании ключевого слова ALL результирующая таблица может иметь повторяющиеся строки. Этот параметр применяется по умолчанию. Использование ключевого слова DISTINCT позволяет включать только неповторяющиеся строки. Рассмотрим пример выборки заказанных книг по разделу «Маркетинг»:
SELECT DISTINCT basket.isbn, book.name, book.authors
FROM basket, book
WHERE book.section = “Маркетинг”
В этом операторе для каждой книги для всех записей таблицы Корзина заказов происходит проверка связанной по ключевому полю isbn записи таблицы book на предмет равенства значения поля section строке “Маркетинг”, и, если это так, то ISBN-код, наименование и авторы книги попадают в результирующую таблицу запроса. Так как одна и та же книга может входить во многие заказы, то во избежание повторов в операторе SELECT указано ключевое слово DISTINCT.
В списке полей выборки могут быть выражения, позволяющие проводить вычисления с данными таблиц. Следующий оператор дает стоимость каждого пункта для заказа с номером 1623:
SELECT DISTINCT basket.isbn, book.name, basket.quantity*book.price
FROM basket, book
WHERE basket.order_numb = 1623
Если же нужно вычислить полную стоимость каждого заказа, то применяется операнд GROUP BY, позволяющий сгруппировать записи по определенным полям. Для получения стоимостей каждого заказа можно применить оператор:
SELECT basket.order_numb, SUM(basket.quantity*book.price)
FROM basket, book
GROUP BY basket.order_numb
ORDER BY basket.order_numb ASC
Результатом выполнения этого оператора будет таблица, в которой строки таблицы корзины заказов сгруппированы по номеру заказа и рассчитана стоимость всех книг заказа. Оператор ORDER BY указывает, что строки таблицы должны быть упорядочены по возрастанию (ASC) номеров заказов.
Для изменения значений полей записей используется оператор UPDATE:
UPDATE имя_таблицы
SET имя_поля = выражение
[, SET имя_поля = выражение , …]
[WHERE условие]
С помощью оператора UPDATE можно изменить значения в целом ряде записей, например, оператор:
UPDATE book
SET price = price*0.9
WHERE year < 2001
уменьшает на 10% цены всех книг, выпущенных до 2001 года.
Можно изменить и значение одной записи, например, оператор:
UPDATE book
SET price = 65.80
WHERE isbn = “5-7936-0122-5”
присваивает значение новой цены одной книге.
Для ввода новых записей в таблицу используется оператор INSERT:
INSERT INTO имя_таблицы
список_имен_полей
VALUES (список_значений_полей)
Для вставки записио новой книге нужно использовать следующий оператор INSERT:
INSERT INTO book
isbn, section, name, authors, publisher, year, price
VALUES (“5-7936-0122-5”, “Базы данных”,
“Кузнецов С.Д.”, “КОРОНА принт”, 2001, 56.50)
Список полей может быть опущен, в этом случае список значений должен соответствовать порядку указания полей в операторе создания таблицы.
Удаление записей производится оператором DELETE:
DELETE FROM имя_таблицы
[WHERE условие]
Например, при отмене заказа удаляется запись о нем в таблице order:
DELETE FROM order
WHERE order_numb = 1009
Если условие не указано, удаляются все записи таблицы.
Предоставление полномочий
Пользователь, создающий объекты базы данных обладает всеми полномочиями на эти объекты, то есть может считывать данные, удалять, модифицировать и добавлять строки в таблицы, изменять структуру таблиц.
Он может передать полные или частичные полномочия на вышеперечисленные действия другим пользователям.
Создатель схемы базы данных может передать свои полномочия другому пользователю с помощью конструкции AUTHORIZATION:
CREATE SCHEMA internet_shop AUTHORIZATION admin
Здесь передаются все права на схему пользователю с идентификатором admin.
Существует шесть типов полномочий на работу с таблицами, который создатель таблиц может предоставить другим пользователям (табл. 2.7).
Таблица 7.7.
Типы полномочий доступа
Тип полномочия | Описание |
SELECT | Разрешается читать записи из таблицы или представления |
INSERT | Разрешается вводить новые строки |
UPDATE | Разрешается изменять строки, может быть предоставлено только для указанных полей |
DELETE | Разрешается удалять строки |
REFERENCES | При создании пользователем таблицы разрешается вводить внешний ключ, связанный с полем данной таблицы |
ALL PRIVILEGES | Предоставляются все полномочия из списка |
Информация о полномочиях доступа хранится в словаре данных. При попытке пользователя произвести манипулирование данными СУБД просматривает словарь данных, определяет полномочия пользователя на указанное действие с конкретной таблицей или представлением, и, только если эти полномочия предоставлены, выполняет обращение к базе данных.
Для предоставления полномочий используется оператор GRANT. Чтобы, например, предоставить полномочия по выборке, добавлению и изменению информации о курьерах менеджеру по кадрам, нужно применить оператор:
GRANT SELECT, UPDATE
ON messenger TO personnel_manager
Здесь пользователю с идентификатором personnel_manager предоставляются указанные права на работу с таблицей курьеров messenger.
Если нужно предоставить какие-то права всем пользователям базы данных, то используется операнд PUBLIC:
GRANT SELECT
ON book TO PUBLIC
В данном примере разрешается предоставлять возможность выборки информации по книгам всем пользователям базы данных.
В заключение отметим, что язык SQL является основой многих СУБД, так как он не зависит от специфики компьютерных технологий. Он позволяет принимать запросы от других компонентов СУБД и пользовательских приложений. Язык SQL является мощным инструментом, который обеспечивает пользователям, программам и вычислительным системам доступ к информации, содержащейся в реляционных базах данных. Поддержка SQL лидерами промышленности в области технологии реляционных баз данных сделали его основным стандартным языком баз данных.