SQL クエリを使用して、ファイル ジオデータベースにアクセスし、ファイル ジオデータベース内のデータを解析することができます。
以下のセクションでは、ファイル ジオデータベースでのテーブル、フィーチャクラス、およびビューのクエリに使用できる SQL 式、関数、演算子、キーワード、句の説明と例を示します。
エイリアス
AS キーワードを使用すると、SQL クエリで返されるフィールド名、テーブル名、または値のエイリアスを指定できます。 これにより、よりわかりやすい出力が提供されます。
以下に示す AS キーワードの使用例では、POP1997 列の値から POP1990 列の値を減算した結果が PopChange というエイリアスで返されます。
SELECT COUNTY_NAME, POP1997 - POP1990 AS PopChange
FROM counties
ORDER BY COUNTY_NAME
CASE 式
CASE 式では、指定された条件付きのリストを評価し、それらの式に基づく結果を返します。
以下のステートメントには、給与の値に応じて low、average、high のいずれかの単語を返す 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 引数で示される値の 10 を底とする対数を返します。 |
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 引数で示される値の符号 (負、正、0) のインジケーターを返します。 numeric_exp 値が 0 よりも小さい場合、-1 が返されます。 numeric_exp 値が 0 の場合、0 が返されます。 numeric_exp 値が 0 より大きい場合、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) | 第 2 文字式に含まれている第 1 文字式の位置を返します。 この結果は、精度とスケールを持つ厳密な数値であり、精度は実装定義、スケールは 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 関数は、引数の中から最初の NULL 以外のフィールドを返します。
SELECT Name, COALESCE(Business_Phone, Cell_Phone, Home_Phone)
Contact_Phone
FROM Contact_Info
以下に、ジオデータベースの Contact_Phone テーブルのレコードのサンプルを示します。
Name | 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 関数を含めると、次のような出力になります。
Name | Contact_Phone |
---|---|
Jeff | 531-2531 |
Laura | 772-5588 |
Peter | 594-7477 |
NULLIF
NULLIF 関数は、指定された 2 つのパラメーターが等しい場合は NULL を返し、そうでない場合は最初のパラメーターの値を返します。
SELECT Location, NULLIF(Sales, Forecast) AS Results
FROM StoreSales
以下に、StoreSales テーブルの location、sales、forecast フィールドの値の例を示します。
Location | Sales | Forecast |
---|---|---|
Redlands | 39000 | 55000 |
Palm Springs | 60000 | 61000 |
Riverside | 40000 | 40000 |
StoreSales テーブルで NULLIF 関数を含む式を実行すると、次のような結果が返されます。
Location | Results |
---|---|
Redlands | 39000 |
Palm Springs | 60000 |
Riverside | NULL |
句
句は、クエリ式の結果を制限、順序付け、または修正するフィルターとして機能します。
GROUP BY
GROUP BY 句は複数のレコードのデータを収集し、1 つ以上の列ごとに結果をグループ化するために使用します。
以下のステートメントは、counties テーブルの 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 集約関数を使用し、employees テーブルに格納された給与の最高額を返します。 HAVING 句は、その値を 50000 以下の最大値に制限します。
SELECT department, MAX(salary) AS Highest_salary
FROM employees
GROUP BY department HAVING MAX(salary) < 50000
JOIN 句
JOIN 句は、2 つ以上のテーブルから結合されたレコードを返します。
CROSS JOIN
以下の例では、テーブル 1 のすべての行をテーブル 2 のすべての行と一致し、テーブル 2 のすべての行をテーブル 1 のすべての行と一致したものを返します。 テーブル 1 が 100 行であり、テーブル 2 が 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.C1、Table2.C3) が一致する場合、左のテーブル (テーブル 1) からすべての行を返し、右のテーブル (テーブル 2) からは行だけを返します。
SELECT Table1.C1, Table1.C2, Table2.C3, Table2.C4
FROM Table1
LEFT OUTER JOIN Table2 ON Table1.C1 = Table2.C3
RIGHT OUTER JOIN
以下のステートメントは、キー値 (Table1.C1、Table2.C3) が一致する場合、右のテーブル (テーブル 2) からすべての行を返し、左のテーブル (テーブル 1) からは行だけを返します。
SELECT * FROM Table1
RIGHT OUTER JOIN Table2 ON Table1.C1 = Table2.C3
ORDER BY
ORDER BY 句はソート順を指定します。 順序は昇順 (ASC) または降順 (DESC) です。 デフォルトでは、値は昇順で並べられます。
ORDER BY 句を使用すると、照合順序も指定できます。 照合タイプの引数には、次のようなものがあります。
- BINARY(BIN) - Binary 照合では、大文字小文字とアクセントの両方が区別されます。 この照合引数を使用すると、昇順でソートする場合は小文字は大文字よりも先に並べられ、アクセント記号は文字よりも先に並べられます。 クエリで BINARY または BIN を指定できます。
- CASESENSITIVE(CASE) - CASESENSITIVE 照合では、大文字と小文字が区別されます。 この照合引数を使用すると、小文字は大文字よりも先にソートされます。 クエリで 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 フィールドの値を評価し、フィールド内の値の先頭に North という単語がある場合は true を返し、state_name フィールドに North という単語で始まる値がない場合は false を返します。
SELECT state_name
FROM counties
WHERE state_name SIMILAR TO 'North%'
注意:
文字列の比較は大文字と小文字が区別されるため、上記の例で north (小文字の n) で始まる値は false を返します。