Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MI6UGRU

.pdf
Скачиваний:
16
Добавлен:
13.02.2015
Размер:
14.71 Mб
Скачать

Глава 10: Запросы

(ПРОДАЖИ + КОМИССИЯ) / 12 < 2000

Согласно выражению, MapInfo сложит число в колонке ПРОДАЖИ с числом из колонки КОМИССИЯ. Однако это дает общий годовой объем. Вы же хотите получить среднемесячный объем. Поэтому Вы делите сумму на 12. Полученное значение сравнивается с 2000.

В списке Операторы содержатся также логические операции, например, AND, NOT, OR и LIKE.

"Функции"

Это окошко содержит математические функции, имеющие один и более параметров и

возвращающие значения. Эти функции применяются для получения значений

элементарных функций над данными из некоторой колонки. Например:

abs(<число>)

выдает абсолютное значение чисел из заданной колонки.

Например, метеоролог хочет выбрать все дни, когда температура в его городе была на

10 градусов выше или ниже средней по стране. Для этого используется колонка

СР_РАЗН, содержащая разницу температур в городе и в среднем по стране. Можно

составить такое выражение:

ÑÐ_ÐÀÇÍ < –10 Or ÑÐ_ÐÀÇÍ > 10

Оно означает, что MapInfo должна выбрать все записи с разницей меньше -10 или

больше +10. Однако, выражение можно задать и по-другому:

abs(ÑÐ_ÐÀÇÍ) > 10

В этом случае MapInfo будет выбирать все записи, абсолютное значение разницы в

которых превосходит 10.

Окошко Функции содержит много других функций, в том числе функции площади,

периметра, синуса, косинуса и дат. Полный список функций приведен в Приложении D

"Создание выражений" â Справочнике MapInfo.

Этапы выполнения команды Выбрать

Âобщих чертах процесс выбора объектов с помощью команды ВЫБРАТЬ выглядит так:

1.Выполните команду ВЫБРАТЬ из меню Запрос.

2.Выберите название таблицы, из которой следует выбирать записи.

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

177

Глава 10: Запросы

4.Выберите колонку, по которой следует сортировать результаты обработки запроса (это не обязательно). Стандартный режим – без сортировки.

5.Чтобы увидеть выбранные записи в окне Списка, установите флажок

Результат в Список.

6.MapInfo откроет окно Списка для созданной временной таблицы выборки.

MapInfo называет временные таблицы выборок "Запрос1", "Запрос2" и так далее. При выборе записей с помощью команд ВЫБРАТЬ è SQL-ЗАПРОС можно задать свое название таблицы выборки вместо стандартного. Введите это название в окошко поместить в таблицу. Таблицу запроса можно сохранить под другим именем на диске командой СОЗДАТЬ КОПИЮ.

ПРИМЕР... Выборки

MapInfo предоставляет простые средства выбора и поиска информации. Вы можете создавать выборки из баз данных с помощью команды ВЫБРАТЬ. Рассмотрим, как выбрать из таблицы WORLD страны с уровнем грамотности выше 90%.

Откройте таблицу WORLD.TAB и выполните команду ЗАПРОС > ÂЫБРАТЬ. Появится диалог "Выбрать".

Проделайте следующее:

1.Заполните окошки диалога "Выбрать":

Âокошке Выбрать записи из таблицы выберите "World".

Нажмите кнопку СОСТАВИТЬ. Появится диалог "Выражение".

178

Глава 10: Запросы

2.Заполните диалог "Выражение", как показано на рисунке ниже:

Âокошке Колонки выберите ГРАМОТНОСТЬ.

Âокошке Операторы выберите ">" (больше).

Введите число 90.

Нажмите кнопку ПРОВЕРИТЬ, чтобы убедиться в правильности синтаксиса запроса. Нажмите в этом диалоге кнопку OK.

Нажмите OK, чтобы закрыть диалог "Выражение". Вновь появится диалог "Выбрать".

Проверьте, чтобы был установлен флажок Результат в Список.

3. Нажмите кнопку OK для выбора стран.

MapInfo откроет окно Списка по результатам выбора. Выборка также будет выделена в окне "World Карта" .

179

Глава 10: Запросы

180

Глава 10: Запросы

Создание новой таблицы из подмножества файлов

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

