3-8・関数を使ってデータを取り出す   2004年6月3日(木) 01T6010F               大北高広.

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

1 通信教育学部 コンピュータ演習 Excel の書式設定と関数 授業ページ「コンピュータ演習(通信教育学 部)」を 開いてください。提出課題の一覧が掲載されてい ます。
1 金属加工会社における 生産工程管理システムの開発 電子情報システム工学専攻 S0713 清水 邦宏.
表計算ソフトウェア 関数の利用(基本編) Excel. 関数とは 関数とは ・ 計算方法があらかじめ定義され た 数式のこと ・ 必要な値を定められた書式に 従っ て入力するだけで、簡単に計算結 果を求めることができる.
情報基礎 A 第 4 週 データベースと表計算 情報基礎 A 第 4 週 データベースと表計算 1 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
SQLエディタによる データベースプログラミング 01. データベースとはデータを1つにまとめて 複数のシステムで共有できるようにしたもの 蔵書管理システム 貸出管理システム 生徒ファイル 生徒番号 学年 クラス 番号 名前 性別 住所 貸出ファイル 貸出番号 図書番号 貸出月 貸出日 蔵書ファイル.
Accessによるデータベース(1) Ver.1 /11.
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
エクセル(7)の目次 関数の書式 関数ウィザードの使い方 四捨五入/切り上げ/切り捨て IF関数 問題(1) 問題(2) 問題(3)
情報処理 第12回.
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
SQLエディタによる データベースプログラミング
知的システム構築工房   Linux設定セミナーシリーズ 第6回 MySQL設定 2011年3月17日(木) 株式会社 アセンディア 1.
課題 1 キーボードから整数値を 1つ読み込み、その値の二乗と三乗を出力するプログラムを作れ。 動作例: % ./a.out
プログラミング言語としてのR 情報知能学科 白井 英俊.
3-1 MySQLについて 発表者:藤村元彦 自然言語処理研究室.
2008年12月11日 RDBMSとSQL(2/3) 関数,GROUP,JOIN,演算
行列の計算 行列とは 行列の型 行列の演算 (C) Katsuhiro Yamada.
SQL J2EE I 第3回 /
基礎プログラミング (第五回) 担当者: 伊藤誠 (量子多体物理研究室) 内容: 1. 先週のおさらいと続き (実習)
データベース:Accessによる実習 第5章:クエリの基礎
3-2.データを取り出す 2004年 5月20日(木) 01T6074X 茂木啓悟.
4-3.基本的なPHPスクリプト 2004年6月24日(木) 大北高広 01T6010F.
湘南工科大学 2013年12月10日 プログラミング基礎1 湘南工科大学情報工学科 准教授 小林 学.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
データベースとJavaをつなげよう! ~JDBC~
地理情報システム論演習 地理情報システム論演習
2004/05/13 3-4 データ型(カラムタイプ) について 発表者:藤村元彦 自然言語処理研究室.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
関数の書式 ● SUM関数、AVARAGE関数など代表的ないくつかの関数の書式(数式の構文)は、下記のようなものである。 =関数名(引数1,引数2,引数3,・・・・・) ●引数(入力データ)は、数値で入力しても、セル名で指定してもよい。 例: =SUM(A1:A10,B21:B30,C31:C40)
09 06/23 PHP と SQL (MySQL) の連携 その1
第4回 統計処理(1) 表計算ソフトの基本操作 塩浦 昭義 東北大学全学教育科目 情報基礎 A 1セメスター 木曜1,3講時
3-6.インデックスについて 3-7.関数と併用されることの 多いMySQLコマンド
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
表計算ソフト(2) セル参照と組込み関数の利用
Excel 2002,2003基本12 情報関数.
マイクロソフト Access での SQL 演習 第4回 並べ替え(ソート)
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
第4回 ファイル入出力方法.
マイクロソフト Access での SQL 演習 第2回 集計,集約
C言語 はじめに 2016年 吉田研究室.
プログラミング基礎a 第6回 C言語によるプログラミング入門 配列と文字列(その2)
統計ソフトウエアRの基礎.
表計算ソフトウェアの活用① [基本的な関数]
基礎プログラミング演習 第6回.
コンピュータアーキテクチャ 第 3 回.
再帰CTE を使って遊ぼう 大阪#9 2012/04/14.
ウェブデザイン演習 第6回.
~sumii/class/proenb2009/ml6/
09 06/23 PHP と SQL (MySQL) の連携 その3
情報処理Ⅱ 2005年11月25日(金).
SQL J2EE I (データベース論) 第3回 /
情報処理Ⅱ 小テスト 2005年2月1日(火).
値渡しと参照渡しについて.
printf・scanf・変数・四則演算
第3章 関係データベースの基礎 3.1 関係とは 3.2 関係代数.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
香川大学創造工学部 富永浩之 情報数学1 第3-3章 多進法での四則演算 香川大学創造工学部 富永浩之
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります.
SQL データベース論 第11回.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

