Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornye_po_BD_1-6.doc
Скачиваний:
114
Добавлен:
07.03.2016
Размер:
33.23 Mб
Скачать

Лабораторная работа № 3

Тема: Выборка данных. Представление данных

Цель: Изучить средства создания выборок данных. Научиться формировать выборки данных с произвольными параметрами. Изучить основные элементы конструкции SELECT SQL.

На практике часто требуется выбрать из исходной таблицы часть записей, удовлетворяющих определенным критериям, и упорядочить выборку. Критерии могут определяться рядом условий. Для решения таких задач предназначены конструктор запросов и команда SELECT – SQL языка Visual FoxPro.

При помощи этих мощных и гибких средств вы можете:

  • формировать сложные критерии для выбора записей из одной или нескольких таблиц

  • указать поля, которые должны быть отображены для выбранных записей

  • выполнять вычисления с использованием выбранных данных

Окно конструктора запросов

Для вызова конструктора запросов в окне проекта на вкладке «Data» выберите группу «Queries» и нажмите кнопку New.

В открывшемся окне диалога «New Query» нажмите кнопку New Query. На экране появится окно диалога выбора таблиц «Add Table or View» (рис.1). В области «Select» данного окна диалога по умолчанию установлена опция Tables и список «Tables in database» содержит список таблиц открытой базы данных. Если вы хотите использовать в запросе представления данных – установите опцию Views. При этом список «Tables in database» будет отображать представления данных, содержащиеся в базе данных.

Рис.1. Окно диалога «Add Table or View»

Для того чтобы использовать свободные таблицы, нажмите мышью кнопку Other. На экране откроется окно диалога «Open», в котором можно выбрать таблицу из любого каталога. Если выбранная вами таблица входит в базу данных, Visual FoxPro автоматически откроет также эту базу данных.

Выберите из списка «Tables in database» таблицу и, используя кнопку Add, перенесите ее в окно конструктора запросов. Завершив выбор таблиц, нажмите кнопку Close для закрытия окна диалога «Add Table or View». После выбора таблицы на экране появляется окно конструктора запросов (рис.2), которое содержит выбранную вами таблицу, а в основном меню появляется пункт Query.

Для формирования запроса в окне конструктора запросов необходимо выбрать поля результата запроса, указать критерии для выборки, группировки и упорядочивания данных, а также указать, куда выводить результат выборки.

Окно конструктора запросов содержит панель для отображения используемых в запросе таблиц и вкладки для выбора полей запроса и формирования условия выборки:

Вкладка

Назначение

«Fields»

Указывает поля исходных таблиц, выбираемые в результирующую таблицу

«Join»

Определяет условия объединения таблиц

«Filter»

Определяет фильтры, накладываемые для выбора записей

«Order By»

Определяет критерий упорядочивания

«Group By»

Определяет условие группировки данных

«Miscellaneous»

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

Рис. 2. Окно конструктора запросов с выбранной таблицей Customer

Для формирования запроса вы можете использовать меню Query и панель инструментов «Query Designer», которые выполняют функции, приведенные в табл. 1.

Функции меню Query Таблица 1.

Команда меню

Описание

Add Table

Добавляет новую таблицу в запрос

Remove Table

Удаляет выбранную таблицу из запроса

Remove Join Condition

Удаляет условие объединения таблиц

Selection Criteria

Выбирает вкладку «Selection Criteria» для определения условия выборки

Output Fields

Выбирает вкладку «Output Fields» для выбора полей результирующей таблицы

Join

Выбирает вкладку «Join» для задания условия объединения таблиц

Filter

Выбирает вкладку «Filter» для задания фильтра

Order By

Выбирает вкладку «Order By» для определения критерия упорядочивания

Group By

Выбирает вкладку «Group By» для определения условия группировки данных

Miscellaneous

Выбирает вкладку «Miscellaneous» для задания дополнительных параметров

Query Destination

Открывает окно диалога «Query Destination», в котором указывается куда выводить результат выборки

View SQL

Открывает окно диалога, в котором отображает SQL–оператор, соответствующий созданному запросу

Comments

Открывает окно диалога, в котором вы можете вводить краткое описание создаваемого запроса

Run Query

Выполняет запрос

Заполнив окно конструктора запросов, вы можете сохранить его, что позволит вам сэкономить время при последующем выполнении данного запроса. Для сохранения окна конструктора запросов выполните команду File | Save as основного меню. В открывшемся окне диалога «Save as» откройте необходимый каталог, введите в поле имя файла и нажмите кнопку Сохранить.

Выбор полей результирующей таблицы

Для выбора полей, которые должны присутствовать в результирующей таблице, вам необходимо отобразить их в списке Selected field вкладки выбора полей запроса (рис.3).

Рис. 3. Выбор полей запроса

Для выбора полей результирующей таблицы откройте вкладку «Fields», выделите в списке Available fields поля, которые собираетесь отобразить в запросе, и с помощью кнопки Add перенесите их в список Selected fields. Кнопка Add All позволяет произвести выбор сразу всех полей таблицы. Если вам нужно выбрать большую часть полей, воспользуйтесь этой кнопкой, а затем выделите курсором поля, которые вы не собираетесь помещать в запрос, и удалите их из списка Selected fields c помощью кнопки Remove.

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

Просмотр результатов выборки

Просмотреть результаты текущего запроса можно следующим образом:

  • нажмите кнопку Run на стандартной панели инструментов

  • выполните команду Query | Run Query

  • выполните команду Run Query всплывающего меню

Результаты выборки выводятся в режиме BROWSE.

Столбцы в результирующей таблице расположены в том порядке, в каком вы выбирали поля на вкладке «Fields». Однако, если этот порядок вас не устраивает, вы можете его изменить. Для этого возьмите мышью заголовок столбца и перенесите его влево или вправо. Заголовок столбца следует за мышью. Затем отпустите кнопку мыши там, где по вашему мнению должен быть расположен этот столбец.

С помощью мыши вы также можете изменить ширину столбца, чтобы просматривать большее количество столбцов на экране. Для этого поместите курсор мыши на вертикальную линию, разделяющую заголовки столбцов. Курсор мыши превратится в двунаправленную стрелку. Нажмите кнопку мыши и перенесите разделитель, изменяя ширину столбца.

Использование в запросах вычисляемых полей

В результате выполнения запроса Visual FoxPro позволяет вам не только выбирать из таблицы содержащуюся в ней информацию, но также производить вычисления и отображать результат вычисления в результирующей таблице. Таким образом, вы можете получить данные, отсутствующие в исходной таблице. При выполнении запроса вы можете вычислять значения по одному или нескольким полям исходной таблицы. Например, вы можете использовать вычисляемые поля для объединения нескольких полей исходной таблицы в одно выходное поле.

Чтобы включить в запрос функцию поля или выражение, на вкладке «Fields» в поле Function and expression введите выражение для вычисления или нажмите кнопку вызова построителя выражения, расположенную с правой стороны данного поля, и в окне диалога «Expression Builder» создайте выражение для вычисляемого поля. Затем нажмите кнопку Add для переноса данного выражения в список выходных полей запроса.

Создайте запрос из таблицы Customer, в котором выберем код покупателя и вычисляемое поле, содержащее объединение фамилии и инициалов покупателя:

  1. Откройте окно запроса для таблицы Customer.

  2. Выберите поле icdCustomer.

  3. Для объединения фамилии и инициалов нажмите кнопку вызова построителя выражения рядом с полем Function and expression вкладки «Fields», и в окне диалога «Expression Builder» создайте следующее выражение:

ALLTRIM(Customer.cLastName)+” ”+SUBSTR(Customer.cFirstName,1,1)+”.”

+ SUBSTR(Customer.cSecondName,1,1)+”.”

  1. Нажмите кнопку Add, и поле разместится в списке Selected fields.На этом формирование запроса завершено (рис.4).

Рис. 4. Определение вычисляемого поля

  1. Нажмите кнопку Run на стандартной панели инструментов, и на экране появится результирующая таблица.

Упорядочивание данных в запросе

Вкладка «Order By» (рис.5) позволяет управлять порядком расположения записей в результирующей таблице. Для этого выделите курсором поля, которые будут определять порядок сортировки выбранных данных, и перенесите их последовательно в список Ordering criteria. Для каждого выбранного поля вы можете установить с помощью переключателя Order options критерий упорядочивания по возрастанию (Ascending) или по убыванию (Descending).

Порядок сортировки записей результирующей таблицы определяется порядком следования полей в списке Ordering criteria и критерием упорядочивания отдельных полей. Чтобы изменить порядок поля в списке Ordering criteria, установите курсор мыши на маркер перемещения слева от поля и переместите поле в требуемое место.

Рис. 5. Вкладка упорядочивания полей в запросе

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

  1. Откройте новое окно конструктора запросов и выберите таблицу Customer.

  2. Выберите на вкладке «Fields» поля cLastName, cFirstName, cSecondName и yCreditLimit.

  3. Перейдите на вкладку «Order By». Выделите курсором поле cLastName и, нажав кнопку Add, перенесите его в список Ordering criteria.

  4. Для просмотра результата выборки нажмите кнопку Run на панели инструментов. Убедитесь, что фамилии покупателей расположены в алфавитном порядке.

  5. Упорядочите данные результирующей таблицы по кредиту покупателя. Просмотрите результат выборки и сравните порядок записей с предыдущим.

  6. Упорядочите данные по фамилии и кредиту. Просмотрите результат выборки.

Построение условий для выбора записей

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

Для задания условия выбора необходимо ввести требуемые значения в соответствующих полях вкладки «Filter». Тем самым вы создаете шаблон, с которым Visual FoxPro при выполнении запроса будет сравнивать все записи исходной таблицы. В результирующую таблицу будут помещены только те данные, значения которых совпали с шаблоном.

Выберем данные обо всех покупателях с фамилией «Иванов».

  1. Откройте окно конструктора запросов для таблицы Customer.

  2. Выберите на вкладке «Fields» поля cLastName, cFirstName, cSecondName и yCreditLimit.

  3. Для задания условия выбора записей перейдите на вкладку «Filter». В столбце Field Name из раскрывающегося списка полей исходной таблицы выберите cLastName. В списке вариантов сравнения выберите значение = =. В текстовом поле столбца Example введите Иванов (рис.6).

Рис.6. Задание условия для выбора записей

  1. Для выполнения запроса нажмите кнопку Run. На экране появится результирующая таблица, которая содержит записи о покупателях, имеющих фамилию «Иванов».

Создание представления данных

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

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

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

Для создания представления данных используется конструктор представлений. Существует несколько альтернативных способов вызова конструктора представлений:

  • выбрать команду File | New | View основного меню;

  • перейти в раздел «Local Views» выбранной базы данных и нажать кнопку New;

  • ввести команду CREATE VIEW в окне команд.

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

Рис. 7 Окно конструктора представлений

Пример: просмотр объема продаж покупателям

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

  1. Откройте на экране окно конструктора представлений и добавьте в него таблицы Customer, Ordsalem, Ordsaled, Goods.

  2. Установите связи между таблицами. Если вы в конструкторе базы данных определили постоянные связи между таблицами, то в окне конструктора они установятся автоматически.

  3. В список Selected fields перенесите наименование фирмы и наименование товара.

  4. Добавьте в список Selected fields вычисляемое поле, которое объединяет фамилию и инициалы в одно поле.

  5. Аналогичным образом определите поле, которое вычисляет итоговую сумму продаж.

  6. Задайте группировку и упорядочивание данных по полям Customer.cCompany и Goods.nmGoods.

  7. Для сохранения представления данных выполните команду File | Save as. В окне диалога «Save» (рис. 8) укажите имя создаваемого представления данных Custsum. Обратите внимание, что в отличие от сохранения запроса, вам не требуется указывать место расположения представления, так как описание представления хранится в самой базе данных.

  8. Закройте окно конструктора представлений. Для просмотра созданного представления данных можно использовать окно проекта или окно «Data session». В окне проекта для просмотра итоговых продаж товаров покупателям достаточно выбрать представление данных Custsum и нажать кнопку Browse.

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

Рис. 8 Определение имени представления данных

Определение параметров представления данных

Созданное в предыдущем примере представление данных содержит итоговую сумму всех продаж товаров. Довольно часто на практике интересны не все продажи, а объем продаж за определенный интервал времени или продажи конкретного товара. В этом случае можно использовать параметры представления данных, которые описываются при создании представления. Имена этих параметров входят в условие выборки данных. При открытии представления запрашиваются значения заданных параметров, и выборка данных осуществляется с учетом введенных значений. Для определения параметров используется команда View Parameters из меню Query.

Измените представление данных, созданное в предыдущем примере, добавив параметры начала и окончания интервала выборки.

  1. Выберите в окне проекта представление данных Custsum и нажмите кнопку Modify.

  2. В окне конструктора представлений данных выполните команду Query | View Parameters, и на экране откроется окно диалога «View Parameters». Это окно диалога содержит список всех параметров представления, для каждого из которых заданы имя параметра и его тип. В данном случае введите два параметра dStart и dEnd и определите для них тип данных Date (рис. 9).

  3. Определите условие выборки данных в заданном указанными параметрами интервале. Для этого перейдите на вкладку «Filter» и добавьте условие для поля Ordsalem.dOrderDate. Для указания интервала используйте оператор Between, а в поле ввода Example введите ?dStart, ?dEnd. Вопросительный знак перед именем параметра является признаком использования параметра.

  4. Сохраните представление данных. Для просмотра итоговых продаж товаров в заданном интервале откройте представление данных Custsum. Поскольку для него определены параметры, прежде всего, будет предложено ввести значение этих параметров (рис. 10). Значение каждого параметра вводятся отдельно.

Рис. 9 Определение параметров

Рис. 10 Ввод значения параметра

Примечание: Значение параметра запрашивается только в том случае, если в данный момент не определена переменная с именем параметра. Поэтому можно в программе или форме определить значения параметров, а затем открыть представление данных с помощью команды USE. Такой подход более удобен для пользователя, чем последовательный ввод значений всех параметров.

Редактирование исходных таблиц с помощью представления данных

В Visual FoxPro с помощью представления данных можно не только просматривать данные, но и редактировать их. Изменения, выполненные в окне представления данных, приведут к изменениям в базовых таблицах, используемых для построения представления. При создании представления данных можно указать, какие поля базовых таблиц будут изменяться, а какие изменять запрещается. Используя такой подход, можно ограничить не только поля, которые может просматривать пользователь, но и определить перечень полей, допустимых для редактирования. Например, при коррекции скидок для покупателей, необходимо видеть на экране наименование фирмы, код покупателя и значение скидки, но редактировать можно только скидку.

Для определения таблиц и полей, которые будут изменяться при модификации данных с помощью представления, используется вкладка «Update Criteria» (рис. 11).

Раскрывающийся список Table этой вкладки содержит перечень всех таблиц, поля из которых указаны в списке Selected fields. Для каждой таблицы из списка область «Field name» содержит список выбранных полей. В этой области можно установить признаки ключевого поля и разрешения модификации. Признак ключевого поля устанавливается с помощью флажка в столбце ключевого поля, заголовок которого содержит изображение ключа. Аналогично устанавливается и признак разрешения модификации в столбце с изображением карандаша.

Кнопка Reset Key сбрасывает все флажки в столбце разрешения модификации и устанавливает флажки в столбце признака ключевых полей только для тех полей, которые являются первичными ключами.

Кнопка Update All устанавливает флажки в столбце разрешения модификации для всех полей, за исключением ключевых.

Все установленные признаки действуют только в том случае, если установлен флажок Send SQL updates.

Области «SQL WHERE clause includes» и «Update using» используются при работе с удаленными таблицами.

На рис. 11 ключевым является поле icdGoods, а редактировать можно только значение поля nUnitPrice.

Обратите внимание, что если в таблице не определены ключевые поля на вкладке «Update Criteria» никакие поля не будут доступны для редактирования.

Рис.11. Вкладка «Update Criteria»

Удаленные представления данных

