MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
SQL Server - 副問い合わせ(サブクエリ)のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
SQL Server - 副問い合わせ(サブクエリ)
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == 副問い合わせ(サブクエリ)とは、<code>SELECT</code>文の結果を別のSQL文で使用することである。<br> 副問い合わせは、<code>INSERT</code>文、<code>UPDATE</code>文、<code>DELETE</code>文でも使用できる。<br> <br> 以下に、<code>SELECT</code>文の使用時の副問合せが記述できる箇所を示す。<br> * SELECT句に記述する副問合せ * FROM句に記述する副問合せ * WHERE句に記述する副問合せ * HAVING句に記述する副問合せ <br> ここでは、例で使用するテーブルを下表に示す。<br> <center> {| class="wikitable" style="background-color:#fefefe;" |+ T_Sampleテーブル |- ! style="background-color:#66CCFF;" | Name ! style="background-color:#66CCFF;" | Date ! style="background-color:#66CCFF;" | Sales |- | A || 20210101 || 200 |- | B || 20210102 || 150 |- | C || 20210103 || 100 |} </center> <br><br> == SELECT句にある副問合せ == <code>SELECT</code>句にある副問い合わせの例を示す。<br> <syntaxhighlight lang="sql"> SELECT Name, Date, Sales, Sales > (SELECT AVG(Sales) FROM T_Sample ) as AboveAverage FROM T_Sample; </syntaxhighlight> <br> 3行目は、<code>SELECT</code>句に売上の平均を求める副問い合わせである。<br> AboveAverageカラムには、売上の平均を超えている場合は1、それ以外の場合は0が代入される。<br> <br> 結果は、以下の通りである。<br> Name Date Sales AboveAverage A 20210101 200 1 A 20210102 150 0 B 20210103 100 0 <br><br> == FROM句にある副問い合わせ == <code>FROM</code>句にある副問い合わせの例を示す。<br> <syntaxhighlight lang="sql"> SELECT b.Name, b.Sales, b.Date FROM (SELECT AVG(Sales) as Sales_Average FROM T_Sample) a, T_Sample b WHERE a.Sales_Average < b.Sales; </syntaxhighlight> <br> 2行目は、<code>FROM</code>句にSalesカラムの平均を求める副問い合わせである。<br> 副問い合わせの結果をテーブルのように使用している。<br> <br> 結果は、以下の通りである。<br> Name Date Sales A 20210101 200 <br> また、<code>FROM</code>句にある副問い合わせのSQL文は、<code>WITH</code>句を使用して記述することもできる。<br> * WITH句の例 <br><br> == WHERE句にある副問い合わせ == <code>WHERE</code>句にある副問合せの例を示す。<br> <syntaxhighlight lang="sql"> SELECT * FFROM T_Sample WHERE Sales > (SELECT AVG(Sales) FROM T_Sample); </syntaxhighlight> <br> 2行目は、<code>WHERE</code>句に売上の平均を求める副問い合わせである。<br> 2行目の副問い合わせのSQL文を実行した後、1行目の主問い合わせのSQL文が実行される。<br> <br> 結果は、以下の通りである。<br> Name Data Sales A 20210101 200 <br> また、<code>WHERE</code>句に<code>EXISTS</code>句を接続することにより、相関副問い合わせを記述できる。<br> 相関副問い合わせは、主問い合わせのSQL文を実行した後、副問い合わせのSQL文を実行する。<br> * EXISTS句の例 (存在判定 / 相関副問い合わせ) * 相関副問い合わせ(相関サブクエリ)の例 <br><br> == HAVING句にある副問い合わせ == <code>HAVING</code>句にある副問い合わせの例である。<br> <syntaxhighlight lang="sql"> SELECT Name, MAX(Sales) FROM T_Sample GROUP BY Name HAVING MAX(Sales) > (SELECT AVG(Sales) FROM T_Sample); </syntaxhighlight> <br> 4行目は、<code>HAVING</code>句に売上の平均を求める副問い合わせである。<br> <br> 結果は、以下の通りである。<br> Name MAX(Sales) A 200 <br> <code>HAVING</code>句については、以下を参照すること。<br> * 複数の行をまとめる (集約関数 / GROUP BY / HAVING) <br><br> == 副問い合わせの結果が複数件の場合 == ここでは、例で使用するテーブルを下表に示す。<br> <center> {| class="wikitable" style="background-color:#fefefe;" |+ T_Sampleテーブル |- ! style="background-color:#66CCFF;" | Name ! style="background-color:#66CCFF;" | Date ! style="background-color:#66CCFF;" | Sales |- | A || 20210101 || 200 |- | B || 20210102 || 150 |- | C || 20210103 || 100 |} </center> <br> <center> {| class="wikitable" style="background-color:#fefefe;" |+ T_Companyテーブル |- ! style="background-color:#66CCFF;" | Company |- | A |- | D |} </center> <br> ==== IN句 ==== <code>IN</code>句は、副問い合わせの結果が複数件の場合に使用する。<br> <syntaxhighlight lang="sql"> SELECT * FROM T_Sample WHERE Sales IN (SELECT Company FROM T_Company); </syntaxhighlight> <br> 2行目の副問い合わせは、結果が複数件返るため(AとC)、条件はイコール(<code>=</code>)ではなく<code>IN</code>句を使用する。<br> <br> 結果は、以下の通りである。<br> Name Date Sales A 20210101 200 <br> ==== = ANY句 ==== <code>= ANY</code>句は、副問い合わせの結果が複数件の場合に使用する。<br> <syntaxhighlight lang="sql"> SELECT * FROM T_Sample WHERE Name = ANY (SELECT Company FROM T_Company); </syntaxhighlight> <br> 2行目の副問い合わせは、結果が複数件返るため(AとC)、条件はイコール(<code>=</code>)ではなく<code>= ANY</code>句を使用する。<br> <br> 結果は、以下の通りである。<br> Name Date Sales A 20210101 200 <br> <u>※注意</u><br> <u>MySQLでは、上記のSQL文の<code>= ANY</code>句は、<code>IN</code>句や<code>= SOME</code>句でも同様の結果となる。</u><br> <br> ==== NOT IN句 ==== <code>NOT IN</code>句は、副問い合わせの結果が複数件かつ否定を行う場合に使用する。<br> <syntaxhighlight lang="sql"> SELECT * FROM T_Sample WHERE Name NOT IN (SELECT Company FROM T_Company); </syntaxhighlight> <br> 2行目の副問い合わせは、結果が複数件返るため(AとC)、<code>NOT IN</code>句でAとD以外を抽出する。<br> <br> 結果は、以下の通りである。<br> Name Date Sales B 20210102 150 C 20210103 100 <br> ==== <> ALL句 ==== <code><> ALL</code>句は、副問い合わせの結果が複数件かつ否定を行う場合に使用する。<br> <syntaxhighlight lang="sql"> SELECT * FROM T_Sample WHERE Name <> ALL (SELECT Company FROM T_Company); </syntaxhighlight> <br> 2行目の副問合せは、結果が複数件返るため(AとC)、<code><> ALL</code>句でAとD以外を抽出する。<br> <br> 結果は、以下の通りである。<br> Name Date Sales B 20210102 150 C 20210103 100 <br><br> __FORCETOC__ [[カテゴリ:SQL_Server]]
SQL Server - 副問い合わせ(サブクエリ)
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse