Можно использовать 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_Phone | Cell_Phone | Home_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 для приведенного выше примера, поскольку сравнение строк чувствительно к регистру.