Удаленные представления данных отличаются от локальных тем, что локальные представления содержат выборку данных из таблиц Visual FoxPro, а удаленные – из любых доступных источников данных, драйвера которых определенны в ODBC. ODBC (Open Database Connectivity) – представляет собой стандартный протокол доступа к базам данных. В данном случае под базой данных имеется ввиду любой доступный в системе источник данных. Установленные в ODBC драйвера позволяют получить доступ к данным, как если бы они были предоставлены в формате Visual FoxPro. Удаленное представление данных можно создать, выбрав пункт Remote Views и нажав кнопку New. При этом на экране появится диалоговое окно выбора соединения или источника данных (рис. 12).

Рис. 12. Окно выбора соединения или источника данных

Переключатель Connections определяет, что в качестве источника данных будет использоваться соединение, определенное в текущей базе данных. Available data sources – позволяет выбрать источник данных из определенных в системе. Кнопка OK подтверждает выбор источника данных. Cancel – отказ от выбора и закрытие диалогового окна. New – позволяет создать новое соединение, но не новый источник данных.

При создании нового соединения в любом случае будет необходимо определить системный источник данных (определяемый драйверами ODBC). Это производится нажатием кнопки New Data Source в окне построения соединений (рис. 13).

Рис. 13. Окно построения соединения

При этом параметры, указываемые в областях Timeout intervals, Data processing, Display ODBC login prompts рекомендуется оставить без изменений, так как в противном случае система может начать работать со сбоями.

После нажатия на кнопку New Data Source на экране появится системное диалоговое окно администрирования источников данных ODBC (рис. 14). В нем содержатся листовые вкладки, позволяющие определять системные, пользовательские и файловые источники данных, а так же просматривать установленные драйвера ODBC.

Рис. 14. Окно администрирования источников данных ODBC

При этом следует учитывать, что пользовательские источники данных (User DSN) видны только на локальном компьютере и только одному локальному пользователю. Системные источники данных (System DSN) – видны всем пользователям на локальной машине, а так же сервисам сетевой операционной системы. Файловые источники данных (File DSN) – в основном предназначены для работы в локальных сетях и работают только при установке соответствующих служб.

В окне администрирования источников данных есть возможность редактировать параметры существующих источников (кнопка Configure), удаление существующего источника (кнопка Remove) и добавление нового источника данных (кнопка Add). При нажатии на кнопку Add на экране появляется диалоговое окно определения драйвера для нового источника данных (рис. 15), в котором необходимо выбрать требуемый драйвер и нажать кнопку Готово. (Обратите внимание, что в системе установлены несколько драйверов Visual FoxPro, но только один из них является драйвером баз данных Visual FoxPro. Остальные – это драйвера таблиц Visual FoxPro. Их можно отличить по наличию указанного в скобках расширения *.dbf).

Рис. 15 Окно определения драйвера ODBC для нового источника данных

После выбора необходимого драйвера на экране появляется диалоговое окно настройки параметров самого источника данных (рис. 16). В этом окне необходимо выполнить следующие действия:

  1. В поле Data Source Name ввести имя источника данных, по которому к нему в дальнейшем можно будет обратиться.

  2. В поле Description можно ввести описание источника данных, которое не влияет на работу с источником и необходимо только для пояснения семантики источника данных.

  3. В области Database type необходимо выбрать тип данных для источника данных. Переключатель Visual FoxPro database определяет, что в качестве источника данных будет использоваться база данных Visual FoxPro. Free Table directory – определяет в качестве источника данных каталог со свободными таблицами не входящими ни в одну базу данных.

  4. В области ввода Path необходимо указать полный путь к источнику данных. При необходимости можно воспользоваться кнопкой Browse, которая предоставляет доступ к окну интерактивного выбора источника данных.

  5. Кнопка Options открывает область определения дополнительных параметров источника данных. Рекомендуется оставить эти параметры без изменений, так как в противном случае бесперебойная работа с источником данных не гарантирована.

После определения всех параметров источника данных следует нажать кнопку OK, после чего на экране опять появится окно администрирования источников данных (см. рис. 14), но теперь в списке должен присутствовать новый, только что определенный источник данных. Далее, если нет необходимости определения дополнительных источников данных, следует нажать кнопку OK, после чего на экране опять появится окно построения соединения (см. рис. 13). В поле ниспадающего списка Data Source необходимо выбрать имя требуемого источника данных. После этого нажатием кнопки Verify Connection можно проверить доступность выбранного источника данных. Если все работает нормально, то на экране появится доброжелательное подтверждение, в противном случае – сообщение об ошибке.

После определения всех необходимых параметров необходимо нажать кнопку OK. На экране появится окно запроса имени сохраняемого соединения (рис. 17). В нем необходимо указать имя соединения и нажать кнопку OK. Обратите внимание, что соединение хранится в самой базе данных и является ее неотъемлемой частью, так что, при переносе базы данных на другой компьютер или изменении конфигурации источников данных необходимо либо настроить источники данных по новой, либо изменить соединения в соответствии с новыми установками.

Рис. 16 окно настройки параметров источника данных

Рис. 17 Окно запроса имени сохраняемого соединения

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

Команда SELECTSQL

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

Рис. 18 Панель View Designer

По нажатию на элемент просмотра SQL на экране появляется стандартное окно редактирования текстовых выражений, в котором отображается сформированный конструктором представлений программный код, реализующий работу представления данных. В самом начале всегда располагается конструкция SELECTSQL, в которой включены только те опциональные части, которые были определены разработчиком в конструкторе представления. После оператора выборки располагается большой блок команд DBSetProp. Эта часть программного представления отвечает за настройку обратной связи данных, т.е. за то, чтобы редактирование данных в представлении отображалось в исходных таблицах. Таким образом, представление данных состоит из двух логических частей: собственно самой выборки данных и блока обратной связи.

Очень часто блок обратной связи просто не нужен, например, при формировании справочных наборов данных или источников данных для отчетов. В таких случаях рекомендуется использовать только оператор выборки в программной части приложения (программный код в методах различных компонентов проекта). Существует несколько способов создания такого кода. Самым простым и очевидным является построение выражения в конструкторе запросов, с последующим копированием полученного текста оператора SELECT в необходимое место программы. Однако этот метод обладает огромным недостатком, а именно, конструктор представлений предназначен для организации работы именно представлений данных, а не выборок. Поэтому, зачастую, явное копирование выражения SELECT приводит к неправильной работе программного кода. Разработчик вынужден впоследствии корректировать команду выборки данных исходя из конкретных условий задачи.

Вторым (рекомендуемым) способом является явное формирование выражения оператора выборки. Полученное выражение может располагаться в любом допустимом месте: окне команд, программном модуле, в коде событий и методов элементов форм и т.п.

Синтаксис команды SELECTSQL представляет довольно сложную конструкцию:

SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] Select_List_Item [, ...]

FROM [FORCE] Table_List_Item [, ...]

[[JoinType] JOIN DatabaseName!]Table [[AS] Local_Alias]

