MSDE FunClub | 最終更新日 : 2000/07/08 | |
Microsoft Data Engine FunClub |
|
|
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