Диго С.М. Базы данных проектирование и использование (1084447), страница 44
Текст из файла (страница 44)
Рассматриваемый запрос можно было задать и не пользуясь Мастером. Посмотрим, как выглядит созданный нами запрос в режиме Конструктор (рис. 6.50). Создание подобных запросов и в этом режиме не представляет особых трудностей. Но следует обратить внимание, что при связи основной и зависимой таблиц обязательно должно быть определено так называемое «левое соединение» (т.е. для связи в «параметрах объединения» необходимо выбрать вторую возможность - «объединение всех записей из первой таблицы и только тех записей из второй таблицы, в которых связанные поля совпадают). В противном случае список окажется пустым.
Повторяющиеся записи. Так же как и в случае «поиска записей, не имеющих подчиненных», необходимость в поиске «повторяющихся записей» возникает не только для проверки целостности базы данных, но и для выполнения специфических поисковых запросов.
Название «повторяющиеся записи» не совсем точно отражает суть этого типа запросов. Имеется в виду поиск записей, имеющих одинаковое значение в заданных полях. Например, при составлении расписания требуется проверить, что для преподавателя не назначили несколько занятий в одно и то же время.
Для того чтобы осуществить поиск записей, не имеющих, подчиненных, можно выбрать Мастер «Записи без подчиненных» в окне Новый запрос (см. рис. 6.5).
На первом шаге создания данного запроса надо выбрать таблицу или запрос, в которых нужно найти записи с повторяющимися значениями (рис. 6.51). Для нашего примера это таблица «Расписание».
На следующем шаге необходимо определить поля, дублирование
значений которых будет выявляться. Для этого следует позиционироваться на соответствующее поле и щелкнуть по кнопке. Для нашего примера это «Код_ сотрудника», «Дата», «Время» (рис. 6.52).
На следующем шаге (рис. 6.53) нужно выбрать те поля, которые будут также отображаться в ответе наряду с полями, выбранными на предыдущем этапе. Мы выберем оба оставшихся поля
На последнем шаге (рис. 6.54) следует задать имя создаваемого запроса
Вид полученного запроса в режиме Конструктор представлен на рис. 6.55. В строке «Условие отбора» в поле «Код_сотрудника» записано следующее выражение:
In (SELECT [кодсотрудника] FROM [расписание] As Tmp GROUP BY [код_сотрудника],[дата],[время] HAVING Count(*)>l And [дата] = [расписание].[дата] And [время] = [расписание].[время])
Как видим, этот запрос значительно сложнее рассмотренных ранее и включает в себя вложенный запрос, написанный на языке SQL (см. главу 7).
6.2.19. Режим сводной таблицы и сводной диаграммы
Сводная таблица или сводная диаграмма может быть получена при работе с таблицей, запросом или формой. Проиллюстрируем возможности применения сводных таблиц/диаграмм, используя в качестве источника данных запрос, базирующийся на связанных таблицах.
Предположим, что требуется проанализировать выплаты сотрудникам вуза. Для этого создадим запрос, включающий нужные для анализа поля, и выберем режим Сводная таблица (рис. 6.56).
При первом открытии запроса в режиме сводной таблицы или сводной диаграммы в эти режимы не включаются поля из источника записей. На рис. 6.57 показан вид экрана при первом открытии запроса в режиме Сводная таблица.
После этого необходимо разместить поля по зонам сводной таблицы в соответствии с желаемым видом получаемого отчета. Для этого следует позиционироваться на соответствующем поле и в ниспадающем списке (рис.6.58) выбрать название той области, в которую должен быть помещен данный элемент.
На рис.6.59 представлен вид спроектированной сводной таблицы.
На рис.6.60 показан вид сводной диаграммы, соответствующей данной сводной таблице. Тип выбранной диаграммы может быть легко изменен.
Использование возможностей режимов сводной таблицы и сводной диаграммы позволяет достаточно просто и быстро анализировать данные в разных разрезах и может считаться инструментом OLAP.
На это следует обратить внимание
-
Табличные языки запросов типа QBE являются простыми языками, ориентированными на конечных пользователей.
-
Табличные языки запросов типа QBE реализованы во многих
СУБД. Они могут отличаться некоторыми деталями реализации, но
принципы, на которых они основываются, - едины. -
Не все типы запросов могут быть реализованы на QBE.
-
Язык QBE часто используется в качестве построителя запросов
на SQL.
Контрольные вопросы
-
К каким классам языков запросов относится язык QBE?
-
Почему QBE называется «табличным двухмерным» языком запросов?
-
Каким образом можно создавать запросы на языке QBE в Access?
-
Какие еще языки запросов можно использовать в Access?
-
Что может служить источником данных для запроса?
-
Какие разновидности запросов вы знаете?
-
Какие запросы называются «сложными»?
-
Как задаются условия «И» и «ИЛИ» в запросах?
-
В чем особенности выполнения запросов на связанных таблицах?
-
Что собой представляют перекрестные запросы? Как и для чего они создаются?
-
Что собой представляют параметрические запросы? Как и для чего они создаются?
-
Как вводятся в запрос вычисляемые поля?
-
Как можно получать итоговые значения в запросах?
-
Какие разновидности корректирующих запросов вы знаете? Как их задать?
-
Что значит «открыть запрос»?
-
Что происходит при открытии запроса на выборку?
-
Что происходит при открытии корректирующего запроса?
-
Может ли запрос на удаление не содержать в бланке запроса ни одного поля? Если да, то к каким действиям приведет выполнение этого запроса?
-
Что произойдет при открытии запроса на удаление, если в бланк запроса перенесено какое-то одно поле, но условие отбора не задано?
-
Как можно сохранить запрос? Для чего это делается?
-
Как можно сохранить результат выполнения запроса? Для чего это делается?
-
В чем разница между сохранением запроса и сохранением результата запроса?
-
Как можно задать диапазон в условии запроса?
-
Как задается состав полей, выводимых в ответ?
-
Как можно упорядочить данные в ответе?
-
Как влияет тип объединения таблиц на результат выполнения запроса?
-
Какого типа запросы можно создать с использованием Мастера «Повторяющиеся записи»?
-
В чем смысл «поиска записей, не имеющих подчиненных»?
Глава 7 ЯЗЫК SQL
7.1. Общая характеристика SQL
Одним из самых распространенных языков запросов является язык SQL (Structure Query Language). Он был разработан в середине 1970-х гг. (IBM). Первой коммерческой системой, в которой реализован этот язык, была система Oracle (1979 г.). В дальнейшем он был реализован в целом ряде популярных СУБД для различных типов ЭВМ и операционных систем. В некоторых СУБД, таких, как Oracle, INGRES, MS SQL-сервер и др., язык SQL используется в качестве основного. В других системах, например СУБД семейства dBase, Access, AD ABAS и других, этот язык применяется в качестве альтернативного.
Предшественником SQL был язык SEQUEL (Structured English Query Language).
В силу широкого использования язык SQL сначала стал де-факто стандартом языка запросов, а затем было официально разработано несколько международных стандартов SQL3. Кроме того, некоторые страны имеют национальные стандарты SQL.
Десятки фирм-разработчиков программного обеспечения создали собственные версии (диалекты) языка SQL. Несмотря на наличие стандарта, эти версии различаются как по синтаксису, так и по другим характеристикам. Есть возможности, которые реализованы во многих системах. Использование возможностей языка, реализованных в большинстве систем, упрощает создание гетерогенных систем, а также не создает дополнительных проблем в случае перевода ИС в среду другой СУБД. Однако ориентация на применение только стандартных возможностей SQL может ограничить доступ к дополнительным функциональным возможностям отдельного сервера.
Язык SQL близок к классу языков реляционного исчисления кортежей и используется в основном в реляционных СУБД. Но в связи с его очень широким применением имеются попытки реализации SQL и в других классах систем (например, в сетевой системе db_VISTA III).
Язык SQL обладает развитыми возможностями и может быть использован как конечными пользователями для формулировки не очень сложных запросов, так и специалистами в области обработки данных (прикладными программистами, администраторами баз данных). С развитием SQL наблюдается тенденция к его усложнению.
Язык баз данных SQL включает в себя два языка.- язык определения схемы (SQL-DDL) я язык манипулирования данными (SQL-DML). Язык DDL позволяет описывать и создавать такие объекты базы данных, как таблицы, индексы, представления и др. Язык DML дает возможность задавать поисковые и корректирующие запросы к базе данных. Операторы языка манипулирования данными SQL могут использоваться как самостоятельно (интерактивный или автономный SQL), так и совместно с операторами других языков манипулирования данными (встроенный SQL).
SQL является языком, ориентированным на групповую обработку данных. Оператор SQL возвращает информацию в табличный формат реляционной модели. При этом возникает конфликт между SQL и традиционными языками программирования, которые ориентированы на позаписную обработку данных. Это обусловило разработку встроенного SQL, который позволяет использовать SQL-операторы в кодах программ, написанных на традиционных языках программирования.
Имеется два типа встроенных SQL-операторов: статический SQL и динамический SQL. Статический SQL ссылается на SQL-операторы, которые известны до момента запуска и в дальнейшем не изменяются, в то время как динамические SQL-операторы определяются только во время выполнения программы.
Кроме DDL и DML иногда в качестве самостоятельного подмножества выделяют язык управления данными (DCL - Data Control Language). Операторы DCL обычно используются для создания объектов, относящихся к управлению доступом пользователей к базе данных, а также для назначения пользователям подходящих уровней привилегий доступа.
SQL является языком высокого уровня. Пользователь не должен при его использовании помнить об открытии и закрытии каких-либо таблиц, определять наиболее эффективный способ реализации запроса, активизировать индексы и т.п. Все это система делает автоматически. Во многих современных СУБД имеются построители запросов SQL. Обычно в этом качестве выступают языки типа QBE. Но не все типы запросов SQL могут быть реализованы на QBE. Некоторые типы запросов, например запрос-объединение (Union), невозможно создать на QBE.
7.2. Описание базы данных
7.2.1. Описание таблиц
SQL оперирует с данными, представленными в виде таблиц. Каждая таблица содержит множество строк. Различают базовые таблицы — таблицы, определенные с помощью их описания на языке описания данных, и производные таблицы, получаемые из одной (или нескольких других) таблицы путем выполнения некоторого запроса.