サブクエリーってどういうもの?~サブクエリーの使い方と設定方法~

はじめに

いつも弊社のブログを読んでいただき、ありがとうございます。
また弊社のBIツール「Excellent」「WebQuery」につきまして、日頃から多くのお客様にご利用いただいております。重ねて御礼申し上げます。

さて、今回は弊社BIツールの機能「サブクエリー」についてご紹介したいと思います。あまり馴染みのない機能かもしれませんが、さまざまな場面で利用できる機能ですので、ぜひぜひ読んでいただければ幸いです。

まず「サブクエリー」とは何か、から確認しましょう。

サブクエリーとは?

サブクエリーとは「副問い合わせ」とも呼ばれ、簡単に説明すると「SELCT文の中にSELECT文を埋め込み、抽出条件として利用すること」です。

SELECT文は「Excellent / WebQuery で作成できる1処理」とイメージしていただければ分かりやすいかと思います。1処理の結果を別の1処理で利用することができます。

具体的な例でご説明いたします。
テーブル「カテゴリマスタ」と「メニューマスタ」を使って 「カテゴリコード」が「02」か「03」に一致するデータを抽出する場合のSQL文を例にします。

【サブクエリーを利用しない場合】

【サブクエリーを利用した場合】

上記の【サブクエリーを利用しない場合】と【サブクエリーを利用した場合】のSQL実行結果は同一です。

「カテゴリマスタ」テーブルの「カテゴリコード」で「メニューマスタ」のデータを絞り込むことは同様ですが、サブクエリーを利用しない場合は「メニューマスタ」テーブルと内部結合(一致したデータのみを取得)しているのに対して
サブクエリーを利用した場合は「メニューマスタ」の抽出条件の値として設定しています。

SQL文自体を比較してみると、サブクエリーを利用した場合の方がシンプルで短いSQLとなります。

サブクエリーを利用する1つの効果として、結合条件を設定せずとも他のテーブルとの比較ができる、ということが挙げられます。結合条件の設定をおこなう手間を省くことができ、より簡単な操作で多くのテーブルとの値比較ができるようになります。

WebQueryではサブクエリーを1つのタブで作成するため、 後から処理を確認する際に、そのタブを見ればどのテーブルとどのテーブルを比較しているのかがわかりやすいというメリットもあります。

サブクエリーを利用した場合ならではの抽出条件もあり、その条件を設定することで比較の幅をさらに広げることができます。

次の項目で、WebQueryを使ったサブクエリーを設定方法と処理の実行結果をみてみましょう。

サブクエリーの設定方法

今回は「売上情報」テーブルから売上金額で絞り込みをかけたメニュー一覧を取得します。
データの絞り込みには「売上情報_2018年1月」テーブルを使用し、2018年1月の売上金額の最大値以上のデータを抽出します。

また、今回は比較値がサブクエリーの場合のみ使用できる条件値「最大値以上(>=ALL)」を使用します。

設定の大まかな流れは、以下のようになります

  1. 結果として表示されるフィールドを選択 ※[タブ1]
  2. サブクエリー(条件値を取得するための処理)を作成する ※[タブ2]
  3. 抽出条件にサブクエリーを設定する ※[タブ1]に対して[タブ2]を設定

【設定手順】

1. 結果として表示されるフィールドを選択

1-1. 「新規設定1」のタブで、[テーブル&フィールド]一覧から「売上情報」テーブルのフィールド「メニュー名」「売り上げ金額」「単価」を選択しメインの処理を作成します

2. サブクエリー(条件値を取得するための処理)を作成する

2-1. サブクエリー用の新規タブを作成します
「+新規」をクリックしタブを追加、タブ名を「サブクエリ」とします

2-2. [テーブル&フィールド]一覧からフィールドを選択します
「売上情報_2018年1月」テーブルの「売上情報」フィールドを選択します

3. 抽出条件にサブクエリーを設定する

3-1. タブ「新規設定1」を選択して、画面を切り替えます

3-2. 抽出条件画面を表示して【条件】を設定します

3-3. 【条件】で「最大値以上(>=ALL)」を選択します

3-4. 【値1】を設定するため【値オプション】の[サブクエリー]ボタンをクリックし、表示されるリストから「サブクエリ」を選択します
 ※リストにはタブ名が表示されます

3-5. フィールドを選択し[設定]ボタンをクリックします
【抽出条件】のリストに設定内容が表示されます

設定は以上となります。
「新規設定1」タブの実行結果は次のようになります。

これで2018年1月の最大値以上の売り上げを出したメニューの結果を取得することができました。

おわりに

今回使用した条件値である最大値以上(<=ALL)はサブクエリーを利用した際にしか使用できない条件値です。このほかにも最小値よりも小さい(<ALL)や、結果がある(EXISTS)など、サブクエリーでしか使用できない条件値は多くあります。

このブログを読んで、少しでもサブクエリーへの理解が深まり、業務にご活用いただければ幸いです。もっと知りたい、もっと詳しく説明して欲しいとのことがあれば、弊社HPよりご連絡ください。

最後までお読みいただきありがとうございました。よろしければ、以下の記事もお読みいただけると幸いです。

タイトル画像

SQLの構文解析

2019年3月25日

グループ条件ってどうやって使うの? ~グループ条件設定の意味と使用方法~

2021年8月27日