Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MI_UG_7.pdf
Скачиваний:
174
Добавлен:
13.02.2015
Размер:
8.59 Mб
Скачать

Выбор с помощью запросов в MapInfo Professional

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

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

Select * from Us_custg,States,City_125

States.state =

where States.state

= City_125.state and

Us_custg.state and

Us_custg.order_amt >

10000

Select * from Us_custg,States,City_125

States.state =

where States.state

= City_125.state and

City_125.state and

Us_custg.order_amt >

10000

Select * from Us_custg,States,City_125

Us_custg.order_amt >

where Us_custg.state = States.state and

10000 and States.state = City_125.state

 

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

Если составленное условие 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-ЗАПРОС. Заполните диалог следующим образом:

274

MapInfo Professional 7.5

Глава 8: Выборки по запросам

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

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

"RESULT.TAB". Нажмите кнопку СОХРАНИТЬ.

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

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

MapInfo Professional 7.5 Руководство пользователя (Сокращенное)

275

Выбор с помощью запросов в MapInfo Professional

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

6.Выполните команду ТАБЛИЦА > ДОБАВИТЬ ЗАПИСИ В ТАБЛИЦУ. Будет присоединен список свободных квартир к списку занятых квартир. Если колонки не присоединились правильно после применения операции Append, обратитесь к документации MapInfo для решения этой проблемы.

Поиск информации внутри колонки с помощью функции Instr

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

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

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

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

INSTR ( положение, строка, подстрока) где:положение - это стартовая позиция поиска

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

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

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

276

MapInfo Professional 7.5

Глава 8: Выборки по запросам

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

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

Когда операция будет выполнена, возвратится величина 5.

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

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

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

"ГОРОДА125".

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

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

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

2.Этот оператор SQL осуществляет выбор всех записей в таблице ОБЛАСТИ1.Tab, которые не содержатся в таблице ГОРОДА125.Tab.

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

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

RowID.

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

MapInfo Professional 7.5 Руководство пользователя (Сокращенное)

277

Выбор с помощью запросов в MapInfo Professional

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

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

Внимание:RowID - это функция, а не имя колонки в таблице ПОЧВЫ. Чтобы выбрать нечетные записи из таблицы, сделайте следующее:

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

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

Внимание:RowID - это функция, а не имя колонки в таблице. 5. Нажмите OK.

278

MapInfo Professional 7.5

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