- •Управление распределёнными данными: технологии управления, блокировка ресурсов, сериализуемые транзакции.
- •Привилегии на доступ к таблице, полю таблицы, к хранимой процедуре. Отмена привилегий.
- •Модели бд. Понятие локальной сети, сервера, рабочей станции. Отличия и преимущества удалённых баз данных от локальных.
- •Назначение и виды отчётов. Мастер отчётов и Конструктор отчётов. Настройка печати и печать отчётов. Компоненты формирования отчётов.
- •Создайте запрос, позволяющий получить список служебных телефонов всех работников предприятия со всей необходимой информацией. Билет №8
- •Архитектура приложений баз данных.
- •Понятие и назначение транзакции. Старт, фиксация, откат и отмена транзакции. Компоненты для работы с транзакциями.
- •Создайте хранимую процедуру, определяющую список заказчиков из города, название которого задаётся параметром, из тестовой таблицы Customers. Билет №10
- •Создание запросов с использованием агрегатных функций. Группировка.
- •Соединение с сервером и базой данных в InterBase.
- •Напишите триггер, который при удалении названия фирмы в родительской таблице «Фирмы», удаляет подчинённые записи в дочерней таблице «Заказы». Билет №11
- •Основные функции процессора баз данных bde, стандарт odbc.
- •Понятие и назначение хранимой процедуры, триггера и генератора. Команды по созданию, редактированию и удалению хранимой процедуры, триггера
- •Создайте хранимую процедуру, определяющую страну с самым большим населением по тестовой таблице Country. Билет №12
- •Концепция баз данных. Понятия баз данных, субд. Архитектура субд.
- •Полный и сокращённый форматы оператора добавления, редактирования и удаления данных. Методы выполнения операторов управления данных.
- •Создайте хранимую процедуру, позволяющую вводить новую запись в таблицу. Билет №13
- •Утилиты для работы с удаленными бд в Delphi. Программа Server Manager Windows isql, sql Explorer. Просмотры — Views.
- •Проектирование серверной части приложения баз данных.
- •Показать работу с параметризированным запросом в ibQuery на примере таблиц из тестовой бд employee.Gdb. Билет №14
- •Назначение и структура файлов базы данных. Команды по созданию и перемещению файла базы данных, по определению структуры и администрированию базы данных.
- •Показать работу с основными компонентами InterBase: ibDataBase, ibDataSet, ibTransaction, ibQuery на примере тестовой базы данных. Билет №15
- •Назначение и структура файлов базы данных. Команды по созданию и перемещению файла базы данных, по определению структуры и администрированию базы данных.
- •Параметризированные запросы.
- •Создайте автоинкрементные поля для таблиц «Товары», «Поставщики», используя генераторы и триггеры.
- •Запросы на создание, изменение, удаление таблиц, индексов.
- •2.1.3. Ручная настройка Query
- •1. Создание запросов на изменение данных
- •10.2 Создание баз данных с помощью Database Desktop
- •10.2.1 Создание новой таблицы
- •10.2.2 Задание полей
- •10.3.2 Создание и просмотр псевдонимов баз данных в Database Desktop
- •10.10 Приложения с несколькими связанными таблицами
- •10.10.1 Связь головной и вспомогательной таблиц
- •10.10.2 Поля просмотра (lookup fields)
-
Показать работу с основными компонентами InterBase: ibDataBase, ibDataSet, ibTransaction, ibQuery на примере тестовой базы данных. Билет №15
-
Назначение и структура файлов базы данных. Команды по созданию и перемещению файла базы данных, по определению структуры и администрированию базы данных.
-
Параметризированные запросы.
При программировании очень часто возникает необходимость в передаче каких либо параметров в SQL запрос. В большинстве случаев это делают при помощи обычных текстовых операций, но в таком подходе иногда возникают подводные камни. Например при передаче текстового параметра необходимо позаботиться о спец символах (например апострофы). Так же не стоит забывать, что при передаче таким образом даты - может возникнуть серьезная проблема из-за различий в формате даты.
Самым правильным с точки зрения надежности является передача параметров при помощи параметризированных запросов. Параметризированный запрос выглядит следующим образом:
SELECT * FROM Table1 WHERE Field1=:Param1
-
Создайте автоинкрементные поля для таблиц «Товары», «Поставщики», используя генераторы и триггеры.
Билет 18
Билет 19
2. Объединение таблиц: виды(внутреннее, внешнее, левое, правое). Использование псевдонимов таблиц.
Ответ:
В запросе можно объединить данные двух или более таблиц. Пусть, например, вы хотите получить список сотрудников всех производственных подразделений. В таблице Pers мы имеем список сотрудников с указанием в поле Dep подразделений, в которых они работают. А в таблице Dep мы имеем список всех подразделений в поле Dep и характеристику каждого подразделения в поле Proisv (true, если подразделение производственное). Тогда получить список сотрудников всех производственных подразделений можно оператором:
SELECT Pers* FROM Pers, Dep
WHERE (Pers.Dep=Dep.Dep)AND(Dep.Proisv=true)
В нем мы обращаемся сразу к двум таблицам Pers и Dep, которые перечислены после ключевого слова FROM. Поэтому каждое имя поля предваряется ссылкой на таблицу, к которой оно относится. Впрочем, это надо делать только для полей, имя которых повторяется в разных таблицах (поле Dep). Перед полем Proisv ссылку на таблицу можно опустить. В конструкции WHERE условие Pers.Dep=Dep.Dep ищет запись в таблице Dep, в которой поле Dep совпадает с полем Dep текущей записи таблицы Pers. А условие Dep.Proisv=true отбирает те записи, в которых в таблице Dep найденному подразделению соответствует поле Proisv = true.
В операторах, работающих с несколькими таблицами, обычно каждой таблице дается псевдоним, сокращающий ссылки на таблицы, а иногда придающий им некоторый смысл, вытекающий из данного применения. Псевдоним таблицы может записываться в списке таблиц после слова FROM, отделяясь от имени таблицы пробелом. Например, приведенный выше оператор может быть переписан следующим образом:
SELECT P.* FROM Pers Р, Dep D
WHERE (P.Dep=D.Dep)AND(D.Proisv=true)
В этом примере таблице Pers дан псевдоним Р, а таблице Dep — D. Конечно, эти псевдонимы действуют только в данном операторе и не имеют никакого отношения к псевдонимам баз данных, которые мы постоянно используем.
Возможно самообъединение таблицы. В этом случае одной таблице даются два псевдонима. Пусть, например, мы хотим найти всех ровесников в организации. Это можно сделать оператором
SELECT pl.fam, р2.fam, pl.year_b FROM Pers p1, Pers p2
WHERE (pl.year_b = p2.year_b) AND (pl.fam <> p2.fam)
В этом примере для таблицы Pers мы ввели два псевдонима: p1 и р2. В конструкции WHERE мы ищем в этих якобы разных таблицах записи с одинаковым годом рождения. Второе условие pl.fam <> p2.fam нужно, чтобы сотрудник не отображался в результатах как ровесник сам себя. Правда, приведенный оператор выдает в результате по две записи на каждую пару ровесников, сначала, например, «Николаев — Андреев», а потом «Андреев — Николаев». Чтобы исключить такое дублирование можно добавить еще одно условие — pl.Fam < p2.Fam:
SELECT pl.fam, p2.fam, pl.year_b FROM Pers pi, Pers p2
WHERE (pl.year_b = p2.year_b) AND (pl.fam <> p2.fam) and(p1.Fam < p2.Fam)
Дополнительное условие упорядочивает появление фамилий в p1 и р2 и исключает дублирование результатов.
До сих пор мы рассматривали объединения, основанные на однозначном соответствии записей двух таблиц, когда каждой записи в первой таблице находилась соответствующая ей запись во второй таблице. Возможны и другие виды объединений, которые выдают записи независимо от того, есть ли соответствующее поле во второй таблице. Это внешние объединения (outer join). Их три типа: левое, правое и полное.
Левое объединение (обозначается ключевыми словами LEFT OUTER JOIN ... ON) включает в результат все записи первой таблицы, даже те, для которых не имеется соответствия во второй.
Правое объединение (обозначается ключевыми словами RIGHT OUTER JOIN ... ON) включает в результат все записи второй таблицы, даже если им нет соответствия в записях первой.
Полное объединение (обозначается ключевыми словами FULL OUTER JOIN ... ON) включает в результат объединение записей обеих таблиц, независимо от их соответствия.
Пусть, например, у вас есть таблица сотрудников некоей компании Pers и есть таблица Chef, в которой занесены данные на членов совета директоров этой компании. В число членов совета входят и сотрудники компании, и посторонние лица. Для определенности положим, что в таблице Pers имеются записи на сотрудников «Иванов» и «Петров», причем Петров является членом совета, а Иванов — нет. В таблице Chef имеются записи на членов совета «Петров» и «Сидоров», причем Сидоров — не сотрудник компании. Тогда оператор выдаст результат вида
SELECT * FROM Pers LEFT OUTER JOIN Chef ON Pers.Fam = Chef.Fam
Оператор задал левое объединение таблицы Pers (она указана после ключевого слова FROM) с таблицей Chef (она указана после ключевых слов LEFT OUTER JOIN). Условие объединения указано после ключевого слова ON и заключается в совпадении фамилий.
Как показано, результат включает все поля и таблицы Pers, и таблицы Chef. Число строк соответствует числу записей таблицы Pers. В строках, относящихся к записям, для которых в Chef не нашлось соответствие, поля таблицы Chef остаются пустые.
Оператор правого объединения
SELECT * FROM Pers RIGHT OUTER JOIN Chef ON Pers.Fam = Chef.Fam
Число строк соответствует числу записей таблицы Chef. В строках, относящихся к записям, для которых в Pers не нашлось соответствие, поля таблицы Pers остаются пустые.
Оператор полного объединения
SELECT * FROM Pers FULL OUTER JOIN Chef ON Pers.Fam = Chef.Fam
В результирующей таблице к строкам, относящимся к таблице Pers, добавлены строки, относящиеся к таблице Chef, для которых не нашлось соответствия в таблице Pers.
Билет 20