Основным действием выполняемым с помощью SQL запросов в системе ZuluGIS является выборка данных для их вывода в виде таблицы в области результатов запроса. Выборка данных производится с помощью ключевого слова SELECT, после которого задаются параметры выборки.
Примечание | |
---|---|
Как правило, выборка данных производится из записей полей БД слоев карты, но ключевое слово SELECT также может использоваться для вывода в поле результатов вычисления произвольных выражений, приведенных в строке после SELECT. Можно одновременно вывести результаты вычисления нескольких выражений, перечислив их через запятую. Например, команда |
Строка команды выборки состоит из трех основных частей, в которых задается какие поля таблиц выводятся в итоговую таблицу, из каких слоев берутся данные и по каким условиям отбираются данные для итоговой таблицы.
При запросе данных из одного слоя карты, для использования в команде выборки полей данных
достаточно указывать только их названия. Если же в выборке используются поля из нескольких
слоев, то названия полей требуется указывать в формате <Название
слоя>
.<Название поля>
.
Типовой запрос имеет следующий вид:
SELECT
<выводимые колонки>
[FROM
<список слоев>
] [WHERE
<условия отбора>
]
где:
SELECT
<выводимые колонки>
Часть команды выборки в которой задаются колонки выводимой таблицы данных. В области
<выводимые колонки>
через запятую перечисляются названия полей,
значения которых выводятся в колонках таблицы, либо выражения, результаты расчета которых
выводятся в таблице («Операторы и функции языка SQL»).
Для вывода в таблице значений всех полей данных из указанных в запросе слоев, задайте вместо списка полей символ « * ». В таком случае, значения полей в таблице будут выводиться в том же порядке, в котором они заданы в БД.
Для того чтобы в итоговой таблице выводились только отличающиеся друг от друга записи, задайте списком полей ключевое слово DISTINCT («Избавление от повторяющихся записей»).
FROM
<список слоев>
Часть строки выборки в которой через запятую перечисляются слои карты из которых запрашиваются данные.
Если все поля в запросе указаны в формате <Название
слоя>
.<Название поля>
, часть запроса с ключевым словом
FROM может быть опущена.
Если данные запрашиваются из более чем одного слоя карты, в итоговой таблице будет
выведено декартово пересечение записей запрошенных слоев. Например, в случае запроса полей из
двух слоев в итоговой таблице будет набор записей со всеми возможными комбинациями полей из
записей первого и второго слоя, т.е., например при запросе поля А
из слоя
содержащего 2 записи и запросе поля B
из слоя также содержащего две записи,
в итоговой таблице будет четыре записи со следующими данными:
A1
+B1
, A1
+B2
,
A2
+B1
, A2
+B2
.
WHERE
<условия отбора>
Часть, в которой задаются условия, в соответствии с которыми отбираются записи данных в таблицу результатов.
В качестве условий могут использоваться операции сравнения, проверки равенства, вхождения значений полей в заданный диапазон, проверки относительного расположения элементов и т.д. Подробно синтаксис условий будет рассмотрен далее.
Если в таблице результатов требуется вывести все записи для указанных полей, эта часть запроса может быть опущена.
Также в команде выборки могут использоваться различные дополнительные команды, рассматриваемые в последующих подразделах.
Примеры выборок
Простейшая выборка
SELECT * FROM Кварталы
В результате данного запроса выводится таблицу со всеми записями данных об объектах слоя
Кварталы
, причем в таблице выводятся все доступные поля данных слоя.
Рисунок 768. Пример выполнения запроса
Команда выборки с перечислением требуемых полей
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)
проверяет, не
располагается ли объект слоя Здания
внутри объекта слоя
Кварталы
(подробнее «Работа с пространственными данными в запросах»).