Существуют два пути для создания новой таблицы, содержащей выборочные записи из изначальной таблицы. Можно интерактивно выбрать объекты, которые Вас интересуют с помощью инструментов выборки и поместить их в новую таблицу. Или можно использовать SQL-Запрос для выбора необходимых объектов, используя при этом функции SQL.

Сохранение итоговой таблицы в этих двух случаях будет одинаковой процедурой.

Интерактивный выбор объектов

1.Выполните команду ФÀÉË > ÎТКРЫТЬ ТАБЛИЦУ и откройте таблицу в окне Карты.

2.Выберите необходимые Вам объекты для новой таблицы, используя инструменты Стрелка, Выбор-в-круге или Выбор-в-области. Используйте клавишу Shift для выбора множества объектов. Ваша карта будет похожа на такую.

181

Глава 10: Запросы

3. Выполните команду ФÀÉË ОХРАНИТЬ КОПИЮ и сохраните таблицу Selection. Таблица может быть сохранена под любым именем.

Выбор объектов с помощью SQL-Запроса

Составим с помощью операторов SQL-Запрос, который выберет штаты с наибольшей

плотностью населения:

1.Выполните команду ФÀÉË > ÎТКРЫТЬ ТАБЛИЦУ и откройте таблицу STATES в окне Карты.

2.Выполните команду ЗАПРОС > SQL-ÇАПРОС и заполните диалог “SQL-Запрос” как показано ниже.

Будет создана новая таблица, HIDENSTY, содержащая только те штаты, в которых достаточно высокая плотность населения (количество населения, деленное на общую площадь). Звездочка (*) в окошке Выбрать из колонки

переводит все колонки из таблицы STATES в таблицу HIDENSTY.

3.Выполните команду ФÀÉË > ÑОХРАНИТЬ КОПИЮ и сохраните таблицу Selection. Таблица может быть сохранена под любым именем.

182

Глава 10: Запросы

Команда SQL-запрос

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

В начале этой главы мы разобрали, как создавать выборки с помощью команды ЗАПРОС > ÂЫБРАТЬ. Теперь рассмотрим более мощную команду – SQL-ЗАПРОС.

Команда ВЫБРАТЬ позволяет формулировать достаточно сложные запросы, а команда SQL-ЗАПРОС еще мощнее. Записи в таблице запросов, созданной командой ВЫБРАТЬ, не содержат никакой дополнительной информации по сравнению с исходной таблицей. Это, по существу, те же записи. Они просто собраны вместе.

С помощью команды SQL-ЗАПРОС можно создавать таблицы запросов, содержащие данные, которые не присутствуют явно в исходных таблицах.

Диалог “SQL-запрос” – один из наиболее сложных в MapInfo. Не пугайтесь. Разобравшись в значениях каждого окошка, Вы без особого труда сможете формулировать сложные запросы. Вы можете напрямую вводить выражения в текстовые окошки или формировать их, выбирая элементы из окошек списков.

Проще всего разобрать работу с этим диалогом на подробном примере. В этом примере будет использована таблица WORLD из комплекта поставки MapInfo, так что Вы сможете сами проверить работу SQL-запроса. Мы коротко описали каждый шаг. Подробный разбор каждого окошка будет дан после примера.

ПРИМЕР...

Расчет плотности населения с помощью SQL-запроса

Возьмем таблицу статистики населения всего мира (WORLD) и создадим таблицу всех стран, плотность населения в которых превышает 500 человек на квадратный километр. Будем использовать следующую формулу вычисления плотности населения:

НАСЕЛЕНИЕ / ПЛОЩАДЬ

Таблица WORLD содержит колонку численности населения (НАСЕЛЕНИЕ), но не содержит данных о площадях государств. Однако поскольку каждой записи таблицы WORLD соответствуют графические объекты, MapInfo самостоятельно рассчитает площадь каждого государства.

Откройте таблицу WORLD.TAB и увеличьте его на все окно. Выполните команду ЗАПРОС > SQL-ЗАПРОС. Появится диалог "SQL-запрос".

183

Глава 10: Запросы

Заполните его следующим образом:

1.Находясь в окошке из таблиц, выберите WORLD из окошка списка Таблицы. Также надо указать, какие еще таблицы будут использованы в предложениях SQLзапроса. В данном примере используется только одна таблица – WORLD. Вообще же могут использоваться две, три и более таблиц.

