データベースS

Similar documents
Microsoft PowerPoint - db03-5.ppt

Microsoft PowerPoint - 講義補助資料2017.pptx

PowerPoint プレゼンテーション

Chapter Two

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

Chapter Two

Microsoft PowerPoint pptx

標準化 補足資料

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1

PowerPoint プレゼンテーション

eラーニング資料 e ラーニングの制作目標 データベース編 41 ページデータベースの基本となる概要を以下に示す この内容のコースで eラーニングコンテンツを作成予定 データベース管理 コンピュータで行われる基本的なデータに対する処理は 次の 4 種類です 新しいデータを追加する 既存のデータを探索

第 2 章 問合せの基本操作 この章では データベースから情報を検索する際に使用する SELECT コマンド および SELECT コマンドと 同時に使用する句について説明します 1. 問合せとは 2. 基本的な問合せ 3. 列の別名 4. 重複行を一意にする 5. 検索行の絞込み 6. 文字パター

プレポスト【問題】

アジェンダ ORACLE MASTER Oracle Database 11g 概要 11g SQL 基礎 Ⅰ 試験紹介 ポイント解説 Copyright 2011 Oracle. All rights reserved. 2

CMP2-3SQL2b.pptx

A Dynamic Mobility Histogram Construction Method Based on Markov Chains

基本サンプル

コンピュータリテラシ 第 6 回表計算 2 このスライド 例題 /reidai6.xlsx /reidai6a.xlsx 課題 12 /reidai6b.xlsx /table12_13.xlsx

データベース工学 2011年度資料

基本サンプル

SQL 基礎 (6) JOIN 句 - データの結合 作成日 : 2016/02/22 作成者 : 西村 更新履歴 更新日 更新概要 作業者 2016/02/22 新規作成 西村 はじめに この資料では 下記のような JOIN によるテーブル ( データ ) の結合について簡単に説明します INNE

基本サンプル

Functional Programming

Microsoft PowerPoint - system8.ppt

Microsoft Word - SQL.rtf

3 - 正しい SQL ( 方言を排除した SQL 文の記述方法 )

1,.,,,., RDBM, SQL. OSS,, SQL,,.

7-1- 基 RDB に関する基礎知識 1 独立行政法人情報処理推進機構

Microsoft PowerPoint - KeySQL50_10g_vlo2.ppt

Microsoft PowerPoint - prog03.ppt

はじめに コースの概要と目的条件分岐の方法や複雑な集計の手法など SQL のコーディングの幅を広げるためのテクニックについて説明します また パフォーマンスを考慮した記述方法や正しい結果を取得するための記述方法などについても あわせて説明します 本コースでは 実践的な SQL の記述手法を広く浅く紹

第 1 章 条件分岐 この章では 条件に応じて処理を分岐する方法について説明します 1. CASE 式で複雑な条件分岐を実現 2. 関数を使用した条件分岐 3. MERGE 文による条件に応じた DML の実行

Microsoft Word - Android_SQLite講座_画面800×1280

SQLite データベース IS04 組み込み 1

Basic descriptive statistics

プログラミング基礎

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,

,, create table drop table alter table

関係データベース

データベース 【1:データベースシステムとは】

Microsoft PowerPoint - prog04.ppt

正誤表(FPT1004)

プログラミングA

三科目合計の算出関数を用いて各教科の平均点と最高点を求めることにする この2つの計算は [ ホーム ] タブのコマンドにも用意されているが 今回は関数として作成する まず 表に 三科目合計 平均 と 最高点 の項目を用意する 項目を入力する際 適宜罫線などを設定し 分かりやすい表作成を心がけること

Sort-of-List-Map(A)

スライド 1

PowerPoint プレゼンテーション

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

ICT-Literacy1

Microsoft PowerPoint - enshu4.ppt [äº™æ‘łã…¢ã…¼ã…›]

結合演算 ( 復習 ) データベース論 (9) R 社員番号 氏名麻生太郎安部晋三与謝野馨森喜朗 部門経理課営業課総務課営業課 S 部門経理課営業課総務課 電話 問合せ言語と SQL(2) R S 社員番号

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

情報科学概論 第6回

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

プログラミング基礎

プログラミングA

プログラミング入門1

Microsoft PowerPoint - ca ppt [互換モード]

この文章に含まれる情報は 公表の日付の時点での Microsoft Corporation の考え方を表しています 市場の変化に応える必要 があるため Microsoft は記載されている内容を約束しているわけではありません この文書の内容は印刷後も正しいとは保障で きません この文章は情報の提供の

Si 知識情報処理

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Chapter Two

Microsoft Word 基_シラバス.doc

Sequel のすすめ 私が SQL を嫌いな理由 とみたまさひろ RubyHiroba Sequel のすすめ - 私が SQL を嫌いな理由 Powered by Rabbit 2.0.7


PowerPoint Presentation

PowerPoint プレゼンテーション

スライド タイトルなし

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

オートマトン 形式言語及び演習 3. 正規表現 酒井正彦 正規表現とは 正規表現 ( 正則表現, Regular Expression) オートマトン : 言語を定義する機械正規表現 : 言語

PowerPoint プレゼンテーション

離散数学

スライド 1

現在 数多くの DBMS が存在しますが SQL の基本的なコマンドは標準化されており どの DBMS でもある程度同じものが利用可能です ただし それぞれの DBMS の機能の違いにより存在しないコマンドがあったり オプション指定が異なる場合があるため まったく同じとは言えません なお DBMS

オートマトン 形式言語及び演習 4. 正規言語の性質 酒井正彦 正規言語の性質 反復補題正規言語が満たす性質 ある与えられた言語が正規言語でないことを証明するために その言語が正規言語であると

2014 年度 SCCP s 古河智弥 目的 論理型プログラミング言語 Prolog の学習 宣言型言語であり 探索などに利用することができるプログラミング言語 Prolog の基本を習得し 機械学習の研究への応用および データベースの問い合せ言語として Prolog を記述する方法を

PowerPoint プレゼンテーション

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

スライド 1

JavaプログラミングⅠ

スライド 1

PowerPoint Presentation

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

Webシステム授業資料

メソッドのまとめ

フィルタとは

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

2 / 16 ページ 第 7 講データ処理 ブック ( ファイル ) を開く第 6 講で保存したブック internet.xlsx を開きましょう 1. [Office ボタン ] から [ 開く ] をクリックします 2. [ ファイルの場所 ] がデータを保存している場所になっている

Prog1_3rd

コンピューターグラフィックスS

データベースS 演習資料

目次 1. 関係モデルの特徴 2. 用語の説明 3. データの正規化 4. 関係の集合演算 5. 関係の論理式 6. レポート課題 7. 参考書ほか

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

第 1 節 関数とは 関数とは 与えられた文字や数値に対し 定められた処理を行って結果を返す命令のことです 例えば パンをホームベーカリーで作るには 最初に材料となる小麦粉などを入れ 次いでドライイースト 最後に水を入れるという順序があります そして スタートボタンを押すとパンが完成します ホームベ

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft PowerPoint - ruby_instruction.ppt

PowerPoint プレゼンテーション

Transcription:

データベース S 第 4 回データベース言語 SQL(1) システム創成情報工学科尾下真樹 2018 年度 Q2

今日の内容 前回の復習 SQLの概要 SQLによる問い合わせの記述方法 SQLの基本的な書き方 条件 (WHERE) の書き方 出力 (SELECT) の書き方 順序付け (ORDER BY) グループ表 (GROUP BY)

教科書 リレーショナルデータベース入門 [ 第 3 版 ] 増永良文著 サイエンス社 (3,200 円 ) 5 章 (5.1~5.4 節 5.7 節 ) データベースシステム 北川博之著 昭晃堂出版 (3,200 円 ) 5 章 それぞれ SQLの具体例が載っているので 資料の具体例だけでは分かりにくければ 教科書も参考にすると良い

前回の復習

SQL とリレーション操作の関係 利用者 SQL という言語を使い問い合わせを記述 データベースシステム 結果を出力 リレーションを管理 利用者は SQL の書き方を きちんと理解しておく必要がある システムが内部で自動的に行ってくれるので 全く知らなくても使えるが 専門的に使うのであれば 理解が必要 問い合わせが行われたら リレーション操作を行って 結果を求める ( リレーショナル代数式 リレーショナル論理式 )

リレーショナル代数 リレーショナル代数 代数式 基本的なリレーションの演算子を定義 演算子を使った式によって 求めるリレーションが得られるようにリレーションの操作を記述する 代表的なリレーショナル代数演算子 選択 必要なデータ ( 表の行 ) を取り出すために使用 射影 必要な属性 ( 表の列 ) を取り出すために使用 結合 複数のリレーションを組み合わせるために使用

