|
Программирование >> Построение запросов sql
Рис. 3.111. Результат использования одной и той же таблицы при объединении запросов Следует отметить, что объединения результатов нескольких запросов в один результирующий набор разрешены и внутри подзапросов. Например, требуется вывести все данные об оплаченных суммах за услугу газоснабжения с кодом, равным 1, по абонентам, фамилия которых начинается с буквы М, и по абонентам, которые подавали заявки с неисправностью газового оборудования с кодом, равным 1. Запрос будет выглядеть следующим образом: SELECT * FROM PaySumma WHERE AccountCD IN (SELECT AccountCD FROM Abonent WHERE Fio Like М% UNION SELECT R.AccountCD FROM Request R WHERE FailureCD=1) AND GazServiceCD=1 ORDER BY AccountCD;. Результат объединения представлен на рис. 3.112.
Рис. 3.112. Результат объединения запросов внутри подзапроса Из результата следует, что информация об оплатах выведена по абонентам, которые подавали заявки по неисправности с кодом, равным 1 (лицевые счета 005488, 080270, 115705, 136169), и по абонентам, фамилия которых начинается с буквы М (лицевые счета 115705, 126112). Так как для объединения использовали предложение UNION, то исключены повторяющиеся строки по абоненту с номером лицевого счета, равным 115705, информация о котором возвращается в каждом из объединяемых с помощью UNION запросов. Контрольные вопросы 1. Какие предложения включает в себя запрос SELECT? В какой последовательности выполняется обработка элементов запроса SELECT? 2. Что может представлять собой возвращаемый элемент в запросе SELECT? 3. Какие функции выполняют конструкции FIRST SKIP и ROWS? 4. Каким образом может быть задано условие поиска применительно к однотабличным запросам? 5. Какие виды функций используются в СУБД Firebird? Опишите особенности синтаксиса и работы нескольких функций каждого вида. 6. Как отсортировать результаты запроса на выборку данных? 7. Как сформировать запрос с группировкой? Какие ограничения накладываются на такие запросы? 8. Каким образом используется предложение HAVING в запросе SELECT? В чем состоит отличие в работе предложений HAVING и WHERE? 9. Какие существуют варианты запросов на выборку к множеству таблиц? 10. Что такое неявное и явное соединение? Какие виды явного соединения существуют? В каком случае неявное и явное соединения взаимозаменяемы? 11. Что такое вложенный запрос? В каких предложениях запроса SELECT могут использоваться вложенные запросы? 12. Как создать рекурсивный запрос на языке SQL? 13. Что такое соотнесенный вложенный запрос? Чем отличается работа соотнесенного вложенного запроса от работы простого подзапроса? 14. Каким образом используются предикаты ANY и ALL с подзапросами? Как с помощью агрегатных функций можно заменить выражения с предикатами ANY и ALL? 15. Каким образом используются предикаты SINGULAR и EXISTS с подзапросами? 16. Как выполняется объединение результатов нескольких запросов? 4. Язык определения данных Для создания и изменения структуры БД предназначены SQL-запросы, называемые языком определения данных, или DDL (Data Definition Language). С помощью DDL-запросов можно выполнить следующее: - определить структуру нового домена и создать его; - определить структуру новой таблицы и создать ее; - изменить определение существующей таблицы; - определить виртуальную таблицу (представление, курсор); - создать индексы для ускорения доступа к таблицам. Ядро языка определения данных в Firebird образуют следующие четыре SQL-запроса: - CREATE (создать), позволяющий определить и создать объект БД; - DROP (удалить), служащий для удаления существующего объекта БД; - ALTER (изменить), с помощью которого можно изменить определение объекта БД; - RECREATE (заново создать), с помощью которого можно заново создать объект со старым именем. Пустая БД в Firebird представляет собой файл, который не содержит таблиц пользователя, но содержит пустые системные таблицы. Физическая структура пустой БД (файл) создается сервером Firebird при выполнении скрипта, содержащего команду CREATE DATABASE, или в интерактивном режиме утилиты IBExpert. Для подключения к существующей БД можно воспользоваться соответствующим пунктом меню утилиты IBExpert или использовать скрипт, содержащий команду CONNECT. Таким образом, чтобы создать БД в Firebird необходимо: 1. Создать пустой файл БД и выполнить команду соединения с базой. 2. Создать необходимые домены. 3. Создать пользовательские таблицы. 4. Заполнить данными созданные таблицы пользователя. Команды CREATE DATABASE и CONNECT будут рассмотрены позднее при изучении SQL-скриптов. В настоящей главе рассматриваются задачи определения доменов, создания, изменения и удаления постоянных и временных пользовательских таблиц. Дается понятие индексов и описывается их роль в повышении эффективности выполнения операторов SQL. Здесь же рассмотрены запросы создания и изменения индексов. Все это относится к самим таблицам, а не к данным, которые в них содержатся. Также в данной главе приводится описание правил создания представлений различных видов, используемых для ограничения доступа отдельных пользователей к различным данным. 4.1. Домены Если в таблицах БД имеются столбцы, обладающие одними и теми же характеристиками, то можно предварительно определить с помощью домена тип данных и поведение таких столбцов, а затем поставить в соответствие каждому из однотипных столбцов имя соответствующего домена. Доменом называется именованное множество скалярных значений одного типа. Например, домен TMonth (месяц) в учебной базе данных - это множество всех возможных номеров месяцев (от 1 до 12). Цель доменов в SQL -обеспечить возможность один раз определить элементарную спецификацию типа данных, а затем использовать ее одновременно для нескольких столбцов в нескольких базовых таблицах.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |