| MSDE FunClub |
|
最終更新日 : 2000/07/08 |
|
Microsoft Data Engine FunClub
|
Since 2000.07.08
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) |
|
【第2章124p 〜 125p掲載】 |
-- [SQL文の基礎(例題22)EX-22.SQL]
-- SQLServer7.0 Transact-SQL言語
-- 日本技術ソフト開発 堀川 明
-- http://www.horikawa.ne.jp/msde/
--
-- これから操作する既定のデータベースを MySampleTest にします
USE MySampleTest
GO
-- ( 件処理されました)の表示を抑制する
SET NOCOUNT ON
GO
-- 【考え方その1】
-- 受注明細表を最初に扱う考え
SELECT 受注明細.商品コード ,
(SELECT 商品名 FROM 商品
WHERE 商品コード = 受注明細.商品コード ) AS 商品名情報 ,
SUM(受注明細.数量) AS 受注総数
FROM 受注明細
GROUP BY 受注明細.商品コード
HAVING ( SUM(受注明細.数量) >= 2000 )
ORDER BY 受注明細.商品コード
-- 【考え方その2】
-- 商品表を最初に扱う考え
-- この例は、集計作業が2回行われるので良くない
-- クエリアナライザの実行プランで見てみましょう!!
SELECT 商品.商品コード , 商品.商品名 ,
(SELECT SUM(数量) FROM 受注明細
WHERE 商品コード = 商品.商品コード) AS 受注総数
FROM 商品
WHERE 商品.商品コード
IN (
SELECT 受注明細.商品コード FROM 受注明細
GROUP BY 受注明細.商品コード
HAVING ( SUM(受注明細.数量) >= 2000 )
)
GO
-- 【考え方その3】
-- FROM句とINNER JOINの応用
-- このSQL文は、考え方1に比べて、多少パフォーマンスがあがる
--
SELECT 商品.商品コード , 商品.商品名 , T.受注総数
FROM (
商品 INNER JOIN (
SELECT 受注明細.商品コード AS 番号 ,
SUM(受注明細.数量) AS 受注総数
FROM 受注明細
GROUP BY 受注明細.商品コード
HAVING ( SUM(受注明細.数量) >=2000 )
) AS T
ON 商品.商品コード = T.番号
)
GO