リレーショナル代数演算子 2 つのリレーション同士の演算 (2 項演算 ) 和集合 差集合 共通集合 直積 単一リレーションに対しての演算 ( 単項演算 ) 射影 選択 結合演算 (2 項演算 ) 結合 自然結合 その他 商 改名演算

リレーショナル代数式の例 科目番号 002の履修者の学生番号と成績の一覧 π 学生番号, 成績 (σ 科目番号 = 002 履修 ) 学生番号 00001 の学生が履修した科目名と成績の一覧 π 科目名, 成績 ( 科目 (σ 学生番号 = 0001 履修 )) 履修者が一人もいない科目の科目番号と科目名の一覧 π 科目名科目 - (π 科目名 ( 科目履修 )))

演習問題 リレーショナル代数式 基本的な問い合わせが書けるように 間違えた人は きちんと理解 復習しておくこと そもそも演算子がよく理解できなかった人は 理解 復習しておくこと 演算子の定義自体は簡単なので あとは きちんと理論的に考えられるかどうかが重要 ( プログラミングと同じ )

SQL の概要

SQL リレーショナルデータベース言語 SQL SQL( エスキューエル ) データベースの操作 特に問い合わせを行うための言語 使いやすい リレーショナル代数式 論理式などよりも記述が簡単 高機能 代数演算はリレーショナルモデルの操作を規定するもの ( 利用者が直接使用することはあまりない ) SQL はデータベースのインターフェース ( 具体的な操作ではなく 操作の目的を記述する )

SQL とリレーション操作の関係 ( 復習 ) 利用者 SQL という言語を使い問い合わせを記述 データベースシステム 結果を出力 リレーションを管理 利用者は SQL の書き方を きちんと理解しておく必要がある システムが内部で自動的に行ってくれるので 全く知らなくても使えるが 専門的に使うのであれば 理解が必要 問い合わせが行われたら リレーション操作を行って 結果を求める ( リレーショナル代数式 リレーショナル論理式 )

リレーショナル代数と SQL リレーショナル代数式 どのような処理でデータを出力するか (How) SQL どのような条件のデータを出力したいか (What) SQL はリレーショナル完備 リレーショナル代数式で記述できる問い合わせは全て記述できる SQLでしか記述できないような問い合わせもある

SQL による問い合わせの例 学生 ( 学生番号, 氏名 ) 科目 ( 科目番号, 科目名, 担当教官 ) 履修 ( 学生番号, 科目番号, 成績 ) データベース を履修している全学生の氏名と成績を出力 SELECT 氏名, 成績 FROM 学生, 科目, 履修 WHERE 科目. 科目名 = データベース AND 履修. 科目番号 = 科目. 科目番号 AND 学生. 学生番号 = 履修. 学生番号

SQL の歴史 (1) コッドがリレーショナルモデルを提案 (1970) さまざまなリレーショナルデータベースシステムの開発 (70 年代 ) IBM, System R 問い合わせ言語 SEQUEL (Structured English Query Language ) ( シークエル ) カリフォルニア大学バークレー校, INGRES 問い合わせ言語 QUEL(Query Language)( クエル ) 商用のシステムが登場 (80 年代 )

SQL の歴史 (2) データベース言語の標準化の動き (80 年代初頭 ) SQL 標準規格の制定 (1987) 国際規格 ISO 9075 日本工業規格 JIS X 3005 IBMのSEQUELがベース 規格の改定 SQL-92 (SQL2) (1992) が現在普及 SQL:1999(SQL3)(1999) はオブジェクト指向拡張 SQL:2003 SQL:2008 SQL:2011 SQL:2016

SQL の基本概念 SQL では リレーションを表 ( テーブル ) として扱う 属性 列 インスタンス 行 リレーション 表 リレーションと表の主な違い 重複した行の存在を許す 順序が意味を持つ リレーションよりも表の方が便利な時がある 詳しくは後で説明 履修 科目番号学生番号成績 01 0123001 60 03 0123002 80 01 0123003 70

表の種類 実表 (base table) データベース内のリレーション 直接更新することができる 導出表 (derived table) 問い合わせの結果としてできる表 基本的に直接更新することはできない ビュー表 (viewed table) 実装表を何らかの条件で表を再構成したもの 基本的に直接更新することはできない ( 本講義 演習では 扱わない )

SQL による問い合わせ データベース内の表 ( 実表 ) から どのようなデータを出力するかを SQL として記述する データベースシステムは SQL で記述された条件に一致するデータを検索し 検索結果を表 ( 導出表 ) として出力する 利用者 SQL を記述 データベースシステム 結果 ( 実行結果を導出表として出力 ) 実表

