Cosmos DB (Core) のSQLクエリ

これは2019/05/15現在の備忘録であり、今後機能の改廃によって記述内容と一致しなくなる可能性があります。

Azure Cosmos DB 用の SQL 言語リファレンス
https://docs.microsoft.com/ja-jp/azure/cosmos-db/sql-api-query-reference
Azure Cosmos DB の SQL クエリの例
https://docs.microsoft.com/ja-jp/azure/cosmos-db/how-to-sql-query

このエントリで使うデータ

国内の空港のIATAコードや日本語および英語での略称を保持するようなデータベース(Domestic)を使います。具体的には、以下のようなデータが格納されています。idとしてIATAコードを使っています。

[
    ....
    {
        "id": "KMI",
        "ja": "宮崎",
        "en": "Miyazaki"
    },
    {
        "id": "FUJ",
        "ja": "五島福江",
        "en": "Goto Fukue"
    },
    {
        "id": "IKI",
        "ja": "壱岐",
        "en": "Iki"
    },
    {
        "id": "TSJ",
        "ja": "対馬",
        "en": "Tsushima"
    },
    {
        "id": "NGS",
        "ja": "長崎",
        "en": "Nagasaki"
    },
    {
        "id": "KMJ",
        "ja": "熊本",
        "en": "Kumamoto"
    },
    {
        "id": "OIT",
        "ja": "大分",
        "en": "Oita"
    },
    {
        "id": "HSG",
        "ja": "佐賀",
        "en": "Saga"
    },
    {
        "id": "KKJ",
        "ja": "北九州",
        "en": "Kitakyushu"
    },
    {
        "id": "FUK",
        "ja": "福岡",
        "en": "Fukuoka"
    },
    {
        "id": "KCZ",
        "ja": "高知",
        "en": "Kochi"
    },
    {
        "id": "MYJ",
        "ja": "松山",
        "en": "Matsuyama"
    },
    {
        "id": "TKS",
        "ja": "徳島",
        "en": "Tokushima"
    },
    ....
]

全件検索

これは単純にselect * from Airportsでよいですが、Cosmos DB内部で使う要素まで取得してしまうので、取得したい要素を明示したほうが扱いやすいです。また、要素はCase Sensitiveなので注意が必要です。

SELECT D.id, D.ja, D.en from Domestic D
[
    ....
    {
        "id": "KMI",
        "ja": "宮崎",
        "en": "Miyazaki"
    },
    {
        "id": "FUJ",
        "ja": "五島福江",
        "en": "Goto Fukue"
    },
    {
        "id": "IKI",
        "ja": "壱岐",
        "en": "Iki"
    },
    {
        "id": "TSJ",
        "ja": "対馬",
        "en": "Tsushima"
    },
    {
        "id": "NGS",
        "ja": "長崎",
        "en": "Nagasaki"
    },
    {
        "id": "KMJ",
        "ja": "熊本",
        "en": "Kumamoto"
    },
    {
        "id": "OIT",
        "ja": "大分",
        "en": "Oita"
    },
    {
        "id": "HSG",
        "ja": "佐賀",
        "en": "Saga"
    },
    {
        "id": "KKJ",
        "ja": "北九州",
        "en": "Kitakyushu"
    },
    {
        "id": "FUK",
        "ja": "福岡",
        "en": "Fukuoka"
    },
    {
        "id": "KCZ",
        "ja": "高知",
        "en": "Kochi"
    },
    {
        "id": "MYJ",
        "ja": "松山",
        "en": "Matsuyama"
    },
    {
        "id": "TKS",
        "ja": "徳島",
        "en": "Tokushima"
    },
    ....
]

条件指定(完全一致)

where xxx=yyy です。

SELECT D.id, D.ja, D.en from Domestic D where D.id = 'HND'
[
    {
        "id": "HND",
        "ja": "東京(羽田)",
        "en": "Tokyo (Haneda)"
    }
]

包含

where xxx like ‘%yyy%’ は使えません。where contains( xxx, yyy ) です。

SELECT D.id, D.ja, D.en from Domestic D where contains( D.id, 'D')
[
    {
        "id": "HKD",
        "ja": "函館",
        "en": "Hakodate"
    },
    {
        "id": "DNA",
        "ja": "嘉手納",
        "en": "Kadena"
    },
    {
        "id": "OKD",
        "ja": "札幌(丘珠)",
        "en": "Sapporo (Okadama)"
    },
    {
        "id": "HND",
        "ja": "東京(羽田)",
        "en": "Tokyo (Haneda)"
    },
    {
        "id": "SDJ",
        "ja": "仙台",
        "en": "Sendai"
    }
]

前方一致

where xxx like ‘yyy%’ は使えません。where startswith( xxx, yyy ) です。

SELECT D.id, D.ja, D.en from Domestic D where startswith( D.id, 'HN')
[
    {
        "id": "HNA",
        "ja": "花巻",
        "en": "Hanamaki"
    },
    {
        "id": "HND",
        "ja": "東京(羽田)",
        "en": "Tokyo (Haneda)"
    }
]

後方一致

同様に、where xxx like ‘%yyy’ は使えません。where endswith( xxx, yyy ) です。

SELECT D.id, D.ja, D.en from Domestic D where endswith( D.id, 'ND')
[
    {
        "id": "HND",
        "ja": "東京(羽田)",
        "en": "Tokyo (Haneda)"
    }
]

範囲指定

文字列値や数値の範囲指定はANSI SQLと同様、betweenを使います。

SELECT D.id, D.ja, D.en from Domestic D where SUBSTRING(D.id, 0, 1) between 'A' and 'D'
[
    {
        "id": "AOJ",
        "ja": "青森",
        "en": "Aomori"
    },
    {
        "id": "DNA",
        "ja": "嘉手納",
        "en": "Kadena"
    },
    {
        "id": "ASJ",
        "ja": "奄美",
        "en": "Amami"
    },
    {
        "id": "AXT",
        "ja": "秋田",
        "en": "Akita"
    },
    {
        "id": "AKJ",
        "ja": "旭川",
        "en": "Asahikawa"
    },
    {
        "id": "CTS",
        "ja": "札幌(千歳)",
        "en": "Sapporo (Chitose)"
    }
]

候補への合致

1個以上の選択肢に合致するものを抽出する場合は、ANSI SQLと同じくINを使います。

SELECT D.id, D.ja, D.en from Domestic D where D.id in ('HND', 'NRT', 'KOJ')
[
    {
        "id": "KOJ",
        "ja": "鹿児島",
        "en": "Kagoshima"
    },
    {
        "id": "NRT",
        "ja": "東京(成田)",
        "en": "Tokyo (Narita)"
    },
    {
        "id": "HND",
        "ja": "東京(羽田)",
        "en": "Tokyo (Haneda)"
    }
]

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中