Справка по SQL файловых баз геоданных

Можно использовать SQL-запросы для доступа и анализа данных в файловой базе геоданных.

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

Псевдоним

Можно указать псевдоним для поля или значений, возвращаемых запросом SQL, используя ключевое слово AS. Это обеспечивает более понятный результат.

В следующем примере использования ключевого слова AS результаты вычитания значений в столбце POP1990 из значений в столбце POP1997 возвращаются под псевдонимом PopChange.

SELECT COUNTY_NAME, POP1997 - POP1990 AS PopChange
 FROM counties
 ORDER BY COUNTY_NAME

CASE-выражения

Выражение CASE анализирует список указанных условных выражений и возвращает результаты на основе этих выражений.

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

SELECT name,salary,
 CASE
	 WHEN salary <= 2000 THEN 'low'
	 WHEN salary > 2000 AND salary <= 3000 THEN 'average'
	 WHEN salary > 3000 THEN 'high'
	END AS salary_level
	FROM employees

Функции

Ниже приведен список функций, поддерживаемых файловыми базами геоданных.

Функции дат

Функции дат возвращают значения даты и времени.

CURRENT_DATE

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

EXTRACT (extract_field FROM extract_source)

Возвращает часть выражения даты и времени (обозначается как extract_source) на основе ключевого слова, указанного для аргумента extract_field.

Значением аргумента extract_field может быть одно из следующих ключевых слов: YEAR, MONTH, DAY, HOUR, MINUTE или SECOND.

CURRENT TIME

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

CURRENT_TIMESTAMP

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

Числовые функции

Числовые функции выполняют операции с числовыми значениями. Все числовые функции возвращают числовые значения.

Аргументы, обозначенные как numeric_exp, float_exp или integer_exp, могут быть именем столбца, результатом другой скалярной функции или числовой константой, для которой исходные данные могут быть представлены числовым типом.

ABS (numeric_exp)

Возвращает абсолютную величину числа, обозначенную аргументом numeric_exp.

ACOS (float_exp)

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

ASIN (float_exp)

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

ATAN (float_exp)

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

CEILING (numeric_exp)

Возвращает наименьшее целое значение, большее или равное значению, обозначенному аргументом numeric_exp.

COS (float_exp)

Возвращает величину косинуса угла (в радианах), обозначенную аргументом float_exp.

FLOOR (numeric_exp)

Возвращает наибольшее целое значение, меньшее или равное числу, обозначенному аргументом numeric_exp.

LOG (float_exp)

Возвращает значение натурального логарифма числа, определенное аргументом float_exp.

LOG10 (float_exp)

Возвращает значение десятичного логарифма числа, определенное аргументом float_exp.

MOD (integer_exp1, integer_exp2)

Делит значение integer_exp1 на значение integer_exp2 и возвращает остаток.

POWER (numeric_exp, integer_exp)

Возвращает значение numeric_exp в степени integer_exp.

ROUND (numeric_exp, integer_exp)

Возвращает значение numeric_exp, округленное до количества знаков справа от десятичной точки, определенное аргументом integer_exp.

Если значение, определенное аргументом integer_exp, отрицательное, значение numeric_exp округляется до |integer_exp| знаков слева от десятичной запятой.

SIGN (numeric_exp)

Возвращает индикатор знака (отрицательный, положительный или нулевой) числа, определенного аргументом numeric_exp.

Если значение numeric_exp меньше нуля, возвращается -1. Если значение numeric_exp равно нулю, возвращается 0. Если значение numeric_exp больше нуля, возвращается 1.

SIN (float_exp)

Возвращает синус значения float_exp, где float_exp - угол, выраженный в радианах.

TAN (float_exp)

Возвращает тангенс значения float_exp, где float_exp - угол, выраженный в радианах.

TRUNCATE (numeric_exp, integer_exp)

Возвращает значение numeric_exp, округленное до количества знаков справа от десятичной точки, определенного аргументом integer_exp. Если значение integer_exp отрицательное, значение numeric_exp округляется до |integer_exp| знаков слева от десятичной запятой.

Строковые функции

Строковые функции выполняют операции со строковыми значениями (текстовыми символами).

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

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

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

Строковые функции, перечисленные здесь, базируются на 1; то есть, первым символом в строке является символ 1.

CHAR_LENGTH (string_exp)

Возвращает длину строкового выражения в символах.

CONCAT (string_exp1, string_exp2)

Возвращает символьную строку, являющуюся результатом присоединения текста из string_exp2 к тексту из string_exp1.

LOWER (string_exp)

Возвращает строку, идентичную строке аргумента string_exp, в которой все символы верхнего регистра изменены на символы нижнего регистра.

POSITION (character_exp IN character_exp)

Возвращает место первого символьного выражения во втором символьном выражении. Результат – число с точностью, определяемой реализацией и коэффициентом кратности 0.

SUBSTRING (string_exp FROM start FOR length)

Возвращает символьную строку, извлекаемую из текста, представленного аргументом string_exp, начиная с позиции символа, определенной аргументом start, и продолжая в количестве символов, определенном аргументом length.

TRIM (BOTH | LEADING | TRAILING trim_character FROM string_exp)

Возвращает текст, определенный аргументом string_exp укороченный на количество символов, указанное в аргументе trim_character, с начала, с конца или с обоих концов строки.

UPPER (string_exp)

Возвращает строку, идентичную строке аргумента string_exp, в которой все символы нижнего регистра изменены на символы верхнего регистра.

Функции агрегирования

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

AVG

Вычисляет среднее всех значений в наборе. Пустые (null) значения не учитываются.

COUNT(*), COUNT(expression)

COUNT(*) возвращает число записей в таблице. Пустые (null) значения учитываются. COUNT(expression) возвращает число значений в данном выражении. Пустые (null) значения не учитываются.

MAX

Возвращает максимальное значение в наборе. Пустые (null) значения не учитываются.

MIN

Возвращает минимальное значение в наборе. Пустые (null) значения не учитываются.

STDDEV, STDDEV_SAMP

Возвращает выборочное стандартное отклонение выражения.

STDDEV_POP

Возвращает стандартное отклонение совокупности выражения.

SUM

Добавляет значения в набор и возвращает результирующую сумму. Пустые (null) значения не учитываются.

VAR, VAR_SAMP

Возвращает выборочный разброс выражения.

VAR_POP

Возвращает общий разброс выражения.

COALESCE

Функция COALESCE возвращает в своих аргументах первое непустое значение поля.

SELECT Name, COALESCE(Business_Phone, Cell_Phone, Home_Phone)
Contact_Phone
 FROM Contact_Info

Ниже приведен пример записей из таблицы Contact_Phone в базе геоданных:

ИмяBusiness_PhoneCell_PhoneHome_Phone

Jeff

531-2531

622-7813

565-9901

Laura

NULL

772-5588

312-4088

Peter

NULL

NULL

594-7477

Включение функции COALESCE в выражение приводит к следующему выводу:

ИмяContact_Phone

Jeff

531-2531

Laura

772-5588

Peter

594-7477

NULLIF

Функция NULLIF возвращает значение NULL в том случае, если два представленных параметра равны; иначе, возвращается значение первого параметра.

SELECT Location, NULLIF(Sales, Forecast) AS Results
 FROM StoreSales

Ниже приведен пример значений полей Местоположение, Продажи и Прогноз таблицы StoreSales:

МестоположениеПродажиПрогноз

Редландс

39000

55000

Палм-Спрингс

60000

61000

Риверсайд

40000

40000

Выполнение выражения с функцией NULLIF в таблице StoreSales возвращает следующие результаты:

МестоположениеРезультаты

Редландс

39000

Палм-Спрингс

60000

Риверсайд

NULL

Условия

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

GROUP BY

Условие GROUP BY используется для сбора данных из нескольких записей и группировки результатов по одному или нескольким столбцам.

Следующее выражение суммирует (добавляет) все значения в поле POP1990 в таблице округов и группирует значения по штату. Значения также возвращаются в возрастающем алфавитном порядке по названию штата.

SELECT state_name, SUM(POP1990) AS TotalPopulation
 FROM counties
 GROUP BY STATE_NAME
 ORDER BY STATE_NAME

Условия GROUP BY могут включать в себя функции агрегирования такие, как MIN, MAX и SUM.

HAVING

Используйте условие HAVING с функцией агрегирования вместо условия WHERE.

В следующем примере функция агрегирования MAX используется для возврата самой высокой зарплаты, хранящейся в таблице сотрудников. Условие HAVING ограничивает значение до максимального значения ниже 50000.

SELECT department, MAX(salary) AS Highest_salary
 FROM employees
 GROUP BY department HAVING MAX(salary) < 50000

Условия JOIN

Условия JOIN возвращают объединенные записи из двух или более таблиц.

CROSS JOIN

В следующем примере возвращается каждая строка в таблице table1, совпадающая с каждой строкой в таблице table2, и каждая строка в таблице table2, совпадающая с каждой строкой в таблице table1. Если таблица table1 содержит 100 строк, а таблица table2 — 1000 строк, будет возвращено 100000 строк. Этот тип соединения следует использовать осторожно, так как количество возвращаемых строк быстро увеличивается.

SELECT Table1.name, Table1.Address, Table2.name, Table2.Salary
 FROM Table1
  CROSS JOIN Table2

INNER JOIN

Следующее выражение возвращает строки из обеих таблиц, если значения ключей (Table1.C1, Table2.C3) совпадают. Никакие другие строки не будут возвращены ни из одной таблицы.

SELECT Table1.C1, Table1.C2, Table2.C3, Table2.C4
 FROM Table1
  INNER JOIN Table2 ON Table1.C1 = Table2.C3

LEFT OUTER JOIN

Следующее выражение возвращает все строки из левой таблицы (Table1) и только строки из правой таблицы (Table2), если значения ключей совпадают (Table1.C1, Table2.C3).

SELECT Table1.C1, Table1.C2, Table2.C3, Table2.C4
 FROM Table1
  LEFT OUTER JOIN Table2 ON Table1.C1 = Table2.C3

RIGHT OUTER JOIN

Следующее выражение возвращает все строки из правой таблицы (Table2) и только те строки из левой таблицы (Table1), для которых значения ключей совпадают (Table1.C1, Table2.C3).

SELECT * FROM Table1
 RIGHT OUTER JOIN Table2 ON Table1.C1 = Table2.C3

ORDER BY

Условие ORDER BY определяет порядок сортировки. Порядок может быть по возрастанию (ASC) или по убыванию (DESC). По умолчанию значения сортируются по возрастанию.

Вы также можете указать параметры сортировки при использовании условия ORDER BY. Аргументы типа сопоставления включают следующее:

  • BINARY(BIN) - Двоичная сортировка учитывает регистр и диакритические знаки. При использовании этого аргумента сопоставления, строчные буквы сортируются раньше своих версий в верхнем регистре при сортировке в возрастающем алфавитном порядке, а диакритические знаки сортируются раньше букв при сортировке в возрастающем алфавитном порядке. Вы можете задать либо BINARY, либо BIN в запросе.
  • CASESENSITIVE(CASE) - сортировка с учетом регистра различает буквы верхнего и нижнего регистров. Когда вы используете этот аргумент сопоставления, строчные буквы сортируются раньше своих версий в верхнем регистре. Вы можете задать либо CASESENSITIVE, либо CASE в запросе.
  • NOCASESENSITIVE(NOCASE) - аргумент NOCASE не различает буквы верхнего и нижнего регистра, что обозначает факт игнорирования регистра при порядке сортировки. Вы можете задать либо NOCASESENSITIVE, либо NOCASE в запросе.

Примечание:

Вы не можете использовать условие ORDER BY при определении представления.

Ниже приведены примеры использования условия ORDER BY:

Значения будут возвращены в возрастающем алфавитном порядке по названию штата.

SELECT STATE_NAME, POP1990
 FROM counties
 ORDER BY STATE_NAME

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

SELECT STATE_NAME, POP1990
 FROM counties
 ORDER BY STATE_NAME
 COLLATE CASE DESC

Операторы

Приведенные ниже операторы поддерживаются файловыми базами геоданных

Арифметические операторы

Используйте арифметический оператор для сложения, вычитания, умножения и деления числовых значений.

*

Арифметический оператор умножения

/

Арифметический оператор деления

+

Арифметический оператор сложения

-

Арифметический оператор вычитания

SIMILAR TO

SIMILAR TO оператор сравнения, который оценивает строковые значения и возвращает true или false.

Следующий пример запроса оценивает значения в поле state_name и возвращает true, если слово North появляется в начале любого значения в этом поле, или возвращает false, если ни одно значение в поле state_name не начинается со слова North.

SELECT state_name
 FROM counties
 WHERE state_name SIMILAR TO 'North%'
Примечание:

Значения, начинающиеся со слова north (с маленькой буквы n), будут возвращены false для приведенного выше примера, поскольку сравнение строк чувствительно к регистру.