SQL を使ってできること 問い合わせ ( 検索 ) データベースから必要な情報を取り出す = 実表をもとに導出表を作成する リレーション ( 表 ) の生成 データ ( 行 ) の挿入 データ ( 行 ) の削除 データ ( 行 ) の更新 これらについては 次回 説明する

SQL による問い合わせの記述

表 ( リレーション ) の例 以降の記述例で使う表 ( リレーション ) 学生 ( 学生番号 氏名 ) 科目 ( 科目番号, 科目名, 単位数 ) 履修 ( 科目番号, 学生番号, 成績 ) 学生 学生番号 氏名 0123001 織田信長 0123002 豊臣秀吉 0123003 徳川家康 履修 科目番号 学生番号 成績 科目 001 00001 90 科目番号 科目名 単位 001 00002 80 001 データベース 2 002 00001 90 002 プログラミング 3 002 00003 70

SQL による問い合わせの記述 SQLの基本的な書き方 条件 (WHERE) の書き方 出力 (SELECT) の書き方 順序付け (ORDER BY) グループ表 (GROUP BY) 結合 (JOIN) 集合演算 副問い合わせ ( 入れ子型質問 )

SQL の記述方法 SELECT 表. 属性 ( 値式 ), FROM 表, WHERE 条件式 AND... SELECT 節 問い合わせの結果として取り出す属性 ( 値式 ) を指定 FROM 節 どの表 ( テーブル ) から検索するかを指定 WHERE 節 検索の条件を指定 ORDER BY 節 GROUP BY 節 HAVING 節 ( 後述 )

単純な質問の例 (1) Q. 科目番号 001 の履修者の学生番号と成績の一覧を出力 SELECT 履修. 学生番号, 履修. 成績 FROM 履修 WHERE 履修. 科目番号 = 001 表名が一意に決まる時は表名は省略できる SELECT 学生番号, 成績 FROM 履修 WHERE 科目番号 = 001

単純な質問の例 (1) SELECT 学生番号, 成績 FROM 履修 WHERE 科目番号 = 001 履修 科目番号 学生番号 成績 001 00001 90 001 00002 80 002 00001 90 002 00003 70 出力される表 学生番号 成績 00001 90 00002 80 1 FROM 節に書かれた表のうち WHERE 節の条件をみたすデータ ( 行 ) が出力対象となる 2 SELECT 節に書かれた属性 ( 列 ) が出力対象となる

SQL による問い合わせの記述 SQLの基本的な書き方 条件 (WHERE) の書き方 出力 (SELECT) の書き方 順序付け (ORDER BY) グループ表 (GROUP BY) 結合 (JOIN) 集合演算 副問い合わせ ( 入れ子型質問 )

条件 (WHERE) の書き方 属性に関する条件を記述できる =, <=, >= 複数の条件を AND や OR で組み合わせることもできる NOT で条件を反転することもできる 条件文に文字列を使うときは クォート でくくる 成績 = 70 氏名 = ODA NOBUNAGA 氏名 = N 織田信長 ( 日本語文字列の場合はNをつける ) 学生番号 = 00100 ( 学生番号を文字列として扱うとき )

単純な質問の例 (2) ANDを使う例 Q. 学生番号 00100の科目番号 005の成績 SELECT 成績 FROM 履修 WHERE 学生番号 = 00100 AND 科目番号 = 005 WHERE 節を省略した例 Q. 全科目の科目名と単位の一覧 SELECT 科目名, 単位数 FROM 科目

述語 条件を記述するために使える述語 BETWEEN x AND y 属性値の範囲を指定 IN t 表 t に含まれるかどうかを判定 LIKE x 文字列の部分一致 x を含むか NULL 空値かどうかを判定 EXISTS t 表 t が空集合でない場合に真 EXISTS の例は後述

述語の例 Q. 科目番号 001 の科目で 80 点から 90 点の成績の学生番号の一覧を出力 SELECT FROM WHERE SELECT FROM WHERE 学生番号履修科目番号 = 001 AND 成績 BETWEEN 80 AND 90 学生番号履修科目番号 = 001 AND 成績 >= 80 AND 成績 <= 90 どちらでも同じ ( どちらの書き方でも良い )

述語の例 Q. 名前に 子 の文字を含む学生の学生番号と氏名の一覧を出力 SELECT 学生番号, 氏名 FROM 学生 WHERE 氏名 LIKE 子

