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

Similar documents
Microsoft PowerPoint - db03-5.ppt

Chapter Two

Microsoft PowerPoint pptx

Microsoft Word - SQL.rtf

PowerPoint プレゼンテーション

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

PowerPoint Presentation

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

Chapter Two

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO

,, create table drop table alter table

CMP2-3SQL2b.pptx

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

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058

データベースS

標準化 補足資料

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

Excel2013 データベース1(テーブル機能と並べ替え)

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第7版   None

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

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

问题集 ITEXAMPASS 1 年で無料進級することに提供する

~モバイルを知る~ 日常生活とモバイルコンピューティング

1 ex01.sql ex01.sql ; user_id from (select user_id ;) user_id * select select (3+4)*7, SIN(PI()/2) ; (1) select < > from < > ; :, * user_id user_name

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

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第8版  

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

ii II Web Web HTML CSS PHP MySQL Web Web CSS JavaScript Web SQL Web

tkk0408nari

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

プレポスト【問題】

PowerPoint プレゼンテーション

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

Caché SQL に関するよくある質問

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

Oracle Database Connect 2017 JPOUG

3/7 マイグレーション開発方針 顧客名 0 作成者 根岸正 < プログラム移行方針 > システム名称 A-VX システムマイグレーション作成日 2015/09/01 < COBOL 資産のプログラム移行 > COBOLソース ( メインとCOPYLIB) を入力としてSCC 言語変換ツールにてVB

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO

テーブルの確認 sqlite>.tables.tables コマンドでデータベース内のテーブル一覧を表示する テーブルスキーマの表示 sqlite>.schema mytable.schema コマンドで指定のテーブルのスキーマを表示できる テーブル出力の整形.explain コマンドを使うと テー

ICT-Literacy1

Taro php.jtdc

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

: ORDER BY

Basic descriptive statistics

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

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

Exam : 1z0-882 日本語 (JPN) Title : Oracle Certified Professional, MySQL 5.6 Developer Vendor : Oracle Version : DEMO 1 / 4 Get Latest & Valid 1z0-882-JP

~モバイルを知る~ 日常生活とモバイルコンピューティング

スライド タイトルなし

WDI-Slides-05.pptx

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

Microsoft Word - tutorial3-dbreverse.docx

Wiki Wiki Wiki...

データベースS 演習資料

Microsoft Word - wpphpmysql.doc

Microsoft Word - 206MSAccess2010

橡実践Oracle Objects for OLE

PowerPoint プレゼンテーション

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

防災マップ作成システムの開発業務基本設計書

XML Consortium & XML Consortium 1 XML Consortium XML Consortium 2

クエリの作成が楽になるUDF

PowerPoint Presentation

問題 1 次の文章は Access データベース およびデータベースの概要について述べたものである にあてはまる適切なものを解答群 { } より選び その記号で答えよ 設問 1. Microsoft Access 2007 データベースのテーブルでは 表す としてデータを { ア. レコードを列 フ

データの作成方法のイメージ ( キーワードで結合の場合 ) 地図太郎 キーワードの値は文字列です キーワードの値は重複しないようにします 同じ値にする Excel データ (CSV) 注意キーワードの値は文字列です キーワードの値は重複しないようにします 1 ツールバーの 編集レイヤの選択 から 編

Microsoft Word - PHP_SQLServer2012

ことばを覚える

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

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

_IMv2.key

基本サンプル

基本サンプル

システム分析とデータベース設計

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

PowerPoint プレゼンテーション

Section1_入力用テンプレートの作成

Microsoft Word A08

Base データベースについて... 3 Base データベースを新規作成する方法... 4 Base 既存のデータベースファイルを開く方法... 8 Base テーブルを作成する方法 Base テーブルにデータを入力する方法 Base テーブルを定義する効果について...

データ構造

やさしくPDFへ文字入力 v.2.0

変更履歴 変 更 日 項目 変 更 内 容 2011/08/01 初版 2017/07/20 客注納品データファイルレイアウト注文番号とSKUを項目追加 2017/08/30 客注納品データファイルレイアウト注文番号とSKUに対する注意事項を追加 1 / 9

Microsoft Word - JDBC検証 docx

3 Powered by mod_perl, Apache & MySQL use Item; my $item = Item->new( id => 1, name => ' ', price => 1200,

vi 目次 画像のサイズ設定 画像の効果 画面の取り込みとトリミング Office の共通基本操作 図形 図形の挿入と削除 図形の編集 図形の背景色の透過 Office

10th Developer Camp - B5

基本サンプル

関数とは 関数とは 結果を得るために 処理を行う仕組み です Excel2010 には あらかじめ関数が数式として組み込まれています たとえば SUM 関数 は 指定した値をすべて合計する 仕組みです 長い計算式や複雑な計算式を作成せずに 簡単に結果を求めることができます 例合計 =A1+A2+A3

関係データベース

データベースアクセス

関数サンプル2

はじめに 本書では GridDB Advanced Edition における SQL の記述方法および 注意事項について記載しています GridDB Advanced Edition をご使用になる前に 必ずお読みください なお 本書で説明する機能は GridDB Advanced Edition

模擬試験問題(第1章~第3章)

ODBC Driver for 4D Server

ワープロソフトウェア

Microsoft PowerPoint - KeySQL50_10g_vlo2.ppt

スライド 1

領域サイズの見積方法

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

変更履歴 版数変更日変更内容 /9/1 初版設定

(Microsoft Word - 01Access\202P\213\211C\203p\203^\201[\203\223\216\300\213Z\225\\\216\206.doc)

Transcription:

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

SQLite データベースは ファイルベースで SQL を実行することができる軽量データベースです データベース1つにつき 1 ファイルで管理し この中に複数のテーブルを持つことができます このファイルをアクセスするための実行ファイルをダウンロードするだけという手軽さです リレーショナルとは 複数のテーブルを関連するフィールドで結合して 大きな表があるように振舞わせるものです テーブルを分割して持つことで データの重複を避け 効率よくデータを保存することができます データベースの正規化により テーブルを分割して設計します 2

1.SQLite のインストール sqlite3.exe を適当なフォルダに配置する 2.SQLite の起動とデータベースの作成コマンドプロンプトを起動し sqlite3.exe を配置したフォルダをカレントにする >d: d:>cd フォルダのパス d:\sqlite> データベース名 ( ファイル名 ) を指定して実行 D:\SQLite>sqlite3 test1 SQLite version 3.7.9 2011-11-01 00:52:41 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> 3.SQLite のコマンド.databases.dump.exit.import.indices.nullvalue.output.quit.read.schema.show.tables.timeout.width データベースを一覧表示するデータベースをダンプするコマンドプロンプトを終了するファイルからデータをインポートするテーブル名を表示する NULL を置き換える文字列を設定する実行結果の出力先を設定するコマンドラインプログラムを終了するコマンドファイルを実行するテーブルスキーマを表示する設定値を一覧表示するパターンにマッチするテーブル名を表示するテーブルロック待ちの時間 ( ミリ秒 ) を設定するフィールドの表示幅を設定する 3

4.SQL の発行 1) テーブルの作成新しいテーブルを作成しますコマンド :create table テーブル名 ( フィールド名 1 型属性 フィールド名 2 型属性 : ); SQLite は型を省略することができます 属性は 指定する必要のあるときだけ指定します 主な型分類 データ型 説明 整数 integer 10 桁 + 符号の符号付き整数 bool 0 または 1 実数 float double 日付 / 時刻 datetime 日時 ( 年月日と時分秒 ) date 日付のみ time 時刻のみ 文字列 varchar( 桁数 ) 文字列 char( 桁数 ) 文字列 text 可変長文字列 主な属性 属性 説明 null NULL 値を許可 ( デフォルト ) not null NULL 値を許可しない primary key 主キーに設定する 主キーを設定すると 重複する入力を許可し ない 主キーは 1つのテーブルに1つだけ設定可能 auto_increment レコードを追加するたびに自動的に1ずつ増えた値を設定 4

sqlite> create table products(...> ID char(10) primary key,...> name text,...> image text,...> price integer...> ); sqlite>.schema CREATE TABLE products( ID char(10) primary key, name text, image text, price integer ); sqlite>.tables products sqlite> 2) レコードの挿入指定のテーブルにデータをレコードに追加します 全フィールドのデータをフィールドの順に指定するときは フィールド名は省略できます コマンド :insert into テーブル名 ( フィールド名 1 フィールド名 2 ) values( データ1 データ2 ); sqlite> insert into products(id, name) values("a001", " リンゴ "); sqlite> insert into products values("a002", " みかん ", "", 500); sqlite> insert into products values("a002", " みかん ", "", 500); Error: column id is not unique 5

3) レコードの表示テーブルに記録されているレコードを表示します コマンド :select 表示するフィールド名 from テーブル名条件など ; 表示するフィールド名 に * を指定すると テーブルに含まれるすべてのフィールドが表示されます 複数個のフィールドを指定したいときは, で区切って並べて書きます sqlite> select * from products; A1001 リンゴ A1002 みかん 500 sqlite> 4) レコードの更新記録されているレコードの内容を変更します 条件を付けて 特定のレコードだけを更新することもできます コマンド :update テーブル名 set フィールド名 = 値条件 ; 指定のフィールドの内容を指定の 値 で変更します 複数のフィールドの値を変更したいときは, で区切って並べて書きます 条件の指定は select 文と同じなので 後の節を参照してください sqlite> update products set price = 350; sqlite> select * from products; A1001 リンゴ 350 A1002 みかん 350 sqlite> 5) レコードの削除テーブルからレコードを削除します 条件を付けて 特定のレコードだけを削除することもできます コマンド :delete from テーブル名条件 ; 条件の指定は select 文と同じなので 後の節を参照してください sqlite> delete from products; sqlite> select * from products; sqlite> 6

6) テーブルの削除記録されているレコードだけでなく テーブルそのものを削除します コマンド :drop table テーブル名 ; sqlite> drop table products; sqlite>.tables sqlite> 7) データの選択 SQL の中でももっとも重要なのは 適切なレコードと そこに保存されているデータを読み出すコマンドです ここでは いろいろな条件をつけてレコードを選択したり 2つのテーブルを連結したりするコマンドを紹介します テーブルに記録されているレコードの中から条件を満たすレコードだけを選択し て表示します コマンド :select 表示するフィールド名 from テーブル名 where 条件 ; 主な条件 条件 意味 例 = 一致する where field1 = 10 < より小さい where field1 < 10 > より大きい where field1 > 10 <= 以下 where field1 <= 10 >= 以上 where field1 >= 10 <> 一致しない where field1 <> 10 is NULL データなし where field1 is null between (from) and (to) 範囲指定 where field1 between 10 and 15 like % 文字を含む where field2 like '%e%'; (e を含むもの ) And 条件の AND where field1 < 10 and field2 IS null Or 条件の OR where field1 < 10 or field2 IS null Not 条件の否定 where not field1 < 10 7

例 ) create table products( id char(10) primary key, name text, image text, price integer ); insert into products values("a001", " りんご ", "apple.jpg", 200); insert into products values("a002", " みかん ", "orange.jpg", 500); insert into products values("a003", " バナナ ", "banana.jpg", 150); insert into products values("a004", " メロン ", "melon.jpg", 800); insert into products values("a005", " メロン ", "melon2.jpg", 1200); insert into products values("b001", " 鉛筆 ", "pencil.jpg", 150); insert into products values("b002", " 消しゴム ", "eraser.jpg", 50); insert into products values("b003", " 定規 ", "melon.jpg", 250); insert into products (id, name, price) values("b004", " コピー用紙 ", 450); insert into products values("b005", " 輪ゴム ", "", 90); sqlite> select * from products where id="a001"; A001 りんご apple.jpg 200 sqlite> select * from products where price < 200; A003 バナナ banana.jpg 150 B001 鉛筆 pencil.jpg 150 B002 消しゴム eraser.jpg 50 B005 輪ゴム 90 sqlite> select * from products where id like "B%"; B001 鉛筆 pencil.jpg 150 B002 消しゴム eraser.jpg 50 B003 定規 melon.jpg 250 B004 コピー用紙 450 B005 輪ゴム 90 sqlite> select * from products where image is null; B004 コピー用紙 450 sqlite> select * from products where image =""; B005 輪ゴム 90 8

8) レコードを並べ替える指定のフィールドの値の昇順 降順に並べ替えてレコードを取り出します コマンド ( 昇順 ):select 表示するフィールド名 from テーブル名 order by フィールド名 ; コマンド ( 降順 ):select 表示するフィールド名 from テーブル名 order by フィールド名 DESC; where 句と組み合わせて 特定の条件のレコードのみを並べ替えることもできます sqlite> select * from products order by price desc; A004 メロン melon.jpg 800 A002 みかん orange.jpg 500 B004 コピー用紙 450 B003 定規 melon.jpg 250 A001 りんご apple.jpg 200 A003 バナナ banana.jpg 150 B001 鉛筆 pencil.jpg 150 B005 輪ゴム 90 B002 消しゴム eraser.jpg 50 sqlite> select * from products where id like 'B%' order by price desc; B004 コピー用紙 450 B003 定規 melon.jpg 250 B001 鉛筆 pencil.jpg 150 B005 輪ゴム 90 B002 消しゴム eraser.jpg 50 sqlite> 9

