Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РЭУБД лекции.doc
Скачиваний:
25
Добавлен:
27.08.2019
Размер:
399.36 Кб
Скачать

Создание и использование доменов

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

CREATE DOMAIN <имя домена>[AS]<описание домена>

Пример:

CREATE DOMAIN D_Position AS varchar (20) not null;

CREATE TABLE Position (code integer not null primary key,

Position D_Position note varchar(50));

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

Пример:

CREATE DOMAIN D_PRICE AS FLOAT CHECK(VALUE>0)

Компоненты доступа к данным. Запросы на выборку данных

Структурная схема терминов

Компоненты для доступа к данным и их отображения

Состав клиентского приложения одинаков при работе с локальными и удаленными БД. Используются одни и те же визуальные компоненты, компоненты TDataSource для связи визуальных и не визуальных компонентов, однако при работе с невизуальными компонентами есть ряд отличий.

  1. Компонент TTable не желательно использовать, т.к. этот компонент требует передачи всех данных результата выполнения запроса к серверу всех данных, а не только визуализуемых.

  2. Изменение записей БД следует производить не методами insert, delete, edit, cancel и т.д., а при помощи SQL-операторов INSERT, UPDATE, DELETE.

  3. Нужно отрабатывать транзакции и выбирать соответствующий потребностям приложения уровень изоляции транзакции TIBTransaction.

  4. Желательно использовать не более одного компонента TIBDatabase, TDatabase, и явно определить его в приложении для управления параметрами соединения (имя пользователя, пароль, и т.д.).

  5. Бизнес-правила следует переносить на сервер, разгружая клиентское приложение.

  6. Для обращения к хранимым процедурам на сервере следует использовать компонент TStoredProc.

  7. Следует минимально загружать сетевой трафик путем явного старта и подтверждения транзакции. В компоненте TDatabase есть запуск транзакции Start From Transaction и завершение Commit.

  8. Следует оптимизировать запросы к БД (операторы Select).

  9. Компонент TIBEvent применяется для доступа к удаленным данным, чтобы получить от сервера уведомление о событии.

Формирование запросов на выборку данных

SELECT – оператор для выборки данных.

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

[WHERE<условие отбора> ORDER BY<список полей> [GROUP BY <список полей для группировки>]

[HAVING <Условия группирования>];]

Пример 1

SELECT Fam, Name, Year_b FROM Pers;

Пример 2

SELECT * FROM Pers;

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

В выражении для полей могут использоваться строковые константы и операция "конкатенация".

Пример

SELECT "Отдел:" ||DEP, "ФИО:" ||FAM, "год рождения:" ||CAST (Year_b as char (4)) FROM Pers

Функция CAST преобразует число в строку.

Условие отбора WHERE может включать логические операции отношения (AND, OR, NOT, =, <, > и т.д.). Кроме того, в условия отбора может входить операция LIKE, которая проверяет наличие заданной последовательности символов строке.

Пример

SELECT Fam FROM Pers WHERE Fam LIKE 'Иванов%'

SELECT Fam FROM Pers WHERE Fam LIKE '%ван%'

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

BETWEEN значение1 and значение2

Пример

SELECT Fam, Year_b FROM Pers

WHERE Year_b BETWEEN 1950 and 1980

Операция IN определяет соответствие поля одному из элементов заданного множества.

Пример

SELECT Fam, Year_b FROM Pers

WHERE Fam IN ('Иванов',' Петров')

Служебные слова ORDER BY в операторе SELECT используется для задания порядком сортировки записи в выборке. По умолчанию порядок сортировки прямой и ORDER BY можно не писать. Если нужен обратный порядок сортировки, то пишут: ORDER BY <поле> DESC.

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

  • DISTINCT – означает, что в выборку не включаются повторяющиеся записи;

  • ALL – включаются все записи.

По умолчанию используется именно ALL и его можно не писать.

Совокупные характеристики

Для вычисления совокупных характеристик выборки используют специальные функции:

COUNT (<Условие>)

Пример

SELECT COUNT (*) FROM Pers;

Кроме того, есть функции, вычисляющие минимум, максимум и сумму.

Min (<поле>), Max (<поле>), Sum(<поле>);

Пример

SELECT min (Year_b), max (Year_b) FROM Pers;

Смешивание характеристик в одном операторе возможно при использовании GROUP BY;

Пример

SELECT Dep, COUNT (*) FROM Pers GROUP BY Dep

Вложенные запросы

SELECT может включать в себя другой SELECT

Пример 1

SELECT Fam, Year_b FROM Pers

WHERE Year_b>= ALL (SELECT Year_b from Pers1)

Поиск сотрудников в таблице Pers не старше любого из Pers1.

Пример 2

SELECT Fam, Year_b FROM Pers

WHERE Year_b >= ANY (SELECT Year_b from Pers1)

Поиск сотрудников в таблице Pers моложе хотя бы одного из Pers1.

В предложении where перед вложенным запросом могут использоваться ключевые слова:

  • EXISTS (SELECT …) – вложенный запрос возвращает True, если возвращено непустое множество значений;

  • SINGULAR (SELECT …) – вложенный запрос возвращает True, если при отборе возвращено только одно значение.

Объединения таблиц основаны на взаимно однозначном соответствии записей в этих таблицах. Можно строить запрос сразу по нескольким таблицам.

Пример 1

SELECT p1.Fam, p2.Fam, p1.Year_b FROM Pers p1, Pers p2

WHERE(p1.Year_b= p2.Year_b) and (p1.Fam: = p2.Fam)

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

Пример 2

SELECT * FROM Pers, Dep

WHERE (Pers.Dep = Dep.Dep) AND (Dep.Proizv <> 'п');

Внешние объединения

  1. Левое объединение LEFT OUTER join … on включает все записи первой таблицы.

Пример

SELECT * FROM Pers LEFT OUTER join

Chef on Pers.Fam=Chef.Fam;

  1. Правое объединение RIGHT OUTER join … on включает все записи второй таблицы, если даже в первой их нет.

Пример

SELECT * FROM Pers RIGHT OUTER join

Chef on Pers.Fam = Chef.Fam;

  1. Полное объединение FULL OUTER join … on включает объединение записи обеих таблиц, независимо от их соответствия.

Пример

SELECT * FROM Pers FULL OUTER join

Chef on Pers.Fam=Chef. Fam;

Выполнение SCRIPT-файлов (файлы сценария)

Операторы создания БД, таблиц, процедур, триггеров можно хранить и выполнять из файла. Файл создается в текстовом редакторе, по мере необходимости редактируется, а запускается из утилиты WISQL через основное меню File/Run SQL Script.

Тогда в начале файла необходимо использовать оператор SET TERM. Этот оператор используется для назначения нового разделителя вместо ";".

Пример

SET TERM ###;

CREATE PROCEDURE FIND_MAX_KOL(IN_TOVAR VARCHAR(20))

BEGIN

SELECT MAX (KOL) FROM RASHOD

WHERE TOVAR = :IN_TOVAR

INTO: MAX_KOL;

SUSPEND;

END###

SET TERM ; ## #