3-8・関数を使ってデータを取り出す   2004年6月3日(木) 01T6010F               大北高広

  関数とは、「引数」を呼ばれる値(数値もしくは文字列)に計算などの処理を行い、「戻り値」である結果データを表示させるための処理を実行する式のようなものです。結果を表示させることは、結果を「返す」ともいいます。

◆関数とは 集計関数をDBで使用する場合、引数にカラム名を指定することで、そのカラムに所属するすべてのデータを対象に処理を行えます。    関数は 関数名(引数) で用います。    関数の中には、( )内に引数を2つ以上指定することもあります。一方、引数を取らない関数は、( )内にはなにも入れません。    関数の処理を行い、その戻り値を表示させる場合にもselectコマンドを使用します。

◆集計関数 ・平均値: avg()   avg()という関数は、引数の数値もしくはカラムに所属するすべての数値の平均値を出します。そのカラムの数値を全部足して、Null値ではないレコード数で割る、という処理を行います。 mysql> select avg(AGE_C) from FRIENDS_T2; +-------------------+ | avg(AGE_C) | | 34.3000 | 1 row in set (0.00 sec)

カラム名の場所に関数が表示されていますが、asを使うことで、エイリアス名で表示させることもできます。 mysql> select avg(AGE_C) as ”平均年齢” from FRIENDS_T2; +--------------+ | 平均年齢 | | 34.3000 | 1 row in set (0.00 sec)   特定の条件に合うデータを対象にした関数計算は、where句を使って条件の設定をします。where以下の条件によるデータが取り出されたあと、そのデータに対して関数による計算がおこなわれます。  mysql> select avg(AGE_C) from FRIENDS_T2 where AGE_C >= 30; +-------------------+ | avg(AGE_C) | | 42.0000 | 1 row in set (0.00 sec)

・最大値:max()、 最小値:min()   テーブルの中から年齢の最大値を取り出します。selectのあとに、年齢を引数とし、最大数を出す関数を記述します。 mysql> select max(AGE_C) from FRIENDS_T2; +--------------------+ | max(AGE_C) | | 56 | 1 row in set (0.00 sec)   年齢の最小値を取り出します。 mysql> select min(AGE_C) from FRIENDS_T2; +--------------------+ | min(AGE_C) | | 17 | 1 row in set (0.00 sec)

・レコード数を集計:count() レコード数を数える関数です。(*を用いているのでNull値だけを持つレコードもカウントされます。) mysql> select count(*) from FRIENDS_T2; +--------------------+ | count(*) | | 10 | 1 row in set (0.00 sec)   指定のカラム名(NAME_C)から、Null値ではないデータを数えます。 mysql> select count(NAME_C) from FRIENDS_T2; +------------------------+ | count(NAME_C) | | 10 | 1 row in set (0.00 sec)

・カラムの数値を集計:sum() 指定のカラムの数値を足した合計を返します。   指定のカラムの数値を足した合計を返します。 mysql> select sum(AGE_C) from FRIENDS_T2; +-----------------------+ | sum(AGE_C) | | 343 | 1 row in set (0.02 sec)

