構造化クエリ言語 (SQL) は、属性、演算子、計算からなる 1 つ以上の基準を定義するための強力な言語です。たとえば、顧客データのテーブルがあり、去年 50,000 ドル以上の買い物をし、職業がレストラン経営に分類される顧客を検索したいとします。この場合には、次の式で顧客を選択することができます。"Sales > 50000 AND Business_type = 'Restaurant'"
Update カーソルまたは Search カーソルに対してクエリを指定すると、そのクエリの条件を満たすレコードのみが返されます。SQL クエリは、SQL SELECT ステートメントを使って SQL データベース内のテーブルに対して実行できる、単一テーブル クエリのサブセットを表します。WHERE 句を指定するための構文は、データを保持している基礎のデータベースの構文と同じです。
次の例では、Search カーソルの行をフィルターに掛けて、特定の道路クラスの道路のみに対象を絞り込みます。
import arcpy
fc = "D:/St_Johns/data.gdb/roads"
# Create a search cursor using an SQL expression
#
cursor = arcpy.da.SearchCursor(fc, ("roadclass", "name"), """"roadclass" = 2""")
for row in cursor:
# Print the name of the residential road
#
print(row[1])
SQL 式での AddFieldDelimiters の使用
SQL 式で使用されるフィールド区切り文字は、クエリ対象のデータのフォーマットによって異なります。たとえば、ファイル ジオデータベースとシェープファイルは二重引用符 (" ") を使用し、パーソナル ジオデータベースは大括弧 ([ ]) を使用します。ArcSDE ジオデータベースはフィールド区切り文字を使用しません。AddFieldDelimiters 関数を使用すれば、どのフィールド区切り文字を使用するか推測で決める必要がなく、SQL 式で確実に正しい区切り文字が使用されるようになります。次の例では、前記の例を基にして、SQL 式に正しいフィールド区切り文字を追加しています。
import arcpy
fc = "D:/St_Johns/data.gdb/roads"
fieldname = "roadclass"
# Create field name with the proper delimiters
#
whereclause = """{} = 2""".format(arcpy.AddFieldDelimiters(fc, fieldname))
# Create a search cursor using an SQL expression
#
cursor = arcpy.da.SearchCursor(fc, ("roadclass", "name"), whereclause)
for row in cursor:
# Print the name of the residential road
print(row[1])