Информационные системы

Информационные системы

Электронный учебник

Лабораторная Работа №8

 

Выборка данных

 

На практике часто требуется выбрать из исходной таблицы часть записей, удовлетворяющих определенным критериям, и упорядочить выборку. Критерии могут определяться рядом условий. Для решения таких задач предназначены конструктор запросов и команда SELECT языка 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.

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

Команда меню

Описание

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)+”.”

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

 

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

5.       Нажмите кнопку 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. Задание условия для выбора записей

 

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

Задание.

1.       Выберите из таблицы всех покупателей, чей кредит превышает 1000.

2.       Выберите всех покупателей, живущих в России и Украине.

3.       Выберите всех покупателей, чей кредит находится в промежутке от 1000 до 50000.

4.       Создайте запрос, выводящий данные о каждом покупателе и каждом товаре, который данный покупатель хотя бы один раз заказывал. Если товар был заказан несколько раз, то в результате он должен быть включен только один раз.

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

6.       Выдайте на экран всех покупателей, которые сделали заказ на сумму превышающую 10000.

Пример выполнения работы