クエリ式の構築
クエリ式は、ArcGIS でフィーチャとテーブル レコードのサブセットを選択するために使用されます。ArcGIS におけるクエリ式は、標準 SQL 式に準拠します。たとえば、[属性検索] ツールを使用するか、[検索条件設定] ダイアログ ボックスを用いてこの構文を使用し、レイヤのフィルタ設定を設定します。
このトピックでは、基本的な WHERE 句の条件式の作成方法について説明するので、SQL への準備を整えるのに役立ちます。詳細については、「ArcGIS で使用されるクエリ式への SQL リファレンス」をご参照ください。
簡単な SQL 式
SQL 式の最初の部分である SELECT * FROM は、すでに自動的に入力されています。
クエリ式は、Select * From <Layer or dataset> Where 句に続く一般的な形式(たとえば、 SELECT * FROM <Layer_name> WHERE に続く SQL 式の一部)を使用します。
次に、ArcGIS のクエリ式の一般的な形式を示します。
<Field_name> <Operator> <Value or String>
複合クエリには、次の形式が使用されます。
<Field_name> <Operator> <Value or String> <Connector> <Field_name> <Operator> <Value or String> ...
必要に応じて、括弧 () を使用し、複合クエリにおける操作の順序を定義することができます。
列全体を選択することになるので、対応テーブルの列の一部だけを返すように SELECT を制限することはできません。これは、「SELECT *」構文がハード コーディングされているためです。このような理由から、DISTINCT、ORDER BY、GROUP BY などのキーワードは、サブクエリを使用する場合を除き、ArcGIS の SQL クエリでは使用することができません。サブクエリに関する詳細については、「ArcGIS で使用されるクエリ式への SQL リファレンス」をご参照ください。
クエリ式を構築する ArcGIS のダイアログ ボックスでは、ほとんどの場合レイヤまたはテーブルの名前が提供されます(ドロップダウン リストから選択します)。たとえば、
式の次の部分は WHERE 句であり、この部分は明示的に入力する必要があります。基本的な SQL WHERE 句は次のようになります。
STATE_NAME = 'Alabama'
これにより、TODOFUKEN_NAME フィールドに「東京」が含まれているフィーチャが選択されます。
SQL 構文
使用する SQL 構文は、データ ソースによって異なります。各 DBMS には、独自の SQL 言語があります。
ファイル ジオデータベース、カバレッジ、シェープファイル、INFO テーブル、dBASE テーブル、CAD データ、VPF データなどのファイルベースのデータを検索するには、SQL の機能のサブセットをサポートする ArcGIS の SQL 言語を使用します。パーソナル ジオデータベースを検索するには、Microsoft Access 構文を使用します。ArcSDE ジオデータベースを検索するには、DBMS(Oracle、SQL Server、DB2、Informix、または PostgreSQL)の SQL 構文を使用します。
SQL ステートメントの WHERE 句を作成する ArcGIS ダイアログ ボックスによって、検索するデータベースに対する正しい構文を使用することができます。適切な区切り文字を使用して、適切なフィールド名と値を一覧表示します。このダイアログ ボックスでは、関連する SQL キーワードと演算子も自動的に選択されます。
文字列の検索
検索文字列は、次のように常に単一引用符(')で囲む必要があります。たとえば、
"STATE_NAME" = 'California'
パーソナル ジオデータベースのフィーチャクラスとテーブルを検索する場合を除き、式の文字列では大文字と小文字が区別されます。他のデータ形式で大文字と小文字を区別せずに検索するには、SQL 関数を使用して、すべての値を大文字または小文字に変換することができます。ファイル ジオデータベースやシェープファイルなどのファイルベースのデータ ソースでは、UPPER 関数または LOWER 関数のいずれかを使用します。
たとえば、次の条件式では、姓が「Yamada」または「YAMADA」として格納されている顧客を選択します。
UPPER("LAST_NAME") = 'JONES'
その他のデータ ソースでも、同様の関数が使用されます。たとえば、パーソナル ジオデータベースには、同じような機能を実行する UCASE および LCASE という名前の関数があります。
部分文字列検索を行うには、= 演算子の代わりに LIKE 演算子を使用します。たとえば、次の条件式は、都道府県名から山口県、山形県、山梨県を選択します。
"STATE_NAME" LIKE 'Miss%'
% は、その位置にあるすべてとマッチすることを意味します(1 文字、100 文字、0 文字など)。1 文字を表すワイルドカードを検索に使用したい場合は、アンダースコア(_)を使用します。
たとえば、次の条件式では富山県と岡山県が検索されます。
"OWNER_NAME" LIKE '_atherine smith'
このワイルドカードは、すべてのファイルベースのデータまたは ArcSDE ジオデータベースに対応します。パーソナル ジオデータベースを検索するために使用するワイルドカードは、任意数の文字に対するアスタリスク(*)と、1 文字に対する疑問符(?)です。
ワイルドカード文字は、[属性検索] および [検索条件設定] ダイアログ ボックスでボタンとして表示されます。これらのボタンをクリックすると、作成中の式にワイルドカードを入力することができます。検索対象のレイヤまたはテーブルのデータ ソースに対して適切なワイルドカード文字だけが表示されます。
文字列の中でワイルドカード文字を使用し、= 演算子を使用している場合、その文字はワイルドカードではなく、文字列の一部として扱われます。
文字列値をソート順序に基づいて選択する場合は、大なり(>)、小なり(<)、以上(>=)、以下(<=)、BETWEEN の各演算子を使用することができます。たとえば、次の条件式では、M から Z までの文字で始まる名前を持つカバレッジ内のすべての都市を選択します。
"CITY_NAME" >= 'M'
文字列の検索には、不等号(<>)演算子を使用することもできます。
NULL キーワード
NULL キーワードを使用して、指定したフィールドに NULL 値が設定されたフィーチャおよびレコードを選択することができます。NULL キーワードの前には、必ず「IS」または「IS NOT」が付きます。
たとえば、1996 年の人口が未入力になっている都市を見つけるには、次のようなクエリを使用することができます。
"POPULATION96" IS NULL
1996 年の人口が入力されている都市を見つけるには、次のようなクエリを使用することができます。
"POPULATION96" IS NOT NULL
数値の検索
数値の検索には、等号(=)、不等号(<>)、大なり(>)、小なり(<)、以上(>=)、以下(<=)、BETWEEN の各演算子を使用することができます。
以下に例を示します。
"POPULATION96" >= 5000
数値の表示には、地域のオプションの設定にかかわらず、常に区切り文字として小数点が使用されます。条件式では、小数点または千単位の区切り文字としてカンマ(,)を使用することはできません。
演算
条件式には、算術演算子(+、-、*、および /)を使用した演算を含めることができます。
演算は、フィールドと数値の間で行うことができます。
たとえば、
"AREA" >= "PERIMETER" * 100
演算は、フィールド間で行うこともできます。
たとえば、人口密度が 1 平方キロメートルあたり 25 人以下の郡を探すには、次の条件式を使用します。
"POP1990" / "AREA" <= 25
演算子の優先順位
条件式は、標準演算子の優先順位ルールに従って評価されます。たとえば、括弧で囲まれた部分の式は、括弧の外側の部分よりも先に評価されます。
たとえば、
"HOUSEHOLDS" > "MALES" * "POP90_SQMI" + "AREA"
は、次の式とは異なると評価されます
"HOUSEHOLDS" > "MALES" * ("POP90_SQMI" + "AREA")
条件式を括弧で囲むには、クリックして括弧を追加してからその中に条件式を入力するか、括弧で囲みたい既存の条件式をハイライト表示してから、() ボタン をクリックします。
条件式の結合
AND および OR 演算子を使って式を結合すると、複雑な条件式を作成することができます。
たとえば、次の条件式は、敷地面積が 200 平方メートル以上で車 2 台分以上の車庫を持つすべての家を選択します。
"AREA" > 1500 AND "GARAGE" > 3
OR 演算子を使用する場合は、OR 演算子で区切られた 2 つの式のうち少なくとも 1 つの式が、選択対象レコードに対して真である必要があります。
たとえば、
"RAINFALL" < 20 OR "SLOPE" > 35
式の先頭で NOT 演算子を使用すると、指定された式と一致しないフィーチャまたはレコードが検索されます。
たとえば、
NOT "STATE_NAME" = 'Colorado'
NOT 式を結合するには、AND および OR を使用します。
たとえば、次の条件式は、金沢市を除くすべての石川県の市区町村を選択します。
"SUB_REGION" = 'New England' AND NOT "STATE_NAME" = 'Maine'
サブクエリ
サブクエリは、別のクエリにネストされたクエリであり、ジオデータベース データ ソースでのみサポートされます。サブクエリは、述語または集約関数を適用したり、別のテーブルに保存された値とデータを比較したりするために使用できます。たとえば、次のクエリは、indep_countries テーブルに含まれていない国という条件を付け足します。
"COUNTRY_NAME" NOT IN (SELECT "COUNTRY_NAME" FROM indep_countries)
詳細については、「ArcGIS で使用されるクエリ式への SQL リファレンス」をご参照ください。
日付の検索
SQL ステートメントの WHERE 句を作成する ArcGIS ダイアログ ボックスによって、検索するデータベースに対する正しいデータ構文を使用することができます。ほとんどの場合は、フィールドと演算子をクリックし、値をクリックするだけで、正しい構文が生成されます。