9) 重複データを 1 つだけ選択 フィールドに同じデータが複数あるとき 1つだけ選択することができます コマンド :select distinct 表示するフィールド名 from テーブル名 ; sqlite> select name from products where price > 500; メロンメロン sqlite> select distinct name from products where price > 500; メロン フィールド名の別名 フィールド名に別名をつけることができます mysql> select ID as number, NAME as subject from subject1; +--------+----------+ number subject フィールド名が長くなるとき別名をつけてお +--------+----------+ 1 国語 くと便利です 2 数学 : : 10

5. データベースの正規化伝票処理を考えます 伝票番号 :1 東京都品川区大崎 x-x-x 品川太郎様 請求書 2012 年 6 月 30 日 東京都大田区西蒲田 1-1-1 通販文具店 品番商品名単価個数金額 N001 A4 標準ノート 245 1 245 P003 鉛筆 HB 1000 2 2000 P005 マジック 150 10 1500 上記のとおり 請求いたします 合計金額 3745 請求書 1 枚に対し 購入商品の種類の数は可変です このようなときは 1 枚の請求書に 1 回だけ書かれている情報 ( 日付 お客様の情報 伝票番号 ) と複数書かれている情報 ( 購入商品に関する情報 ) とを分けて記録します データを重複して保存することを避けられます 計算すれば求まる情報も記録はしません このようにテーブルを分割して設計することをデータベースの正規化といいます このような請求書がたくさんあった時 これをそのまま表にすると 伝票番号 日付 顧客名 住所 品番 商品名 単価 個数 金額 1 2012/6/30 品川太郎 東京都 N001 A4 標準ノート 245 1 245 P003 鉛筆 HB 1000 2 2000 P005 マジック 150 10 1500 2 2012/6/30 鈴木一郎 アメリカ N001 A4 標準ノート 245 10 2450 3 2010/6/30 野原花子 東京都 P004 シャープペンシル 750 2 1500 P005 マジック 150 2 300 表にあいているところがあると データベースでは困りますので 全部埋めます これが 第一正規形です 伝票番号 日付 顧客名 住所 品番 商品名 単価 個数 金額 1 2012/6/30 品川太郎 東京都 N001 A4 標準ノート 245 1 245 1 2012/6/30 品川太郎 東京都 P003 鉛筆 HB 1000 2 2000 1 2012/6/30 品川太郎 東京都 P005 マジック 150 10 1500 2 2012/6/30 鈴木一郎 アメリカ N001 A4 標準ノート 245 10 2450 3 2010/6/30 野原花子 東京都 P004 シャープペンシル 750 2 1500 3 2010/6/30 野原花子 東京都 P005 マジック 150 2 300 11

重複を避けるためには 表を分割します これが第 2 正規形です 伝票番号 日付 顧客名 住所 1 2012/6/30 品川太郎 東京都 2 2012/6/30 鈴木一郎 アメリカ 3 2010/6/30 野原花子 東京都 伝票番号 明細番号 品番 商品名 単価 個数 金額 1 1 N001 A4 標準ノート 245 1 245 1 2 P003 鉛筆 HB 1000 2 2000 1 3 P005 マジック 150 10 1500 2 1 N001 A4 標準ノート 245 10 2450 3 1 P004 シャープペンシル 750 2 1500 3 2 P005 マジック 150 2 300 12

顧客にとっては住所は一つ 商品番号がわかれば商品名や単価は決まります また 金額は 単価と個数がわかれば計算することができます さらにテーブルを分割しましょう これを第 3 正規形といいます 伝票番号 日付 顧客番号 1 2012/6/30 121001 2 2012/6/30 121002 3 2010/6/30 121003 顧客番号 顧客名 住所 121001 品川太郎 東京都 121002 鈴木一郎 アメリカ 121003 野原花子 東京都 伝票番号 明細番号 品番 個数 1 1 N001 1 1 2 P003 2 1 3 P005 10 2 1 N001 10 3 1 P004 2 3 2 P005 2 品番 商品名 単価 N001 A4 標準ノート 245 P003 鉛筆 HB 1000 P005 マジック 150 P004 シャープペンシル 750 13

サンプルデータを作成してください create table sales_book( id integer primary key AUTOINCREMENT, sale_date date, customer_id char(10) ); insert into sales_book (sale_date, customer_id) values ("2012/6/30", 121001); insert into sales_book (sale_date, customer_id) values ("2012/6/30", 121002); insert into sales_book (sale_date, customer_id) values ("2012/6/30", 121003); create table account ( sale_id integer, account_id, product_id char(10), number integer, PRIMARY KEY(sale_id, account_id) ) ; insert into account values(1,1,"n001",1); insert into account values(1,2,"p003",2); insert into account values(1,3,"p005",10); insert into account values(2,1,"n001",10); insert into account values(3,1,"p004",2); insert into account values(3,2,"p005",2); create table customer( customer_id char(10) primary key, name text, address text ); insert into customer values("121001"," 品川太郎 "," 東京都 "); insert into customer values("121002"," 鈴木一郎 "," アメリカ "); 14