2.Окошко из таблиц надо заполнить до того, как Вы начнете заполнять окошко

Выбрать колонки. На основании содержимого окошка из таблиц MapInfo создает список колонок, которые можно упоминать в окошке Выбрать колонки.

3.Нажав клавишу TAB, переместитесь в окошко Выбрать колонки и удалите там звездочку (*), чтобы перечислить колонки, которые следует включить в таблицу запроса. Звездочка означает, что надо включить все колонки.

Функция окошка Выбрать колонки подобна команде СПИСОК > ÂНЕСТИ ПОЛЯ. Однако, в отличие от команды ВНЕСТИ ПОЛЯ (в которой могут быть показаны только колонки, реально существующие в таблице), окошко Выбрать колонки позволяет использовать колонки из разных таблиц и создавать новые колонки с помощью математических функций.

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

стоит звездочка, то таблица запроса содержит все поля, которые перечислены в окошке списка Колонки.

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

4.Выберите СТРАНА в окошке списка Колонки.

5.Выберите НАСЕЛЕНИЕ в окошке списка Колонки.

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

6.Выберите знак деления (/) из окошка списка Операторы.

7.Выберите "Area" из окошка списка Функции.

Таким образом, мы создали вычисляемую колонку. Вычисляемой называется колонка, содержащая результат вычислений над значениями из других колонок. При создании таблицы запроса MapInfo включит в нее две колонки: СТРАНА è "ÍАСЕЛЕНИЕ/Area(obj, "sq km")" или колонку плотности населения. Во всех географических функциях MapInfo указывает единицы измерения. Если Вы хотите получить площадь в квадратных милях, вместо "sq km" введите "sq mi".

184

Глава 10: Запросы

Теперь надо составить выражение, согласно которому будут выбираться только страны с плотностью населения больше 500 человек на квадратный километр.

8.С помощью клавиши TAB переместитесь в окошко с условием.

9.Выберите НАСЕЛЕНИЕ в окошке списка Колонки.

10.Выберите знак деления (/) в окошке списка Операторы.

11.Выберите "Area" в окошке списка Функции.

12.Выберите знак больше (>) в окошке списка Операторы.

13.Введите значение 500.

Мы построили выражение "Выбрать все страны с плотностью населения (НАСЕЛЕНИЕ/Area(obj, "sq km")) больше (>) 500 человек на квадратный километр.

14.Оставьте окошко сгруппировать по колонкам пустым.

15.С помощью клавиши TAB переместитесь в окошко порядок задать по колонкам.

16.Выберите СТРАНА в окошке списка Колонки.

В окошке "порядок задать по колонкам" можно задать порядок, в котором записи будут помещены в таблицу запроса. Вы выбрали СТРАНА. Это означает, что записи должны следовать так, чтобы значения в поле СТРАНА располагались в алфавитном порядке.

17.С помощью клавиши TAB переместитесь в окошко "и поместить в таблицу".

18.Введите "Плотность".

MapInfo дает таблицам запросов следующие стандартные названия: "Запрос1", "Запрос2", "Запрос3" и так далее. Вы можете задать свое название таблицы запроса в окошке "и поместить в таблицу". MapInfo теперь назовет таблицу запроса "Плотность".

19. Нажмите кнопку ПРОВЕРИТЬ.

MapInfo проверит синтаксическую правильность предложений SQL-запроса. Если будут обнаружены ошибки, MapInfo покажет сообщение: какого типа ошибка и в каком окошке она допущена.

20. Проверьте, что установлен флажок Результат в Список.

В режиме Результат в Список MapInfo создает окно Списка для таблицы запроса. Если этот режим не установлен, MapInfo создает временную таблицу запроса, но не показывает ее. Чтобы показать эту таблицу, Вам нужно будет выполнить команду СПИСОК из меню Окно и в ней выбрать ПЛОТНОСТЬ из списка таблиц.

185

Глава 10: Запросы

21. Нажмите OK.

MapInfo создаст следующую таблицу:

Первая колонка содержит название страны. Вторая – плотность населения. Страны перечислены в алфавитном порядке, и плотность населения в них превышает 500 человек на квадратный километр (НАСЕЛЕНИЕ/Area(obj, "sq km") > 500).

186

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