QGISのフィルタ操作で使用する主な演算子の働きを、実行例を使って説明します。
フィルタ操作時に使用するクエリビルダウインドウの「演算子」パネルには、フィルタ操作で使用できる主な演算子が並んでいます。それらの解説です。
フィルタ操作とは? ベクタデータの地物を特定の条件で抽出する操作です。 フィルタ操作をするには? ベクタデータのレイヤ名を右クリックしてでてくるメニューにある「フィルタ」を選択します。 条件の設定方法は? 「フィルタ」を選択すると出現するクエリビルダウインドウでフィルタ式(条件式)を入力することで、フィルタ(抽出)する条件を設定できます。
フィルタ式(条件式)の基本的なルール
フィルタ式(条件式)は、フィールド名、演算子、属性値、数値など使用して作成します。
最も基本的な書き方のルールは、以下のとおりです。
"フィールド名" 演算子 '条件'
フィールド名は「ダブルクォーテーション(”)」で囲んで記載します。
条件部分は、文字列の場合は「シングルクォーテーション(’)」、数値の場合はそのまま記載します。
GeoPackage形式とShapeファイル形式で挙動が異なります。
以下は全てShapeファイル形式の挙動を基本とし、GeoPackage形式で異なる挙動をする場合は注釈で記載しています。
クエリビルダの演算子の効果一覧
架空のメッシュを使用して説明します。
このメッシュにはnameフィールドに「地名」、KEYフィールドに「連番」が記録されています。
各演算子を使って様々な条件でメッシュを抽出してみます。
=
条件と一致するデータを抽出します。
アルファベットの場合、大文字と小文字が区別されません。
<条件式の例1>
"name" = '中央通り'
nameフィールドの属性が「中央通り」であるデータを抽出する場合
<結果の例1>
「中央通り」
<条件式の例2>
"name" = 'AA町'
nameフィールドの属性が「AA町」であるデータを抽出する場合。大文字と小文字が区別されないので、「aa町」や「Aa町」も抽出される。
<結果の例2>
aa町、AA町など
※GeoPackage形式の場合は大文字と小文字が区別される ※GeoPackage形式の場合は「AA町」のみが抽出される
<条件式の例3>
"KEY" = 5
KEYフィールドの属性が「5」であるデータを抽出する場合。条件が数字の場合は、シングルクォーテーションで囲わず直接入力する。
<結果の例3>
「5」
LIKE
条件と部分一致するデータを抽出します。
条件部分にはワイルドカードを使用します。QGISで使用するワイルドカードは「%」と「_」があります。「%」は文字数問わず効果があり、「_」は文字数分入力する必要があります。
ワイルドカードの例 _町:あ町、A町 __町:ああ町、AA町 %町:あ町、ああ町、AAA町
<条件式の例1>
"name" LIKE '%町'
nameフィールドの属性値が「町」で終わるデータを抽出する場合。「町」の前は何文字でも良い。「%」は0文字以上を意味するため「町」で始まるデータも抽出される。
<結果の例1>
ああ町、あいう町、aa町など
<条件式の例2>
"name" LIKE '%町%'
nameフィールドの属性値の途中に「町」が入っているデータを抽出する場合。「町」の前後は何文字でも良い。「%」は0文字以上を意味するため「町」で終わるデータも抽出される。
<結果の例2>
A町1丁目、あああ町など
<条件式の例3>
"name" LIKE '_町'
nameフィールドの属性値が「町」で終わるデータを抽出する場合。アンダーバーが1つの場合は、「町」の前の文字が半角1文字のデータが抽出される。
<結果の例3>
A町、B町、a町
※GeoPackage形式の場合は半角、全角問わず1文字のみ ※GeoPackage形式の場合は「あ町」や「い町」なども抽出される
<条件式の例4>
"name" LIKE '__町'
nameフィールドの属性値が「町」で終わるデータを抽出する場合。アンダーバーが2つの場合は、「町」の前の文字が半角2文字のデータが抽出される。
<結果の例4>
aa町、AA町など
※GeoPackage形式の場合は半角、全角問わず2文字のみ ※GeoPackage形式の場合は「ああ町」や「いい町」なども抽出される
備考 Shapeファイルの場合、アンダーバーを3つ入れて初めて全角1文字がヒットします。
<条件式の例5>
"name" LIKE 'aa%'
nameフィールドの属性値が「aa」で始まるデータを抽出する場合。
<結果の例5>
aa町、aa丘、aaa町など
※GeoPackage形式の場合は大文字と小文字が区別されない ※GeoPackage形式の場合は「AA町」や「Aa町」なども抽出される
ILIKE
LIKEと同様に部分一致の条件で抽出します。LIKEと異なり大文字と小文字が区別されません。
<条件式の例>
"name" ILIKE 'aa%'
nameフィールドの属性値が「aa」で始まるデータを抽出する場合。大文字と小文字が区別されないので「AA」や「aA」で始まるデータも抽出される。
<結果の例>
Aa町、AA丘、AAA町など
※GeoPackage形式の場合はエラーが出て使用できない
IN
()内の属性値が含まれるデータを抽出します。大文字と小文字が区別されません。
<条件式の例>
"name" IN ('あ町','A町')
<結果の例>
あ町、A町、a町
nameフィールドの属性値が「あ町」か「A町」であるデータを抽出する場合。
※GeoPackage形式の場合は大文字と小文字が区別される ※GeoPackage形式の場合は「あ町」と「A町」のみが抽出される
NOT IN
()内の属性値以外が含まれるデータを抽出します。大文字と小文字が区別されません。
<条件式の例>
"name" NOT IN ('あ町','A町')
nameフィールドの属性値が「あ町」か「A町」ではないデータを抽出する場合。
<結果の例>
「あ町」、「A町」、「a町」以外の全て
※GeoPackage形式の場合は大文字と小文字が区別される ※GeoPackage形式の場合は「あ町」と「A町」以外が抽出される
AND
複数の条件式に一致するデータを抽出します。
<条件式の例>
"name" LIKE '%町%' AND "name" LIKE '%丁目'
nameフィールドの属性値のどこかに「町」が入っており、さらに「丁目」で終わるデータを抽出する場合。
<結果の例>
「A町1丁目」、「B町2丁目」など
OR
複数の条件式のうちどれかに一致するデータを抽出します。
<条件式の例>
"name" LIKE '%町%' OR "name" LIKE '%丁目'
nameフィールドの属性値のどこかに「町」が入っているか、もしくは「丁目」で終わっているデータを抽出する場合。
<結果の例>
「あ町」、「A丘2丁目」など
NOT
条件式に一致しないデータを抽出します。
<条件式の例>
NOT "name" LIKE '%町%'
nameフィールドの属性値に「町」が入っていないデータを抽出する場合。
<結果の例>
「中央通り」、「公園北」など
!=
等しくないデータを抽出します。
<条件式の例>
"name" != '中央通り'
nameフィールドの属性値が「中央通り」ではないデータを抽出する場合。
<結果の例>
「A町」、「A丘1丁目」、「公園通り」など地名が「中央通り」ではないすべてのメッシュ
<、>、<=、>=
数学記号そのままの意味です。
左から「より小さい」、「より大きい」、「以下」、「以上」を抽出します。
実行例は割愛します。