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

MI6UGRU

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

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

11.В окошке и поместить в таблицу, введите НАСЕЛЕНИЕ в качестве имени для этой таблицы.

12.Функция Count(*) считает все записи в таблице. Таким образом, мы группируем все страны по континентам, MapInfo подсчитывает число стран на каждом контитенте и помещает результат в колонку, названную СТРАНЫ (это псевдоним).

Count(*) подсчитывает общее число записей в таблице. Но поскольку мы группируем государства по колонке КОНТИНЕНТ, то MapInfo выдаст количество стран для каждого континента в отдельности и поместит его в колонку СТРАНЫ (псевдоним названия колонки).

197

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

Будет получена таблица, показанная на рисунке.

Условие Where

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

Порядок полей

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

Select * from A,B where A.field1 = B.field1

Select * from A,B where B.field1 = A.field1

Таким образом, учтите, что когда Вы переключаете порядок географических операндов, географические операторы так же должны измениться. Следующие операторы производят одинаковые результаты:

Select * from states, cities where states.obj contains cities.obj

Select * from states, cities where cities.obj within states.obj

Порядок Предложений

Порядок, в котором предложения объединения таблиц осуществляют объединение, не

имеет значения. Например, каждое из нижеследующих предложений правильно:

Select * from Us_custg,States,City_125

where Us_custg.state = States.state and States.state = City_125.state and Us_custg.order_amt > 10000

198

 

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

Select * from Us_custg,States,City_125

 

where States.state = City_125.state and

States.state =

City_125.state and Us_custg.order_amt >

10000

Select * from Us_custg,States,City_125

 

where Us_custg.state = States.state and

Us_custg.order_amt >

10000 and States.state = City_125.state

 

Обработка ошибок

Если составленное условие Where использует OR как логический оператор, то MapInfo выдаст сообщение об ошибке. Обычно такое сообщение появляется тогда, когда MapInfo не может найти объединение между двумя таблицами. Например, если Вы ввели следующее некорректное условие:

Select * from A,B where A.field1 = B.field1 or A.field1 = B.field2

Появится сообщение об ошибке “No join specified between A and B. Invalid join condition in Where clause”.

Внешнее объединение

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

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

1.Выполните команду ЗАПРОС > SQL-ÇАПРОС. Заполните диалог следующим образом:

199

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

2.Нажмите OK. Ваш запрос появится в окне Списка. Необходимо сохранить этот запрос к базовой таблице.

3.Выполните команду ФÀÉË > ÑОХРАНИТЬ КОПИЮ. Появится диалог “Создать копию таблицы”. Выберите подходящий каталог для Вашего файла и назовите таблицу RESULT.TAB. Нажмите кнопку СОХРАНИТЬ.

4.Выполните команду ФÀÉË > ÎТКРЫТЬ ТАБЛИЦУ и откройте таблицу RESULT. Эта таблица включает в себя те записи из обоих таблиц, где имеется соответствие.

200

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

5.Далее Вы должны выбрать записи из таблицы КВАРТИРЫ, которые не имеют соответствия в таблице жильцов. Выполните команду ЗАПРОС > SQL-ÇАПРОС è

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

6.Результирующая таблица запроса - это список всех квартир, которых нет в таблице RESULT. Чтобы включить эти записи в таблицу RESULT, нужно

присоединить их. Выполните команду ТАБЛИЦА > ÄОБАВИТЬ ЗАПИСИ В

ТАБЛИЦУ.

7.Присоедините таблицу результатов последнего запроса к таблице RESULT. Будет присоединен список свободных квартир к списку занятых квартир. Если колонки не присоединились правильно после применения операции Append, обратитесь к документации MapInfo для решения этой проблемы.

Поиск информации внутри колонки данных - функция InStr

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

201

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

Например, Вам надо выбрать все улицы в таблице ДОРОГИ, содержащие слово “Большая” в колонке УЛИЦЫ.

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

Если функция InStr встретит любое появление “Большая,” она вернет позицию на следующее за этим место.

Синтаксис функции INSTR определяется следующим образом:

INSTR ( position, string, substring)

ãäå: position - это стартовая позиция поиска

string - это строковый символ или поле, содержащее строковый символ, который надо найти

substring - это строковый символ, который следует найти Например, Если Ваши данные выглядят следующим образом:

“Это образец функции вставки.”

Вы хотите найти позицию “образец” Функция INSTR будет выглядеть следующим образом:

202

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

INSTR(1,” Это образец функции вставки.”,”образец”) Когда операция будет выполнена, возвратится величина 5.

Внимание: Если строковый символ, который Вы ищете, не существует, то будет возвращено значение 0.

Для более подробной информации смотрите Приложение D: Создание выражений.

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

таблице

Следующий SQL-оператор позволит Вам выбрать записи из одной таблицы, которых нет в другой таблице, основываясь на поле, общем для двух таблиц. Например, если есть таблица, ОБЛАСТИ1 и надо выбрать все записи из таблицы ОБЛАСТИ1, которых нет в таблице ГОРОДА125.

1. Выполните команду ЗАПРОС > SQL-ÇАПРОС.

Внимание: Синтаксис оператора следующий: NOT имя_колонки IN(SELECT

имя_колонки FROM второй_таблицы)

203

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

2. Этот оператор SQL осуществляет запрос всех записей в таблице

ОБЛАСТИ1.Tab, которые не существуют в таблице ГОРОДА125.Tab.

Выбор четных или нечетных записей из таблицы

Каждая запись в таблице имеет порядковый номер в колонке RowID. Допустим, Вам надо выбрать все четные записи из таблицы. Самый простой путь – использовать колонку RowID.

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

выполните команду ЗАПРОС > SQL-ÇАПРОС. Заполните диалог следующим образом:

Внимание: RowID - это функция, а не имя колонки в таблице Области1.

Чтобы выбрать нечетные записи из таблицы, сделайте следующее:

выполните команду ЗАПРОС > SQL-ÇАПРОС. Заполните диалог следующим образом:

204

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

Внимание: RowID - это функция, а не имя колонки в таблице Области1.

205

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

Выбор улиц из таблицы StreetInfo

Если Вы используете продукты MapInfo StreetInfo, то может понадобиться поместить

часть улиц на отдельный слой. Следующий раздел демонстрирует типичный запрос.

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

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

В результате будет создана новая таблица с именем ТРАССЫ, содержащая все главные дороги из таблицы StreetInfo МОСКВА.

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

Внимание: Примененный выше оператор SQL-Запроса выбирает все главные дороги, которые определены в дорожных кодах. Чтобы определить класс дороги, которую Вы хотите выбрать, используйте инструмент Info для некоторых улиц или обратитесь к документации StreetInfo для разъяснения разных классов дорог.

206

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