「SQL Server - WITH」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

ページの作成:「== 概要 == <code>WITH</code>句があるSQL文は、その後に記述されている<code>SELECT</code>文よりも先に実行される。<br> <code>WITH</code>句は…」
 
 
(同じ利用者による、間の2版が非表示)
9行目: 9行目:
<br>
<br>
以下の例は、<code>WITH</code>句を使用している。<br>
以下の例は、<code>WITH</code>句を使用している。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="tsql">
  WITH <変数1> as
  WITH <変数1> as
  (
  (
     SELECT <カラム名> FROM <テーブル名>
     SELECT <カラム名> FROM <テーブル名>
     WHERE <条件>
     WHERE <条件>
  )
  )
  SELECT <カラム名>
  SELECT <カラム名>
29行目: 29行目:
<br><br>
<br><br>


== WITH句を使用する ==
== WITH句を使用する場合 ==
下表に示すテーブルがある。<br>
下表に示すテーブルがある。<br>
<center>
<center>
64行目: 64行目:
  Name    Date    Sales
  Name    Date    Sales
  A        20210101 200
  A        20210101 200
<br>
<br><br>
 
== WITH句の値が複数の場合 ==
<code>WITH</code>句の値が複数でも指定できる。<br>
<code>WITH</code>句の値が複数でも指定できる。<br>
以下の例では、<code>WITH</code>句で複数の値を取得した後、8行目の<code>IN</code>句の条件にしている。<br>
以下の例では、<code>WITH</code>句で複数の値を取得した後、8行目の<code>IN</code>句の条件にしている。<br>
83行目: 85行目:
  B        20210102 150
  B        20210102 150
<br><br>
<br><br>
== WITH句を使用しない場合 ==
下表に示すテーブルがある。<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>
<code>FROM</code>句の箇所にある副問い合わせを使用して、レコードを抽出する。<br>
<syntaxhighlight lang="sql">
SELECT b.Name, b.Date, b.Sales
FROM
(
    SELECT AVG(Sales) AS SalesAverage FROM T_Sample
) a, T_Sample b
WHERE a.SalesAverage < b.Sales;
</syntaxhighlight>
<br>
4行目は、Salesカラムの平均を求める副問い合せであり、副問い合わせの結果をテーブル(ビュー)のように使用している。<br>
1つ目の<code>FROM</code>句の中に、SQL文が記述されているため、<code>WITH</code>句より可読性が落ちている。<br>
<br>
結果は、以下の通りである。<br>
Name    Date    Sales
A        20210101 200
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:SQL_Server]]
[[カテゴリ:SQL_Server]]

2024年11月26日 (火) 22:03時点における最新版

概要

WITH句があるSQL文は、その後に記述されているSELECT文よりも先に実行される。
WITH句は、共通テーブル式またはCTE(Common Table Expression)とも呼ばれる。

WITH句のメリットは、FROM句の箇所にあるSQL文が外に出るため、可読性が上がることである。

※注意
WITH句は、MySQLの古いバージョンでは未対応である。

以下の例は、WITH句を使用している。

 WITH <変数1> as
 (
    SELECT <カラム名> FROM <テーブル名>
    WHERE  <条件>
 )
 SELECT <カラム名>
 FROM <テーブル名>, <変数1>
 WHERE <条件>;


WITH句の後にある<変数1>は、SQL文で使用する変数である。
その後の括弧内にSQL文を記述する。

2つ目のFROM句の箇所に、WITH句の後にある<変数1>を指定している。

これにより、WITH句の後にあるSQL文をテーブル(ビュー)のように使用できる。
これは、FROM句の箇所に記述する副問い合わせと同様の意味となる。


WITH句を使用する場合

下表に示すテーブルがある。

T_Sampleテーブル
Name Date Sales
A 20210101 200
B 20210102 150
C 20210103 100


以下の例では、WITH句を使用してデータを抽出している。

 WITH T_Test as
 (
    SELECT AVG(Sales) AS SalesAverage FROM T_Sample
 )
 SELECT b.Name, b.Date, b.Sales
 FROM T_Test a, T_Sample b
 WHERE a.SalesAverage < b.Sales;


1行目は、WITH句の後のT_Testは、AS句の後にあるSQL文の名前である。
6行目は、1行目で定義したT_Testを、テーブル(ビュー)のように使用している。

結果は、以下の通りである。

Name     Date     Sales
A        20210101 200



WITH句の値が複数の場合

WITH句の値が複数でも指定できる。
以下の例では、WITH句で複数の値を取得した後、8行目のIN句の条件にしている。

 WITH T_Test as
 (
    SELECT Sales FROM T_Sample
    WHERE Sales > 100
 )
 SELECT b.Name, b.Date, b.Sales
 FROM T_Test a, T_Sample b
 WHERE b.Sales in (a.Sales);


結果は、以下の通りである。

Name     Date     Sales
A        20210101 200
B        20210102 150



WITH句を使用しない場合

下表に示すテーブルがある。

T_Sampleテーブル
Name Date Sales
A 20210101 200
B 20210102 150
C 20210103 100


FROM句の箇所にある副問い合わせを使用して、レコードを抽出する。

 SELECT b.Name, b.Date, b.Sales
 FROM
 (
    SELECT AVG(Sales) AS SalesAverage FROM T_Sample
 ) a, T_Sample b
 WHERE a.SalesAverage < b.Sales;


4行目は、Salesカラムの平均を求める副問い合せであり、副問い合わせの結果をテーブル(ビュー)のように使用している。
1つ目のFROM句の中に、SQL文が記述されているため、WITH句より可読性が落ちている。

結果は、以下の通りである。

Name     Date     Sales
A        20210101 200