◆group by/ having句と集計関数 ・平均値: avg()   group byを使ってレコードをグループ化し、その中で集計関数を行います。 mysql> select BLOOD_C, avg(AGE_C) from FRIENDS_T2 group -> by BLOOD_C; +------------------+---------------------+ | BLOOD_C | avg(AGE_C) | | AB型     | 45.0000 | | A型 | 34.5000 | | B型 | 25.0000 | | O型 | 36.6667 | 4 rows in set (0.01 sec)

  条件で絞り込んだデータをグループ化し、そのあと、集計関数で計算をします。where句で年齢のカラムが30以上を指定し、その結果セットに対して血液型でグループ化して各グループでの平均年齢を出します。 mysql> select BLOOD_C, avg(AGE_C) from FRIENDS_T2 group where -> AGE_C >= 30 group by BLOOD_C; +------------------+---------------------+ | BLOOD_C | avg(AGE_C) | | AB型     | 45.0000 | | A型 | 44.0000 | | B型 | 33.0000 | | O型 | 43.0000 | 4 rows in set (0.00 sec)

  グルーピングしたデータを集計関数で計算し、その結果を基に特定の条件で絞り込みします。関数の戻り値にはwhere句は使えませんので、having句を使用します。 mysql> select BLOOD_C, avg(AGE_C) from FRIENDS_T2 group -> by BLOOD_C having avg(AGE_C) >= 30; +------------------+---------------------+ | BLOOD_C | avg(AGE_C) | | AB型     | 45.0000 | | A型 | 34.5000 | | O型 | 36.6667 | 3 rows in set (0.00 sec)

・最大値:max() レコードをグループ化し、最大値を求める関数max()を使います。使い方はavg()と同じです。 mysql> select BLOOD_C, max(AGE_C) from FRIENDS_T2 group -> by BLOOD_C; +------------------+---------------------+ | BLOOD_C | max(AGE_C) | | AB型     | 45 | | A型 | 56 | | B型 | 33 | | O型 | 48 | 4 rows in set (0.00 sec)

having句の中ではwhere句と同様、andやorを使うことができます。 mysql> select BLOOD_C, max(AGE_C) from FRIENDS_T2 -> group by BLOOD_C having BLOOD_C like “A%” -> and max(AGE_C) >= 50; +------------------+---------------------+ | BLOOD_C | max(AGE_C) | | A型 | 56 | 1 row in set (0.00 sec)  andの代わりにorを使うと、「どちらかの条件を満たす」の意味になります。 mysql> select BLOOD_C, max(AGE_C) from FRIENDS_T2 -> group by BLOOD_C having BLOOD_C like “A%” -> or max(AGE_C) >= 50; +------------------+---------------------+ | BLOOD_C | max(AGE_C) | | AB型 | 45 | | A型 | 56 | 2 rows in set (0.00 sec)

・レコードの集計:count()   レコードをグループ化したうえで、count()を使って、グループ化されたレコードの数を数えます。このとき、selectしたカラムがNull値のレコードはカウントされません。 mysql> select BLOOD_C, count(*) from FRIENDS_T2 -> group by BLOOD_C; +------------------+---------------------+ | BLOOD_C | count(*) | | AB型     | 1 | | A型 | 4 | | B型 | 2 | | O型 | 3 | 4 rows in set (0.00 sec)

mysql> update FRIENDS_T2 set AGE_C = null -> where ID_C = 2; Query OK, 1 row affected(0.00 sec) rows matched: 1 Changed: 1 Warnings: 0 mysql> select BLOOD_C, count(AGE_C) from FRIENDS_T2 -> group by BLOOD_C; +------------------+---------------------+ | BLOOD_C | count(AGE_C) | | AB型     | 0 | | A型 | 4 | | B型 | 2 | | O型 | 3 | 4 rows in set (0.00 sec)

having句を使った条件で絞り込むこともできます。エイリアスを作成してhaving句の中でそのエイリアス名を使用します。 mysql> select BLOOD_C, count(AGE_C) as “人数” from -> FRIENDS_T2 group by BLOOD_C having 人数 >= 3; +------------------+---------------------+ | BLOOD_C | avg(AGE_C) | | AB型     | 4 | | O型 | 3 | 2 rows in set (0.00 sec)

・カラムの数値を集計:sum() グループ化したデータに対して、そのグループごとに所属する値の合計値を出します。    グループ化したデータに対して、そのグループごとに所属する値の合計値を出します。 mysql> select BLOOD_C, sum(AGE_C) from FRIENDS_T2 group -> by BLOOD_C; +------------------+---------------------+ | BLOOD_C | sum(AGE_C) | | AB型     | 45 | | A型 | 138 | | B型 | 50 | | O型 | 110 | 4 rows in set (0.00 sec)

