プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【SQL Server(連載)】WITH -40-

www.pon-x.jp

あけましておめでとうございます。今年もプログラ生活をよろしくお願いいたします。

さて、今年一発目はWITHの使い方です。

WITH

結構前に、サブクエリの話をしました。

www.pon-x.jp

WITHはこのようなサブクエリを可読性良く書けるのが特徴です。
早速書いてみよう。

上記の過去記事のSQLはこんなかんじでした。

SELECT * 
FROM 
    (
        SELECT 
            PersonType,
            COUNT(BusinessEntityID) AS CNT
        FROM Person.Person
        WHERE MiddleName IS NOT NULL
        GROUP BY PersonType
    ) TBL1
WHERE CNT > 100

これの出力はこんなかんじでした。
f:id:hanabusa-snow:20210101233922p:plain

これをWITHを使って書いてみます。

WITH TBL AS (SELECT 
            PersonType,
            COUNT(BusinessEntityID) AS CNT
        FROM Person.Person
        WHERE MiddleName IS NOT NULL
        GROUP BY PersonType )


SELECT * FROM TBL WHERE CNT > 100

こんなかんじです。
f:id:hanabusa-snow:20210101234618p:plain

サブクエリとしていた部分を分離しているようにかけているので、見やすくなりましたね。

複数定義することも可能です。
適当に、WITHで定義したテーブルを内部結合してみます。

WITH TBL1 AS (
        SELECT 
            *
        FROM Person.Person
        )
,TBL2 AS (
        SELECT * 
        FROM Person.Password
    )


SELECT * 
FROM TBL1 T1
    INNER JOIN TBL2 T2
        ON T1.BusinessEntityID = T2.BusinessEntityID

f:id:hanabusa-snow:20210101234643p:plain

こんなかんじに、可読性を考えてあげるとメンテナンスもしやすくなるので積極的に使っていきたいですね。