insert into customer values("121003"," 野原花子 "," 東京都 "); create table product( product_id name text, price integer ); char(5) primary key, insert into product values("n001","a4 標準ノート ", 245); insert into product values("p003"," 鉛筆 HB",1000); insert into product values("p005"," マジック ",150); insert into product values("p004"," シャープペンシル ",750); テーブルの結合 ほかのテーブルからデータを得るには テーブルを結合します select フィールド名 from テーブル名 1, テーブル名 2 where テーブル名 1. フィールド名 1 = テーブル名 2. フィールド名 2 伝票と明細の結合 sqlite> select * from sales_book, account where sales_book.id = account.sale_id; 1 2012/6/30 121001 1 1 N001 1 1 2012/6/30 121001 1 2 P003 2 1 2012/6/30 121001 1 3 P005 10 2 2012/6/30 121002 2 1 N001 10 3 2012/6/30 121003 3 1 P004 2 3 2012/6/30 121003 3 2 P005 2 伝票と顧客の結合 sqlite> select * from sales_book, customer where sales_book.customer_id = customer.customer_id; 1 2012/6/30 121001 121001 品川太郎 東京都 2 2012/6/30 121002 121002 鈴木一郎 アメリカ 3 2012/6/30 121003 121003 野原花子 東京都 15

明細と商品の結合 sqlite> select * from account, product where account.product_id = product.product_id; 1 1 N001 1 N001 A4 標準ノート 245 1 2 P003 2 P003 鉛筆 HB 1000 1 3 P005 10 P005 マジック 150 2 1 N001 10 N001 A4 標準ノート 245 3 2 P005 2 P005 マジック 150 伝票と顧客と明細と商品の結合 sqlite> select * from sales_book, customer, account, product...> where sales_book.id = account.sale_id and...> sales_book.customer_id = customer.customer_id and...> account.product_id = product.product_id; 1 2012/6/30 121001 121001 品川太郎 東京都 1 1 N001 1 N001 A4 標準ノート 245 1 2012/6/30 121001 121001 品川太郎 東京都 1 2 P003 2 P003 鉛筆 HB 1000 1 2012/6/30 121001 121001 品川太郎 東京都 1 3 P005 10 P005 マジック 150 2 2012/6/30 121002 121002 鈴木一郎 アメリカ 2 1 N001 10 N001 A4 標準ノート 245 3 2012/6/30 121003 121003 野原花子 東京都 3 2 P005 2 P005 マジック 150 16

SQL には 次のように集計を行う構文が用意されています 集計関数 フィールドの合計を求める select sum( フィールド名 ) from テーブル名 例 ) 明細テーブルの個数の合計を求める select sum(number) from account; 例 ) 明細テーブルの金額の合計を求める select sum(number*price) from account,product where account.product_id = product.product_id; レコードの件数を数える select count( フィールド名 ) from テーブル名 例 ) 明細テーブルの id が N001 のものの件数を求める select count(account_id ) from account where product_id = "N001"; フィールドの最大値を求める select max( フィールド名 ) from テーブル名 例 ) 商品テーブルの一番高い商品を求める select product_id, max(price), name from product; フィールドの最小値を求める select min( フィールド名 ) from テーブル名 例 ) 売れた個数の最小値を求める select min(number) from account; フィールドの平均値を求める select avg( フィールド名 ) from テーブル名 例 ) 明細テーブルの個数の平均値を求める select avg(number) from account; 17

グループ化 これらの集計関数をグループごとに求めることができます どのフィールドでグループ化するか を次のように指定します select 集計関数 from テーブル名 group by フィールド名 例 ) 商品別に注文個数を多い順に表示 select product_id, sum(number) as sum_number from account group by product_id order by sum_number desc; 例 ) 商品別に売り上げ高の多い順に表示 select product.product_id, sum(number*price) as total_sales from account, product where account.product_id = product.product_id group by product.product_id order by total_sales desc; 例 ) 顧客別売上ランキング select customer.customer_id,customer.name, sum(number*price) as total_sales from account, product, sales_book, customer where sales_book.id = account.sale_id and account.product_id = product.product_id and customer.customer_id = sales_book.customer_id group by customer.customer_id order by total_sales desc; 18