関数を2つ使った例として、sum()とcount()を使って血液型ごとの平均年齢を出します。年齢の合計を数で割ると、平均年齢がでます。 mysql> select BLOOD_C, sum(AGE_C) / count(AGE_C) as -> “平均年齢” from FRIENDS_T2 group by BLOOD_C; +------------------+--------------------+ | BLOOD_C | 平均年齢  | | AB型     | 45.00 | | A型 | 34.50 | | B型 | 25.00 | | O型 | 36.67 | 4 rows in set (0.00 sec)

◆文字列関数 ・大文字、小文字の操作:upper(),lower()   引数には数値だけでなく、文字列を指定して処理を行うこともあります。文字列が引数となる場合には必ず“ ”で括ります。upper()とlower()は、引数の中のアルファベットの小文字を大文字に、大文字を小文字にする関数です。 mysql> select NAME_C, lower(BLOOD_C) from FRIENDS_T2; +-----------------+-------------------------+ | NAME_C | lower(BLOOD_C) | | 村何友好  | o型 | | 友竹大雪 | a型 | | 友崎亜吐夢 | a型 | | 来伴行友 | b型 | | 沢山友人 | o型 | ・・・・・・・・・・ +------------------+-------------------------+ 10 rows in set (0.00 sec)

selectコマンドにBLOOD_Cを追加すると、大文字の血液型も表示されます。 mysql> select NAME_C, lower(BLOOD_C), BLOOD_C from -> FRIENDS_T2; +-----------------+-------------------------+-----------------+ | NAME_C | lower(BLOOD_C) | BLOOD_C | | 村何友好  | o型 | O型 | | 友竹大雪 | a型 | A型 | | 友崎亜吐夢 | a型 | A型 | ・・・・・・・・・・   関数を使って表示させるということは、テーブル中の値が小文字の値に置き換えられるわけではなく、データを小文字に変換して表示しているだけである。

◆算術演算子を使った計算 ・加減乗除 算術演算子を使って、取り出した数値データになんらかの計算を行って結果を表示させることが可能です。    算術演算子を使って、取り出した数値データになんらかの計算を行って結果を表示させることが可能です。 + 足し算(加算) - 引き算(減算) * 掛け算(乗算) / 割り算(除算) % 割り算の余り(剰余)  剰余演算に関しては、小数を使用する場合、整数に変換(四捨五入)してから行います。

テーブル中の1つのカラムのデータで計算を行い、その計算結果を別のカラムを設けて表示させます。   テーブル中の1つのカラムのデータで計算を行い、その計算結果を別のカラムを設けて表示させます。 mysql> select ID_C, NAME_C, AGE_C, AGE_C+10 as “10年後” -> from FRIENDS_T2; +---------+------------------+------------+------------+ | ID_C | NAME_C | AGE_C | 10年後 | |   10 | 村何友好 | 48 | 58 | | 9 | 友竹大雪 | 27 | 37 | | 8 | 友崎亜吐夢 | 56 | 66 | | 7 | 来伴行友 | 33 | 43 | | 6 | 沢山友人 | 24 | 34 | | 5 | 是田良友 | 32 | 42 | | 4 | 出雲友子 | 38 | 48 | | 3 | 友田智香 | 17 | 27 | | 2 | 小友達夫 | 45 | 55 | | 1 | 大友達子 | 23 | 33 | +---------+------------------+-------------+------------+ 10 rows in set (0.00 sec)

西暦2000年から年齢を引いて、何年生まれか計算します。  西暦2000年から年齢を引いて、何年生まれか計算します。 mysql> select ID_C, NAME_C, AGE_C, 2000-AGE_C as “誕生年” -> from FRIENDS_T2; +---------+------------------+------------+------------+ | ID_C | NAME_C | AGE_C | 誕生年 | |   10 | 村何友好 | 48 | 1952 | | 9 | 友竹大雪 | 27 | 1973 | | 8 | 友崎亜吐夢 | 56 | 1944 | | 7 | 来伴行友 | 33 | 1967 | | 6 | 沢山友人 | 24 | 1976 | | 5 | 是田良友 | 32 | 1968 | | 4 | 出雲友子 | 38 | 1962 | | 3 | 友田智香 | 17 | 1983 | | 2 | 小友達夫 | 45 | 1955 | | 1 | 大友達子 | 23 | 1977 | +---------+------------------+-------------+------------+ 10 rows in set (0.00 sec)

