サブクエリ結果同士をLEFT JOINしてみる

本資料は、クエリ結果を別のクエリ結果とLEFT JOINするサンプル構文を以下に記します。
クエリ結果にNULLレコードを追加するLEFT JOINサンプルとなります。

動作確認環境

SELECT @@VERSION
Microsoft SQL Server 2019 (RTM-GDR) (KB5021125) - 15.0.2101.7 (X64)   Jan 23 2023 13:08:05   Copyright (C) 2019 Microsoft Corporation  Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19045: ) 

テストテーブルおよびテストデータ

以下のテストテーブルとテストデータで動作確認を行いました。

 CREATE TABLE m1  (   id int   ,ostype varchar(20)   ,live bit  )

 CREATE TABLE t1  (   id int   ,PCs int  )    INSERT INTO m1  VALUES   (1,'Symbian',0)  ,(2,'NeXTSTEP',0)  ,(3,'OS/2',0)  ,(4,'BeOS',0)  ,(5,'Windows',1)  ,(6,'macOS',1)  ,(7,'Linux',1)  ,(8,'iOS',1)  ,(9,'Android',1)  ,(10,'FreeBSD',1)    INSERT INTO t1  VALUES   (5,100)  ,(6,10)  ,(7,1)

サブクエリとサブクエリのLEFT JOIN

2つのテーブルをLEFT JOINする場合は以下のようになります。

テーブル同士をLEFT JOINした場合

以下、m1(マスタ)とt1を LEFT JOIN し場合のSQLとなります。

SELECT
	 m1.id
	,m1.ostype
	,t1.PCs
FROM
    m1
	LEFT JOIN t1 on m1.id = t1.id

実行結果

idostypePCs
1SymbianNULL
2NeXTSTEPNULL
3OS/2NULL
4BeOSNULL
5Windows100
6macOS10
7Linux1
8iOSNULL
9AndroidNULL
10FreeBSDNULL

両方のテーブルをクエリしLEFT JOIN する

上記のSQLのSQL の m1とt1部分をサブクエリにします。

SELECT
	 M.id
	,M.ostype
	,T.PCs
FROM
    (SELECT * FROM m1 WHERE live = 1) M
	LEFT JOIN 
		(SELECT * FROM t1 WHERE PCs >= 10) T
	ON M.id = T.id

m1とt2部分をサブクエリにし、MとTとして別名を設定しています。

実行結果

idostypePCs
5Windows100
6macOS10
7LinuxNULL
8iOSNULL
9AndroidNULL
10FreeBSDNULL

以上、サブクエリ同士をLEFT JOIN するサンプル記事でした。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS