Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Answers v.0.2.docx
Скачиваний:
5
Добавлен:
25.09.2019
Размер:
192.86 Кб
Скачать

6. Язык sql, его структура, стандарты, история развития. Подмножество языка dml: операторы select, insert, update, delete.

История развития языка SQL

Рассматриваемый же ниже непроцедурный язык SQL (Structured Query Language – структурированный язык запросов) ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц. Особенность предложений этого языка состоит в том, что они ориентированы в большей степени на конечный результат обработки данных, чем на процедуру этой обработки. SQL сам определяет, где находятся данные, какие индексы и даже наиболее эффективные последовательности операций следует использовать для их получения: не надо указывать эти детали в запросе к базе данных.

Сегодня для большинства СУБД языком манипулирования данными является язык SQL. Появление и развитие этого языка как средства описания доступа к базе данных связано с созданием теории реляционных баз данных. Прообраз языка SQL возник в 1970 году в рамках научно-исследовательского проекта System/R (IBM). Ныне SQL — это стандарт интерфейса с реляционными СУБД.

Первый международный стандарт языка SQL был принят в 1989 г. (SQL/89 или SQL1), в 1992 г. был принят стандарт языка SQL (SQL/92 или SQL2). В 1999 г. появился стандарт SQL3. В SQL3 введены новые типы данных, при этом предоставляется возможность задания сложных структурированных типов данных, которые в большей степени соответствуют объектной ориентации. Появились стандарты на события и триггеры, которые раньше не затрагивались в стандартах.

Запрос на языке SQL состоит из одного или нескольких операторов, следующих один за другим и разделенных точкой с запятой.

Каждый столбец в любой таблице хранит данные определенных типов. Различают базовые типы данных:

        строки символов фиксированной длины;

        целые и вещественные числа;

        дополнительные типы данных: строки символов переменной длины, денежные единицы, дату и время, логические данные.

   Типы данных в СУБД ORACLE 9.2i

В СУБД ORACLE 9.2i используются следующие основные встроенные типы данных:

        NUMBER(N) – целые числа, где N – максимальное количество цифр в числе (например, тип данных NUMBER(3) позволит использовать числа из диапазона от –999 до 999).

        NUMBER(N, M) – вещественные числа, где N – максимальное количество цифр в числе, M – максимальное количество цифр в дробной части (например, тип данных NUMBER(4,2) позволит использовать числа из диапазона от –99.99 до 99.99).

        CHAR(N) – строки символов фиксированной длины, где N – максимальное число символов в строке (например, тип данных CHAR(5) позволит хранить строки максимум из пяти символов, причем под хранение каждой строки будет отведено 5 ячеек памяти, даже если строка будет состоять из меньшего числа символов).

        VARCHAR2(N) – строки символов переменной длины, где N – максимально допустимое количество символов в строке (например, тип данных VARCHAR2(10) позволит хранить строки длинной не более 10 символов, причем память будет отведена именно под то количество символов, которое хранится в строке).

        LONG – строки символов неограниченной длины (в одной ячейке такого типа можно хранить текст, длина которого ограничена только размером табличного пространства, выделенного на сервере баз данных).

        DATE – дата и время.

Структура языка SQL

Язык SQL делится на подмножества.

1) Язык определения данных (DDL – Data Definition Language) предоставляет пользователям средства указания типа данных и их структуры, а также средства задания ограничений для информации, хранимой в базе данных.

Операторы: CREATE, ALTER, DROP.

2) Язык манипулирования данными (DML – Data Manipulation Language) позволяет вставлять, обновлять и извлекать информацию из базы данных.

Операторы: SELECT, INSERT, DELETE, UPDATE.

3) Язык управления данными (DCL – Data Control Language) состоит из управляющих операторов.

Операторы – GRANT, REVOKE.

4) Язык управления транзакциями (TCL – Transaction Control Language) состоит из операторов, предназначенных для управления ходом выполнения транзакций.

Операторы: COMMIT, ROLLBACK, SAVEPOINT.

Оператор выбора SELECT

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

 

SELECT [ALL | DISTINCT] <список полей> | *

FROM <список таблиц>

[WHERE <условие фильтрации строк>]

[GROUP BY <условия группировки строк>]

[HAVING <условие фильтрации групп>]

[ORDER BY <условие сортировки результата запроса>]

 

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

Выборка всей информации из таблицы

SELECT список_всех_полей_таблицы | * FROM имя_таблицы 

Символ «*» заменяет необходимость указания всех полей таблицы.

Вертикальная фильтрация с указанием порядка вывода атрибутов

SELECT поле1[, поле2, …] FROM имя_таблицы; 

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

Исключение дубликатов

Для исключения дубликатов из результирующего набора записей используют параметр DISTINCT, который указывают сразу после ключевого слова SELECT. Например:

-- вывод номеров хотя бы раз проданных товаров

SELECT DISTINCT Prod_id FROM Outgoing;

 Для сортировки результирующего набора данных используется параметр ORDER BY оператора SELECT.

SELECT * FROM DEALERS ORDER BY Name, Procent;

Параметр WHERE служит для реализации реляционной операции горизонтальной фильтрации, то есть отбора кортежей, или строк, удовлетворяющих определенному условию. Условие может быть составлено с использованием следующих конструкций:

        операторы сравнения: =, < , > , <= , >= , <>;

        булевы операторы: AND, OR, NOT;

        оператор проверки на вхождение в множество: IN;

        оператор проверки на вхождение в диапазон: BETWEEN;

        оператор проверки на существование: EXISTS;

        оператор проверки удовлетворению шаблону (только для символьных полей): LIKE;

        операторы сравнения с NULL: IS NULL, IS NOT NULL;

        агрегатные функции: COUNT, SUM, AVG, MAX, MIN;

        константы и выражения;

        подзапросы. 

Использование IN

Оператор IN используется для проверки вхождения значения какого-либо столбца в множество.

SELECT Name FROM Managers

WHERE Procent IN (5, 10, 15);

В большинстве современных СУБД есть возможность использовать так называемые групповые функции. Если параметр GROUP BY в запросе не указан, то группой записей считается все строки интересующей таблицы.

Функция возвращает количество записей в группе. Возможно три варианта использования функции COUNT:

COUNT(*) – подсчет количества записей в группе;

COUNT(поле) – подсчет количества отличных от NULL значений в указанном поле записей группы;

COUNT(DISTINCT поле) – подсчет количества уникальных отличных от NULL значений в указанном поле записей группы.

Оператор ввода новых строк INSERT

Любая новая информация попадает в базу данных посредством использования оператора INSERT. Для добавления информации о каждом новом объекте используется один оператор INSERT, имеющий следующий синтаксис:

INSERT INTO имя_таблицы[(список_атрибутов)]

VALUES (список_значений);

Указание списка атрибутов является необязательным, но только в том случае, если список значений будет содержать значения для абсолютно всех атрибутов таблицы, и если указаны эти значения будут в порядке, соответствующему порядку указания атрибутов при создании таблицы. В общем случае допускается неполное указание атрибутов в произвольном порядке, но среди этих атрибутов обязательно должны указываться те, которые имеют опцию NOT NULL и не имеют значения по умолчанию. Если при добавлении строки какой-то атрибут не был указан в списке атрибутов, то для СУБД сначала попытается присвоить ему значение по умолчанию, если оно было указано для данного столбца при создании таблицы. Если значения по умолчанию нет, то СУБД попытается указать для данного атрибута значение NULL, если это не противоречит созданным ограничениям целостности. В противном случае оператор INSERT будет завершен с ошибкой. Ниже представлены примеры выполнения оператора INSERT:

-- вставка строки в таблицу DEALERS с указанием всех атрибутов:

INSERT INTO Dealers VALUES(1, ‘Иванов А.И.’, 3, null);

Вставка множества записей осуществляется посредством использования подзапроса внутри оператора INSERT:

INSERT INTO имя_таблицы оператор_SELECT;

Оператор изменения значений полей UPDATE

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

UPDATE имя_таблицы SET поле1=значение1, [поле2=значение2, …]

[WHERE условие_фильтрации_строк];

Параметр WHERE используется для отбора тех строк, в которых необходимо произвести изменения, описанные в параметре SET. Если параметр WHERE не будет указан, то изменению подвергнутся все строки указанной таблицы. 

-- изменение значения Procent в одной строке таблицы MANAGERS

UPDATE Managers SET Procent = 5 WHERE Man_id = 1;

Поскольку синтаксис оператора UPDATE не допускает одновременное указание нескольких таблиц после ключевого слова UPDATE, подзапросы в параметре WHERE также используются в тех случаях, когда необходимо составить условие фильтрации на основе данных другой таблицы или таблиц. Например:

-- понижение на 10% размер комиссионных у тех менеджеров,

-- которые не продали ни одного товара за последнюю неделю

UPDATE Managers SET Procent = Procent * 0.9

WHERE Man_id NOT IN

(SELECT DISTINCT Man_id FROM Outgoing

WHERE Out_date >= sysdate - 7);

Оператор удаления строк DELETE

DELETE FROM имя_таблицы

[WHERE условие_фильтрации_строк]; 

Параметр WHERE используется для отбора тех строк, которые необходимо удалить. Если параметр WHERE не будет указан, то будут удалены все строки указанной таблицы.

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

-- удаление из таблицы MANAGERS информации о менеджере с номером 1

DELETE FROM Managers WHERE Man_id = 1;

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

-- удаление информации о тех менеджерах,которые не продали ни одного товара за последнюю неделю

DELETE FROM Managers

WHERE Man_id NOT IN

(SELECT DISTINCT Man_id FROM Outgoing

WHERE Out_date >= sysdate - 7);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]