割り算の例として、34.3という平均年齢で年齢を割り、対平均年齢の比率を出してみます。   割り算の例として、34.3という平均年齢で年齢を割り、対平均年齢の比率を出してみます。 mysql> select ID_C, NAME_C, AGE_C, AGE_C / 34.3 as -> “対平均年齢” from FRIENDS_T2; +---------+------------------+------------+------------------+ | ID_C | NAME_C | AGE_C | 対平均年齢 | |   10 | 村何友好 | 48 | 1.399 | | 9 | 友竹大雪 | 27 | 0.787 | | 8 | 友崎亜吐夢 | 56 | 1.633 | | 7 | 来伴行友 | 33 | 0.962 | | 6 | 沢山友人 | 24 | 0.700 | | 5 | 是田良友 | 32 | 0.933 | ・・・・・・・ +---------+------------------+-------------+------------+ 10 rows in set (0.00 sec)  34.3という数字ではなく、avg(AGE_C)を使って計算すると、group byを使用していないので、エラーになります。

算術演算子は、where句の中やhaving句の中でも使うことができます。「計算結果がある条件を満たすかどうか」という指定が可能です。    10年後の年齢が40歳以下の人を取り出します。where句の中にAGE_C <= 40を記述します。この場合、selectあとにAGE_C+10を記述しなければ、結果セットに10を足した数値のカラムを表示することはできません。 mysql> select ID_C, NAME_C, AGE_C, from FRIENDS_T2 where -> AGE_C+10 <= 40; +---------+------------------+------------+ | ID_C | NAME_C | AGE_C | | 9 | 友竹大雪 | 27 | | 6 | 沢山友人 | 24 | | 3 | 友田知香 | 17 | | 1 | 大友達子 | 23 | +---------+-------------------|-------------+ 4 rows in set(0.00)

条件句の中で計算結果を利用する方法ですが、今度は2つの条件を設定します。これらはandを使って結びつけます。     現在30歳以上で、5年後に40歳以下の人を取り出します。where句で30歳以下を指定し、その結果に対して5を足したものが40以下であるレコードを結果セットとします。 mysql> select NAME_C, AGE_C, from FRIENDS_T2 -> where AGE_C >= 30 and AGE_C+5 <= 40; +------------------+------------+ | NAME_C | AGE_C | | 来伴行友 | 33 | | 是田良友 | 32 | +-------------------|-------------+ 2 rows in set(0.00 sec)

◆Null値の計算 算術演算子や関数を使って、Null値を含むデータを計算した場合は、Null値が返ってきます。 mysql> select null+31; +------------+ | null+31 | | NULL | 1 row in set(0.00 sec) mysql> select sin(null); | sin(null) | | NULL |

◆計算結果をカラムに入力する方法 計算結果をカラムに追加します。    計算結果をカラムに追加します。 mysql> alter table FRIENDS_T2 add AGE10_C int; Query OK, 10 rows affected (0.01 sec) Records: 10 Duplicates: 0 Warnings: 0 mysql> update FRIENDS_T2 set AGE10_C = AGE_C+10; Query OK, 10 rows affected (0.00 sec) Rows matched: 10 Changed: 10 Warnings: 0 mysql> select * from FRIENDS_T2; +---------+----------------+-----------------------------------+------------+-----------------+---------------+ | ID_C | NAME_C | ADD_C | AGE_C | BLOOD_C | AGE10_C | +---------+----------------+-----------------------------------+------------+-----------------+----------------+ | 10 | 村何友好 | 愛媛県愛媛市何処町4-2-5 | 48 | O型 | 58 | | 9 | 友竹大雪 | 大阪府大阪市何処町4-2-5 | 27 | A型 | 37 | ・・・・・・ 10 rows in set(0.00 sec)