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

Основным действием выполняемым с помощью SQL запросов в системе ZuluGIS является выборка данных для их вывода в виде таблицы в области результатов запроса. Выборка данных производится с помощью ключевого слова SELECT, после которого задаются параметры выборки.

[Примечание]Примечание

Как правило, выборка данных производится из записей полей БД слоев карты, но ключевое слово SELECT также может использоваться для вывода в поле результатов вычисления произвольных выражений, приведенных в строке после SELECT. Можно одновременно вывести результаты вычисления нескольких выражений, перечислив их через запятую.

Например, команда SELECT "Результаты вычисления", 2+2, выведет в области результатов таблицу из двух ячеек с данными «Результаты вычисления» и 4.

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

При запросе данных из одного слоя карты, для использования в команде выборки полей данных достаточно указывать только их названия. Если же в выборке используются поля из нескольких слоев, то названия полей требуется указывать в формате <Название слоя>.<Название поля>.

Типовой запрос имеет следующий вид:

SELECT <выводимые колонки> [FROM <список слоев>] [WHERE <условия отбора> ]

где:

SELECT <выводимые колонки>

Часть команды выборки в которой задаются колонки выводимой таблицы данных. В области <выводимые колонки> через запятую перечисляются названия полей, значения которых выводятся в колонках таблицы, либо выражения, результаты расчета которых выводятся в таблице («Операторы и функции языка SQL»).

Для вывода в таблице значений всех полей данных из указанных в запросе слоев, задайте вместо списка полей символ « * ». В таком случае, значения полей в таблице будут выводиться в том же порядке, в котором они заданы в БД.

Для того чтобы в итоговой таблице выводились только отличающиеся друг от друга записи, задайте списком полей ключевое слово DISTINCT («Избавление от повторяющихся записей»).

FROM <список слоев>

Часть строки выборки в которой через запятую перечисляются слои карты из которых запрашиваются данные.

Если все поля в запросе указаны в формате <Название слоя>.<Название поля>, часть запроса с ключевым словом FROM может быть опущена.

Если данные запрашиваются из более чем одного слоя карты, в итоговой таблице будет выведено декартово пересечение записей запрошенных слоев. Например, в случае запроса полей из двух слоев в итоговой таблице будет набор записей со всеми возможными комбинациями полей из записей первого и второго слоя, т.е., например при запросе поля А из слоя содержащего 2 записи и запросе поля B из слоя также содержащего две записи, в итоговой таблице будет четыре записи со следующими данными: A1+B1, A1+B2, A2+B1, A2+B2.

WHERE <условия отбора>

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

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

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

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

Примеры выборок

Простейшая выборка

SELECT * FROM Кварталы

В результате данного запроса выводится таблицу со всеми записями данных об объектах слоя Кварталы, причем в таблице выводятся все доступные поля данных слоя.

Пример выполнения запроса

Рисунок 719. Пример выполнения запроса


Команда выборки с перечислением требуемых полей

SELECT Sys, perimeter, [Количество этажей] FROM Здания 

В результате запроса выводится таблица с полями Sys, perimeter, Количество этажей всех записей слоя Здания.

Команда выборки без FROM части

SELECT Здания.Sys, Здания.Адрес

В данном запросе для всех полей явно указан используемый слой, поэтому нет необходимости дополнительно указывать слой с помощью ключевого слова FROM.

Выборка с отбором по условию

SELECT [Номер дома] FROM Здания WHERE Улица='5й Южный пер.'

В результате данного запроса выводится таблица со значениями поля Номер дома для всех записей слоя Здания у которых значение поля Улица равняется строке 5й Южный пер..

Выборка по нескольким слоям

SELECT Кварталы.sys, Здания.Улица + " " + Здания.[Номер дома]   
FROM Здания, Кварталы 
WHERE Здания.Geometry.STWithin(Кварталы.Geometry)  

В результате такого запроса будут отобраны объекты слоя Здания располагаются в объектах слоя Квартал и будет выведена таблица из двух столбцов, в первом из которых выводятся поля Sys объектов слоя Квартал, а во втором - адреса зданий в слое Здания помещающихся в указанных объектах слоя Квартал. Используемая в данном запросе конструкция Здания.Geometry.STWithin(Кварталы.Geometry) проверяет, не располагается ли объект слоя Здания внутри объекта слоя Кварталы (подробнее «Работа с пространственными данными в запросах»).