SQL による問い合わせの記述 SQLの基本的な書き方 条件 (WHERE) の書き方 出力 (SELECT) の書き方 順序付け (ORDER BY) グループ表 (GROUP BY) 結合 (JOIN) 集合演算 副問い合わせ ( 入れ子型質問 )

出力 (SELECT) の書き方 基本的には 出力したい属性を列挙 SELECT 学生番号, 成績 FROM 履修 WHERE 科目番号 = 001 特殊な SELECT 節の書き方 全属性を出力 (*) 重複の除去 (DISTINCT) 集約関数 (COUNT, SUM, AVG, MAX, MIN, etc.)

全属性を出力 指定した表の全部の列を問い合わせ結果に含めたい場合は * で省略できる Q. 単位数が 3 単位以上の科目の科目番号 科目名 単位数の一覧を出力 科目 ( 科目番号 科目名 単位数 ) SELECT * FROM 科目 WHERE 単位数 >= 3

重複の除去 (DISTINCT) DISTINCT 指定 重複した行を除去するための指定 SQLで扱うのは リレーション( 集合 ) ではなく表なので 重複は自動的には除去されない Q. 全科目の科目名と単位の一覧を出力 同じ科目名で科目番号が異なるデータが存在する場合 通常は同じ科目名のデータが複数出力されるが DISTINCT 指定をすると重複を除去 SELECT FROM DISTINCT 科目名, 単位数科目

集約関数 検索結果の表に対して集計演算を行い 表の全データを出力する代わりに 集約演算の結果を 1 行だけ出力する COUNT( 行数 ) SUM( 合計値 ), AVG( 平均点 ) MAX( 最大値 ) MIN( 最小値 ) 出力されるテーブルは1 行だけになることに注意 Q. 科目番号 001 の平均点 最小点 最高点 SELECT AVG( 成績 ), MIN( 成績 ), MAX( 成績 ) FROM 履修 WHERE 科目番号 = 001

集約関数の例 (AVG, MIN, MAX) Q. 科目番号 001 の平均点 最小点 最高点 SELECT AVG( 成績 ), MIN( 成績 ), MAX( 成績 ) FROM 履修 WHERE 科目番号 = 001 履修 WHERE 節の条件を満たすデータ 科目番号学生番号成績 001 00001 90 001 00002 80 002 00001 90 002 00003 70 成績 成績 成績 90 90 90 80 80 80 集約演算 AVG( 成績 ) MIN( 成績 ) MAX( 成績 ) 85 80 90

集約関数の例 (COUNT) Q. 科目番号 001 の履修者の人数を出力 SELECT COUNT(*) FROM 履修 WHERE 科目番号 = 001 COUNT は 出力されるデータの属性ではなく データの個数を計算する 特殊な集約関数 属性を指定する意味はないので COUNT 関数の引数には 常に 全属性を表す * を記述 上の例では 履修データの個数が履修人数を表すと考えられるため COUNT を用いる

集約関数の例 (COUNT) COUNT と他の集約関数の違いに注意 履修 科目番号 学生番号 成績 001 00001 90 001 00002 80 002 00001 90 002 00003 70 属性値の合計なので 170 データ数の合計なので 2 SELECT SUM( 成績 ) FROM 履修 WHERE 科目番号 = 001 SELECT COUNT(*) FROM 履修 WHERE 科目番号 = 001

SQL による問い合わせの記述 SQLの基本的な書き方 条件 (WHERE) の書き方 出力 (SELECT) の書き方 順序付け (ORDER BY) グループ表 (GROUP BY) 結合 (JOIN) 集合演算 副問い合わせ ( 入れ子型質問 )

順序付け (ORDER BY) 指定した属性によりデータの順番を並び替えて出力 Q. 科目番号 005 を履修した学生の学生番号と成績の一覧を 成績の良い順番に出力 SELECT 学生番号, 成績 FROM 履修 WHERE 科目番号 = 005 ORDER BY 成績 DESC ASC(ascendant) 昇順 小から大へ DESC(descendant) 降順 大から小へ

SQL による問い合わせの記述 SQLの基本的な書き方 条件 (WHERE) の書き方 出力 (SELECT) の書き方 順序付け (ORDER BY) グループ表 (GROUP BY) 結合 (JOIN) 集合演算 副問い合わせ ( 入れ子型質問 )

