当ホームページのアクセス数No.1の『SQL講座』です。 マイクロソフトのAccessというデータベースソフトを利用して、10回の講義形式で、SQLを学んでいきます。
初級シスアドから目指すSQLというコンセプトのもと、なるべく分かりやすく、かつ、注意すべき点などを随所に盛り込みながら、解説していきます。
SQL講座のTopへ戻る
SELECT ( <SQL 集合関数> ) FROM <テーブル名リスト> GROUP BY <列名リスト> テーブル名リストから列名リストでグルーピングして集合関数の値を返します。
SELECT COUNT ( * ) AS 在籍支社ごとの社員数 , 在籍支社 FROM 社員 GROUP BY 在籍支社 ;
< 実行結果ch05-1 >
SELECT MAX ( 単価 ) AS 数量ごとの単価最大値 , 数量 FROM 受注明細 GROUP BY 数量 ;
< 実行結果ch05-2 >
SELECT MIN ( 単価 ) AS 数量ごとの単価最小値 , 数量 FROM 受注明細 GROUP BY 数量 ;
< 実行結果ch05-3 >
SELECT AVG ( 単価 ) AS 商品区分ごとの単価平均値 , 区分コード FROM 商品 GROUP BY 区分コード ;
<注意> ここでテーブル「商品」に”区分コード”という列名は存在しませんが、 左上のビューボタンを押下するとフィールド名が”区分コード”になってます。 テーブル「商品区分」に連結されているのですね。
< 実行結果ch05-4 >
SELECT SUM ( 在庫 ) AS 商品区分ごとの在庫合計値, 区分コード FROM 商品 GROUP BY 区分コード;
< 実行結果ch05-5 >
■ WHERE 句をつけて
SELECT COUNT ( * ) AS 在庫50以上の商品区分ごとのカウント, 区分コード FROM 商品 WHERE 在庫 >= 50 GROUP BY 区分コード;
< 実行結果ch05-6 >
■ HAVING 句
SELECT ( <SQL 集合関数> ) FROM <テーブル名リスト> GROUP BY <列名リスト> HAVING <探索条件> テーブル名リストから列名リストでグルーピングしてそのグループから探索条件を指定し、 得られた集合関数の値を返します。
HAVING 句は、GROUP BY 句でできるグループのうちから、 特定のグループを選択するための探索条件を指定します。
SELECT COUNT ( * ) AS 在庫50以上で商品区分ごとのカウントが5以下 , 区分コード FROM 商品 WHERE 在庫 >= 50 GROUP BY 区分コード HAVING COUNT( * ) <= 5 ;
< 実行結果ch05-7 >
SELECT MAX ( 単価 ) AS 在庫50以上で商品区分ごとの単価の最大値 , 区分コード FROM 商品 WHERE 在庫 >= 50 GROUP BY 区分コード ;
SELECT MAX ( 単価 ) AS 在庫50以上で商品区分ごとの単価の最大値が300以下 , 区分コード FROM 商品 WHERE 在庫 >= 50 GROUP BY 区分コード HAVING MAX( 単価 ) <= 300 ;
< 実行結果ch05-8 > では、 テーブル「商品」からまず在庫が 50 以上を求め、次に区分コードごとにグルーピングして その区分コードの単価の最大値を求めます。 < 実行結果ch05-9 >では、 テーブル「商品」からまず在庫が 50 以上を求め、次に区分コードごとにグルーピングして その区分コードの単価の最大値を求めます。最大値を求めた結果、300 以下のものを求めます。 < 実行結果ch05-8 >
< 実行結果ch05-9 >