Database SubQuery

SubQueryの基本的パターン

単一値 (スカラー)

subQuery で update

update 家計簿集計
  set 平均 = ( select AVG (出金額)
		from 家計簿アーカイブ
		where 出金額 > 0
		and 費目 = '食費')
where 費目 = '食費'

subQuery で select

select 日付, メモ, 出金額,
	(select 合計 from 家計簿集計
	  where 費目 = '食費') as 過去の合計額
from 家計簿アーカイブ
where 費目 = '食費'

複数値 (ベクター)

where In

select * from 家計簿集計
where 費目 IN (select Dictinct 費目 from 家計簿)

where Any/Akl

select * from 家計簿
where 費目 = '食費'
  AND 出金額 < ANY (SELECT 出金額 FROM 家計簿アーカイブ
    			WHERE 費目 = '食費')

subQuery に NULL を含んでいると結果も NULL になる

IS NOT NULL

SELECT * FROM 家計簿アーカイブ
 WHERE 費目 IN (SELECT 費目 FROM 家計簿
 		WHERE 費目 IS NOT NULL)

COALESCE

SELECT * FROM 家計簿アーカイブ
 WHERE 費目 IN (SELECT COALESCE( 費目, '不明') FROM 家計簿)

表 (マトリックス)

subQuery で FROM

SELECT SUM(SUB.出金額) AS 出勤合計
 FROM (
	SELECT 日付, 費目, 出金額
	  FROM 家計簿
	 UNION
	SELECT 日付, 費目, 出金額
	  FROM 家計簿アーカイブ
	WHERE 日付 >= '2018-01-01'
	       AND 日付 <= '2018-01-31'
 ) AS SUB

subQuery で INSERT

INSERT INTO 家計簿集計 (費目, 合計, 平均, 回数)
SELECT 費目、SUM(出金額), AVG(出金額), 0
  FROM 家計簿
WHERE 出金額 > 0
GROUP BY 費目

おっさんWEBエンジニア奮闘記©2007 WEBDIMENSION