グループ表 (GROUP BY) GROUP BY 指定した属性によりデータをグループ化 属性値が等しいデータ同士をグループにまとめる 集約関数と組み合わせて用いる ( 重要 ) 集約関数は 全データではなく 各グループごとの全データに適用される ( グループ数分のデータを出力 ) Q. 全科目の科目番号と平均点の一覧を出力 SELECT 科目番号, AVG( 成績 ) FROM 履修 GROUP BY 科目番号

グループ表の例 グループ表の例 科目番号 学生番号 成績 001 001001 65 001 001002 75 001 001004 70 002 001002 80 002 001003 60 002 001004 90 002 001005 70 003 001004 70 集約演算は 各グループごとに適用されることに注意 各グループをひとつのデータ ( 行 ) として出力 科目番号 成績 001 70 002 75

グループ表 + グループ選択 (HAVING) GROUP BY + HAVING HAVING により 出力するグループの条件を指定 Q. 履修者が 30 名以上の科目の科目番号 履修者数 平均点の一覧 SELECT 科目番号, COUNT(*), AVG( 成績 ) FROM 履修 GROUP BY 科目番号 HAVING COUNT(*) >= 30

グループ表 + グループ選択の例 グループ表の例 科目番号学生番号成績 001 001001 60 001 001002 75 001 001004 70 002 001002 80 002 001003 60 002 001004 90 002 001005 70 003 001004 70 条件を満たすグループのデータのみ出力 科目番号 COUNT AVG( 成績 ) 001 3 70 002 4 75 WHERE GROUP BY HAVING

GROUP BY での処理適用順序 1 FROM ( 入力とするテーブル ) 2 WHERE ( 出力するデータを選択 ) 3 GROUP BY ( 出力されたデータをグループ化 ) 4 HAVING ( 出力するグループを選択 ) 5 SELECT ( 出力する属性 ) FROM 節のテーブルの各データの組み合わせから WHERE 節で書かれている条件を満たす組を選択 選択されたデータに対して GROUP BY 節に書かれている属性の値が同じもの同士でグループ化 各グループごとに HAVING 節に書かれている条件を満たすかどうか判定し 条件を満たすもののみを選択 選択されたデータ or グループの属性のうち SELECT 節に書かれているものを出力

GROUP BY 使用時の注意 GROUP BY 使用時の注意 SELECT 科目番号, COUNT(*), AVG( 成績 ) FROM 履修 GROUP BY 科目番号 HAVING COUNT(*) >= 30 GROUP BY 節があるときは 各グループが出力の単位となるので SELECT 節や HAVING 節にはグループで共通な属性 (GROPU BY に使った属性 ) や集約関数しか書けない ( 重要!)

WHERE と HAVING の使い分け WHERE データ ( インスタンス ) に関する条件 グループにまとめる前に評価される データに関する条件なので 集約関数は使えない HAVING グループに関する条件 グループにまとめた後で評価される グループに関する条件なので 集約関数しか使えない

WHERE と HAVING の使い分け HAVING を使う例 Q. 履修者が 30 名以上の科目の科目番号 履修者数 平均点の一覧 SELECT 科目番号, COUNT(*), AVG( 成績 ) FROM 履修 GROUP BY 科目番号 HAVING COUNT(*) >= 30 履修者が 30 名以上の科目 はグループに関する条件なので HAVING 節に記述

WHERE と HAVING の使い分け WHERE を使う例 Q. 各科目の 科目番号と 60 点以上の成績をとった履修者の数 ( 0 名の科目は出力しなくて良い ) SELECT 科目番号, COUNT(*) FROM 履修 WHERE 成績 >= 60 GROUP BY 科目番号 60 点以上の成績をとった履修者 はデータに関する条件なので WHERE 節に記述

SQL による問い合わせの記述 SQLの基本的な書き方 条件 (WHERE) の書き方 出力 (SELECT) の書き方 順序付け (ORDER BY) グループ表 (GROUP BY) 結合 (JOIN) 集合演算 副問い合わせ ( 入れ子型質問 )

まとめ 前回の復習 SQLの概要 SQLによる問い合わせの記述方法 SQLの基本的な書き方 条件 (WHERE) の書き方 出力 (SELECT) の書き方 順序付け (ORDER BY) グループ表 (GROUP BY)

次回予告 次回 ( 第 5 回 ) データベース演習 PostgreSQL 入門 リレーショナルデータベースを実際に体験する 第 6 回 データベース言語 SQL(2) SQLのより詳しい書き方を学ぶ 実際のデータベースでSQLを使ってみる