文件地理数据库 SQL 参考

可使用 SQL 查询访问和分析文件地理数据库中的数据。

以下几节提供了可用于在文件地理数据库中查询表、要素类和视图的 SQL 表达式、函数、运算符、关键字和子句的说明和示例。

别名

可使用 AS 关键字指定字段名称的别名、表名称或 SQL 查询返回的值。 这将提供更容易理解的输出。

在下面使用 AS 关键字的示例中,将在别名 PopChange 下返回 POP1997 列中的值减去 POP1990 中的值得到的结果。

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 参数可以是下列任一关键字:YEARMONTHDAYHOURMINUTESECOND

CURRENT TIME

返回运行 SQL 查询的计算机操作系统提供的当前时间。

CURRENT_TIMESTAMP

返回运行 SQL 查询的计算机操作系统提供的当前时间和日期。

数值函数

数值函数用于对数值执行运算。 所有数值函数均返回数值型值。

numeric_expfloat_expinteger_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 参数表示的值的以 10 为底对数。

MOD (integer_exp1, integer_exp2)

integer_exp1 值除以 integer_exp2 值并返回余数。

POWER (numeric_exp, integer_exp)

返回 numeric_expinteger_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)

返回第一个字符表达式在第二个字符表达式中的位置。 结果是一个确切的数值,采用预先定义的精度且小数位数为零。

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

计算集合中所有值的平均值。 空值会被忽略。

COUNT(*)COUNT(expression)

COUNT(*) 返回表中的记录数。 包括空值。 COUNT(expression) 返回指定表达式的值数。 空值将被忽略。

MAX

返回集合中的最大值。 空值会被忽略。

MIN

返回集合中的最小值。 空值会被忽略。

STDDEVSTDDEV_SAMP

返回表达式的样本标准差。

STDDEV_POP

返回表达式的总体标准差。

SUM

将集合中的值相加并返回生成的总和。 空值会被忽略。

VARVAR_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 表 location、sales 和 forecast 字段中的值的示例:

位置销售预测

Redlands

39000

55000

Palm Springs

60000

61000

Riverside

40000

40000

在 StoreSales 表上运行包含 NULLIF 函数的表达式时,将返回以下结果:

位置结果

Redlands

39000

Palm Springs

60000

Riverside

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 子句可以包含 MINMAXSUM 等聚合函数。

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 包含 1,000 行,则将返回 100,000 行。 应谨慎使用此连接类型,因为返回的行数会迅速增加。

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) - 二进制排序规则区分大小写和重音。 如果使用此排序规则参数,则当以升序排序时,小写字母排在其大写字母版本前面,当以升序排序时,重音排在字母前面。 可以在查询中指定 BINARYBIN
  • CASESENSITIVE(CASE) - 区分大小写的排序规则区分大写和小写字母。 如果使用此排序规则参数,小写字母排在其大写字母版本前面。 可以在查询中指定 CASESENSITIVECASE
  • NOCASESENSITIVE(NOCASE) - NOCASE 参数不区分大写字母和小写字母,这意味着进行排序时不区分大小写。 可以在查询中指定 NOCASESENSITIVENOCASE

注:

无法在定义视图时使用 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 字段中的值,如果该字段中任何值的开头显示 North 一词,则返回 true;如果 state_name 字段中没有值以 North 一词开头,则返回 false

SELECT state_name
 FROM counties
 WHERE state_name SIMILAR TO 'North%'
注:

对于上述示例,如果值以 north 一词(字母 n 为小写),将返回 false,因为字符串比较区分大小写。