この記事を読むのに必要な時間は約 5 分です。
このページではSQL文を書く上で上級者向けのテクニックです。
と言っても慣れてしまえばたいしたことはありません。大事な事は
という、その事実に気づくところです。
こういうのは普通だれも教えてくれないですからね。
select区で利用する副問い合わせ
スカラー(scalar)とは
聞きなれない言葉だとは思いますが、スカラーとは[単一]という意味を持ちます。SQLではSelect文で検索した結果が単一であるか、複数個の値を返すかによって書き方を意識しなければならない事があります。
今回紹介するスカラー副問い合わせは、検索結果が単一であることが担保されているときに限って使える、便利な書き方です。覚えておくと非常に有益です。
副問い合わせをwhere区ではなく、select区で利用する。
できるんですよ・・・
意外と知られていないのですが、できてしまいます。
以下、サンプルデータベースで実演してみます。
以前ダウンロードした AdventureWorksDW2016_EXT DBの以下2テーブルで試します。
- [DimOrganization] 組織テーブル
- [DimCurrency] 通貨テーブル
以下、組織テーブルですが、一番右側の[CurrencyKey]に対してスカラー副問い合わせを使ってみます。※赤点線枠
以下は副問い合わせ側になる通貨テーブルです。青点線枠の[CurrencyKey]を使ってぶつけてみます。
書き方は以下の通りです。
/****** SSMS の SelectTopNRows コマンドのスクリプト ******/ SELECT TOP (1000) [OrganizationKey] ,[ParentOrganizationKey] ,[PercentageOfOwnership] ,[OrganizationName] ,[CurrencyKey] ,(select C.[CurrencyAlternateKey] from [DimCurrency] C where C.[CurrencyKey]=O.[CurrencyKey]) FROM [DimOrganization] O
+++++++++++++++++++++
SELECT TOP (1000) [OrganizationKey]
,[ParentOrganizationKey]
,[PercentageOfOwnership]
,[OrganizationName]
,[CurrencyKey]
,(select C.[CurrencyAlternateKey] from [DimCurrency] C where C.[CurrencyKey]=O.[CurrencyKey])
FROM [DimOrganization] O
+++++++++++++++++++++
赤太字になっている部分がスカラーサブクエリ(スカラー副問い合わせ)です。
実行すると以下の通り表示されます。
緑点線枠で囲んだ部分がスカラーサブクエリで値を取得した結果となります。
通常はWhere 区で利用する副問い合わせですが、この様な形でSelect区でも利用可能です。Where 区でぶつけても同じ結果を取得する事はできますが、結果がスカラーである事が担保されている場合、個人的には此方の方が実行速度が速くなる場合が多いかなと思います。
また管理人はこの書き方を好評価しているのですが、可読性が高いです。長いSQL文を書く際は此方の書き方の方がすっきりみえるので、好みです。
[speech_bubble type=”drop” subtype=”L1″ icon=”02ukiyoe/tomi_R.png” name=”とみさん”]あら、私も好みだわ[/speech_bubble]