- •О. Б. Малков работа с базами данных в среде delphi Учебное пособие для студентов заочной формы обучения
- •Содержание
- •1. Реализация работы с базами данных в среде delphi
- •1.1. Базы данных и системы управления базами данных
- •1.2. Технология доступа к данным bde
- •1.3. Компоненты приложений, работающих с базами данных
- •2. Демонстрационная база данных
- •2.1. Логическая модель данных предметной области
- •2.2. Физическая модель данных предметной области
- •3. Создание базы данных
- •3.1. Создание псевдонима
- •3.2. Создание структуры таблиц базы данных
- •3.3. Свойства таблиц Paradox
- •3.4. Заполнение таблиц базы данных
- •4. МодулЬ данных
- •4.1. Создание модуля данных
- •4.2. Связывание наборов данных
- •4.3. Создание объектов-полей
- •4.4. Проектирование и анализ структуры базы данных
- •4.5. Создание объектов-столбцов
- •4.6. Реализация бизнес-правил
- •5. Создание приложения, работающего с базой данных
- •5.1. Выбор типа пользовательского интерфейса
- •5.2. Создание главной формы
- •5.3. Создание рабочих форм
- •5.4. Создание форм ввода новых данных
- •6. Создание запросов
- •6.1. Компонент Query
- •6.2. Создание sql-запросов
- •6.2.1. Простая выборка данных
- •6.2.2. Выборка из связанных таблиц
- •6.2.3. Сортировка записей
- •6.2.4. Сложные критерии отбора
- •6.2.5. Псевдонимы таблиц и комментарии
- •6.2.6. Агрегатные функции и группировка записей
- •6.2.7. Создание и удаление таблиц и индексов
- •6.2.8. Вставка, удаление и редактирование записей
- •Insert into Имя_таблицы (Список_полей
- •Values (Список_значений)
- •6.3. Построение запроса в демонстрационной базе данных
- •7. Создание отчетов
- •7.1. Основы технологии Rave Reports
- •7.2. Визуальная среда Rave Designer
- •7.3. Составляющие проекта отчета
- •7.3.1. Библиотека отчетов
- •7.3.2. Каталог глобальных страниц
- •7.3.3. Каталог объектов данных
- •7.4. Типы отчетов
- •7.4.1. Отчет с единственной таблицей или запросом
- •7.4.2. Отчет главный-детальный
- •7.4.3. Группирующий отчет
- •7.5. Пример создания отчетов в приложении Sale
- •7.6. Экспорт отчета в файл
- •8. Создание СправочнОй системЫ
- •8.1. Создание файла документа справочной информации
- •8.2. Создание проекта справочной системы
- •8.3. Доступ к справочной информации
- •9. Создание установочного диска
- •9.1. Программа InstallShield Express
- •9.2. Создание проекта инсталляционной программы
- •Библиографический список
6.2.4. Сложные критерии отбора
В секции WHERE можно указывать условное выражение. В нем используются операции сравнения <, >, =, < >, >=, <=, логические операции OR, AND, NOT и круглые скобки. Эти операции SQL совпадают с операциями Object Pascal. В результирующий НД попадают только те записи, значения полей которых удовлетворяют указанному условию. Например:
SELECT NNom, NData, ZNaim, NSumma
FROM Naklad, Zakazcik
WHERE ZKod = NZKod
AND (NSumma>10000 OR NData > = ’22.09.03’)
ORDER BY NNom
В этом примере отбираются только те накладные, для которых сумма отгрузки превышает 10 000 рублей или которые выписаны не ранее 22 сентября 2003 г. Текстовые значения и значения типа «дата-время» в операциях отношения заключаются в апострофы или двойные кавычки.
С помощью зарезервированного слова IN (в [диапазоне]) можно перечислить несколько допустимых значений поля. Следующий запрос отбирает названия 1, 3 и 4-го изделий из таблицы Izdelie:
SELECT INaim FROM Izdelie
WHERE IKod IN (‘001’, ‘003’, ‘004’)
Вместо перечня допустимых значений в круглых скобках после операции IN можно разместить вложенный оператор SELECT. Если требуется просмотреть список всех заказчиков, приславших платежные требования суммой более 10 000 рублей, можно сформировать такой запрос:
SELECT ZNaim FROM Zakazcik
WHERE ZKod IN
(SELECT PZKod FROM Plateg
WHERE PSumma > 10000)
ORDER BY ZNaim
6.2.5. Псевдонимы таблиц и комментарии
В таблицах нашей демонстрационной БД нет совпадающих имен полей за счет того, что каждое поле в любой таблице начинается с буквы, соответствующей начальной букве имени таблицы.
Если бы, например, таблицы Izdelie и Zakazcik содержали одноименные поля Naim, то для исключения неоднозначности имена полей пришлось бы дополнить именами их таблиц:
SELECT NNom, Izdelie.Naim, Zakazcik.Naim
FROM Naklad, Izdelie, Zakazcik
Поскольку совпадающие имена таблиц могут встречаться и в других секциях запроса, для сокращения в SQL разрешено вместо имени таблицы использовать ее псевдоним. Псевдоним указывается за именем таблицы в секции FROM:
SELECT
/* Совпадающие имена полей дополняются псевдонимами таблиц */
NNom, I.Naim, Z.Naim
/* Псевдонимы задаются символами сразу за именем таблицы */
FROM Naklad, Izdelie I, Zakazcik Z
В любом месте запроса может стоять комментарий, который выделяется парой символов «/*».
6.2.6. Агрегатные функции и группировка записей
В секции SELECT можно также использовать одну из агрегатных функций:
AVG – возвращает среднее значение аргумента;
COUNT – подсчитывает количество вхождений аргумента во все записи НД;
MAX – возвращает максимальное значение аргумента;
MIN – возвращает минимальное значение аргумента;
SUM – суммирует значения аргумента.
В качестве аргумента агрегатной функции может использоваться произвольное выражение, составленное из полей НД. Например, следующий запрос возвращает среднее значение долга заказчиков:
SELECT AVG (NSumma – PSumma)
FROM Naklad, Plateg
Список всех заказчиков с указанием суммы стоимости всех поставленных им изделий дает такой запрос:
SELECT SUM (NSumma), ZNaim
FROM Naklad, Zakazcik
WHERE ZKod = NZKod
GROUP BY ZNaim
Разумеется, интересно получить не только суммы поставок, но и имена партнеров, поэтому в приведенном выше запросе в секции SELECT указана агрегатная функция и поле таблицы Zakazcik.
Для подобного рода запросов, в которых вместе с агрегатными функциями фигурируют и поля таблиц, SQL требует секции группировки GROUP BY, в которой в обязательном порядке перечисляются все поля, указанные в секции SELECT.
Количество всех накладных, связанных с поставкой изделий, вернет запрос:
SELECT COUNT (NZKod) FROM Naklad
В то же время следующий запрос вернет количество заказчиков:
SELECT COUNT (DISTINCT NZKod) FROM Naklad