[ON JoinCondition [AND | OR [JoinCondition | FilterCondition] ...]

[WITH (BUFFERING = lExpr)]

[WHERE JoinCondition | FilterCondition [AND | OR JoinCondition | FilterCondition] ...]

[GROUP BY Column_List_Item [, ...]] [HAVING FilterCondition [AND | OR ...]]

[UNION [ALL] SELECTCommand]

[ORDER BY Order_Item [ASC | DESC] [, ...]]

[INTO StorageDestination | TO DisplayDestination]

[PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT]

однако обязательными являются только те элементы, которые не включены в квадратные скобки []. Таким образом, минимальная конструкция оператора выборки выглядит следующим образом:

SELECT Select_List_Item FROM Table_List_Item

В этом выражении Select_List_Item обозначает список имен полей, разделенных запятой, которые будут входить в результирующую выборку, а Table_List_Item – список открытых таблиц, из которых будет производиться выборка. Если в результате необходим полный набор полей, допускается использование служебного символа *.

Например:

SELECT cnmGoods FROM Goods

по этой команде будет создана выборка данных из таблицы GOODS, включающая в себя все значения поля cnmGoods. Выборка будет автоматически открыта в окне табличного просмотра BROWSE.

SELECT icdGoods, cnmGoods, cnmGoodsGrp, nUnitPrice FROM Goods

по этой команде в результат выборки будут помещены значения всех полей из таблицы GOODS. Обратите внимание, что эквивалентной является команда SELECT * FROM Goods.

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

Например, по команде SELECT cnmGoddsGrp From Goods пользователь получит полный список значений выражения поля cnmGoodsGrp. Причем количество записей в выборке будет совпадать с количеством записей в исходной таблице Goods, т.е. если было 50 товаров, принадлежащих одной группе, то в результате будут 50 одинаковых записей групп, что само по себе не имеет глубокого смысла. Команда SELECT DISTINCT cnmGoddsGrp From Goods в результате выдаст только неповторяющиеся записи, не зависимо от того, сколько раз значение встречается в исходной таблице, что приведет к формированию полного списка всех групп товаров, что уже является достаточно осмысленным. Полученный список групп удобно использовать как источник данных для элементов выбора на формах ввода.

Остальные необязательные элементы эквивалентны соответствующим вкладкам в конструкторе представлений. Вкратце рассмотрим основные из них.

JOIN – служебное слово, позволяющее произвести соединение данных нескольких таблиц. Перед ним необходимо указать тип соединения (INNER, LEFT, RIGHT, FULL). Допускается указывать только один тип соединения. После служебного слова ON указывается условие соединения. Т.к. выборка в данном случае проводится из нескольких таблиц, перед именами полей следует указать имя таблицы через точку (ИмяТаблицы . ИмяПоля). Допускается указывать несколько условий, разделенных логическими операторами.

Например:

SELECT * FROM Customer LEFT JOIN Phoncust ON Customer.icdCustomer=Phoncust.icdCustomer

по этой команде пользователь получит полный набор данных о заказчиках и их телефонах, если у заказчика нет телефона, недостающие поля будут заполнены пустым значением NULL. Изменением типа соединения на RIGHT можно добиться результата, когда будет выдана информация только о тех заказчиках, у которых ЕСТЬ телефоны (SELECT * FROM Customer RIGHT JOIN Phoncust ON Customer.icdCustomer=Phoncust.icdCustomer).

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

Например:

SELECT * FROM Customer WHERE cCity=”Рыбница

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

Команда SELECT * FROM Customer WHERE cCity=”Рыбница” AND cCity=”Резина” выдаст вообще пустой результат, т.к. по логике должны быть выбраны заказчики, проживающие в двух городах сразу. Для выбора заказчиков из двух городов в данном случае следовало использовать логический оператор OR (SELECT * FROM Customer WHERE cCity=”Рыбница” OR cCity=”Резина”).

Строго говоря, логический оператор AND, при указании условия для одного поля, можно использовать для указания диапазона значений. Команда SELECT * FROM Goods WHERE nUnitPrice>=10 AND nUnitPrice<100 выберет только те товары, цены на которые входят в диапазон [10, 100). Обратите внимание, что товар с ценой 10 попадет в результат выборки, а товар с ценой 100 – нет.

GROUP BY – служебное слово, позволяющее указать группировку данных. В основном используется при работе с вычисляемыми полями. Можно указать несколько полей через запятую, по которым будет производиться группировка данных, при этом порядок группировки будет соответствовать указанному списку полей.

ORDER BY – позволяет указать условие сортировки результата выборки. Служебные поля ASC и DESC служат для определения сортировки данных.

Например:

SELECT DISTINCT cCity FROM Customer ORDER BY cCity ASC

выдаст неповторяющийся список городов проживания заказчиков, отсортированный по алфавиту.

SELECT * FROM Goods WHERE cnmGoodsGrp=”Мебель” ORDER BY nUnitPrice DESC

выдаст товары из таблицы Goods, имеющие группу «Мебель», расположенные в порядке убывания цены.

INTO – служебное слово, позволяющее указать место назначения результата выборки. Местом назначения может быть массив, курсор или таблица (ARRAY, CURSOR, TABLE). Курсор в данном случае представляет собой временную таблицу в оперативной памяти, открытую в уникальной рабочей области. С курсором допускается проводить все операции, применимые к таблицам.

В случае использование служебного слова TO можно указать в качестве места назначения файл, принтер или экран (FILE, PRINTER, SCREEN).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]