Результаты SQL-запроса можно сгруппировать по значениям из некоторой колонки так, что записи, содержащие одинаковые значения в этой колонке, будут объединены вместе. Такую колонку можно определить в окошке "Сгруппировать по" диалога "SQL-запрос". При использовании также функций обобщения строки с одинаковыми значениями в группировочных колонках считаются одной группой. Повторяющиеся записи при этом не учитываются, а обобщенные значения выдаются в вычисляемых колонках. Задайте названия колонок или их номер в окошке "Выбрать колонки". При использовании вычисляемых колонок следует указывать именно номер.
Кроме того, можно указать MapInfo порядок сортировки результатов запроса. Стандартный порядок - по возрастанию (для строковых полей - по алфавиту). Как и в окошке "Сгруппировать по", здесь можно указывать название колонки или ее условный номер. Для вычисляемых колонок следует указывать номер. При этом не надо указывать "COL" перед номером колонки.
Подробнее предложения "Сгруппировать по" и "Порядок задать по" описаны в главе "SQL-запрос" в Справочнике MapInfo.
Объединение таблиц командой SQL-запрос
При выполнении SQL-запросов к нескольким таблицам MapInfo должна объединить данные из разных таблиц. Допустим, имеется таблица, содержащая только графические объекты и их названия, и таблица статистических данных для некоторого региона. Надо показать эти статистические данные на карте. Можно объединить статистические и географические данные в одну таблицу с помощью команды SQL-ЗАПРОС.
При работе с несколькими таблицами Вы должны так заполнить окошко "с условием", чтобы при выполнении запроса правильно сопоставлялись записи из разных таблиц.
Например, рассмотрим таблицу WORLD и таблицу экономической статистики (ECO_STATS) по всем странам мира. Надо создать временную таблицу запроса, которая объединила бы оба набора данных:
"Выбрать колонки": * (напомним, что звездочка означает, что в таблицу запроса надо включить все колонки исходных таблиц)
"Из таблиц": WORLD, ECO_STATS
"С условием": WORLD.Страна = ECO_STATS.Страна
Две колонки, с помощью которых Вы сопоставляете записи из разных таблиц, не обязательно должны иметь одинаковое название. Например, рассмотрим таблицу иностранных клиентов (INT_CUST), содержащую колонку регионов сбыта ("Территория"). В эту колонку записаны названия континентов. Чтобы временно объединить эту таблицу с таблицей стран мира, составьте запрос следующим образом:
"Выбрать колонки": *
"Из таблиц": WORLD, INT_CUST
"С условием": WORLD.Континент = INT_CUST.Территория
Порядок полей
Порядок полей, используемых в объединении таблиц не имеет значения. Любой из вариантов синтаксиса приемлем:
Select * from А,В where A.field1 = B.field1
Select * from А,В 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
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 А,В 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-ЗАПРОС. Заполните диалог следующим образом:
2. Нажмите ОК. Ваш запрос появится в окне Списка. Необходимо сохранить этот запрос к базовой таблице.
3. Выполните команду Файл > СОХРАНИТЬ КОПИЮ. Появится диалог "Создать копию таблицы". Выберите подходящий каталог для Вашего файла и назовите таблицу RESULT.TAB. Нажмите кнопку Сохранить.
4. Выполните команду Файл > Открыть таблицу и откройте таблицу RESULT. Эта таблица включает в себя те записи из обоих таблиц, где имеется соответствие.
5. Далее Вы должны выбрать записи из таблицы КВАРТИРЫ, которые не имеют соответствия в таблице жильцов. Выполните команду ЗАПРОС > SQL-Запрос и заполните диалог следующим образом:
6. Результирующая таблица запроса - это список всех квартир, которых нет в таблице RESULT. Чтобы включить эти записи в таблицу RESULT, нужно присоединить их. Выполните команду Таблица > Добавить записи в таблицу.
7. Присоедините таблицу результатов последнего запроса к таблице RESULT. Будет присоединен список свободных квартир к списку занятых квартир. Если колонки не присоединились правильно после применения операции Append, обратитесь к документации MapInfo для решения этой проблемы.
Дата: 2019-12-10, просмотров: 357.