479 Views
January 12, 22
スライド概要
リレーショナルデータベースの基本(スライド資料とプログラム例)
https://www.kkaneko.jp/de/ds/index.html
ds-1. データベースとは,データベースシステムとは,情報とデータ
ds-2. SQL,SQL のデータ型,テーブル定義,問い合わせ(クエリ)
ds-3. ER 図,関連,異状, テーブル分解
ds-4. 問い合わせ(クエリ)
ds-5. 集計・集約
ds-6. 並べ替え(ソート)
ds-7. 結合
ds-8. データベースの異状,分解と結合
ds-9. 主キー,参照整合性制約,従属
ds-10. 中間まとめ,データベースの応用,データベースの種類
ds-11. SQL のIN,副問い合わせ
ds-12. データベースの AND,OR,NOT
ds-13. データベース操作,トランザクション,リカバリ,ロック,同時実行制御
ds-14. 従属,正規形,正規化
ds-15. さまざまなデータベース
YouTube 再生リスト「リレーショナルデータベースの基本」
https://youtube.com/playlist?list=PLwoDcGBEg9WGKPP6dExr8DcUf9nV2kYGD
金子邦彦研究室ホームページ:
https://www.kkaneko.jp/index.html
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
12. データベースの NULL, AND, OR URL: https://www.kkaneko.jp/de/ds/index.html 金子邦彦 謝辞:この資料では「いらすとや」のイラストを使用しています 1
NULL, AND, OR, BETWEEN • NULL ・・・ 未定、未知、存在しない場合は NULL • IS NULL, IS NOT NULL select * from T where 価格 IS NULL; select * from T where 価格 IS NOT NULL; • AND, OR ・・・ 条件をつなげる select CUST_ID, COST from ORDERS where COST >10 AND COST <100; • BETWEEN 「 where COST >10 AND COST <100」の代わりに BETWEEN を使うこともできる select CUST_ID, COST from ORDERS where COST BETWEEN 10 and 100; 2
アウトライン 番号 項目 12-1 データベースの NULL 12-2 NULL の演習 12-3 AND と OR 12-4 AND と OR の演習 各自、資料を読み返したり、課題に取り組んだりも行う 3
リレーショナルデータベースシステム データベースシステムの一種 コンピュータ 記憶 装置 リレーショナル リレーショナル データベース データベース 管理システム たくさんのテーブルが格納される あわせて リレーショナルデータベースシステム 4
SQL • SQL は、リレーショナルデータベースシステムの さまざまな機能を使える言語 問い合わせ(クエリ)、 テーブル定義、 その他の操作 5
SQL による問い合わせ(クエリ)の例 ① SELECT * FROM 商品; ② SELECT 名前, 単価 FROM 商品; ③ SELECT 名前, 単価 FROM 商品 WHERE 単価 > 80; ④ SELECT 受講者, COUNT(*) FROM 成績 GROUP BY 受講者; ⑤ SELECT * FROM 米国成人調査データ ORDER BY 年齢; ⑥ SELECT * FROM T, S; ⑦ SELECT * FROM T, S WHERE a = b; ⑧ SELECT * FROM 授業 WHERE 教室名 IN ('一階', '二階'); ⑨ SELECT DISTINCT 学生番号 FROM 成績 WHERE 科目名 IN (SELECT 科目名 FROM 成績 WHERE 学生番号 = 101); 6
Access で SQLビューを開く. ①「作成」タブで、 「クエリデザイン」 をクリック このような 表示が出た ときは 「閉じる」を クリック ②「デザイン」タブで、 「表示」を展開し「SQL ビュー」を選ぶ 7
12-1. データベースの NULL 8
データベースの NULL • データ化できないものは、NULL 未定 (将来決まるかも) 未知 (将来分かるかも) 存在しない (そもそも存在しない) 自由席の切符に座席番号は存在しない 試合をしていないとき勝率は存在しない NULL は「ヌル」あるいは「ナル」と読む 9
NULL を使う例(1) • カレーライスの値段が,まだ決まっていない(未 定) 商品 かき氷 カレーライス サイダー 価格 400 NULL 200 値段は,必ず決まるはずだが, まだ決まっていない 10
NULL を使う例(2) • 試合をしていないので,勝率は存在しない チーム名 試合数 勝ち数 A 10 6 B 4 3 C 0 0 勝率 0.6 0.75 NULL 試合をしていないので, 勝率は存在しない 11
NULLと「0」は違う 商品 かき氷 カレーライス サイダー 価格 400 NULL 200 値段は,まだ決まっていない あるいは,知らない 商品 かき氷 カレーライス サイダー 価格 400 0 200 カレーライスは無料 NULL を使い,未定,未知,非存在であること を正しく記録 12
NULLと「0」は違う • 試合をしていないので,勝率は存在しない(非存 在) チーム 試合数 勝ち 名 数 A 10 6 B 4 3 C 0 0 勝率 0.6 0.75 NULL 試合をしていないので, 勝率は存在しない チーム 試合数 勝ち 名 数 A 10 6 B 4 3 C 0 0 勝率 0.6 0.75 0 勝率が 0 であると記録 するのは,そもそもおかしい 13
12-2. NULL の演習 14
SQL で NULL についての条件を扱うとき • 「NULL である」という条件: IS NULL • 「NULL でない」という条件: IS NOT NULL 15
IS NULL テーブル名: T 商品 かき氷 カレーライス サイダー 価格 400 NULL 200 paiza.IO マイクロソフト Access select * マイクロソフト Access from T では NULL が空文字で where 価格 IS NULL; 表示されるので注意 16
IS NOT NULL テーブル名: T 商品 かき氷 カレーライス サイダー paiza.IO 価格 400 NULL 200 マイクロソフト Access select * from T where 価格 IS NOT NULL; 17
演習用のデータベースファイル • 演習用の Access データベースファイル セレッソの利用者は,セレッソからもダウンロード可能 ファイル名: d12.accdb • 「コンテンツの有効化」のメッセージが出たときは、確認 のうえ、次にすすむ • つぎのような表示が出たときは、確認のうえ、「はい」 18
テーブル T を使用 マイクロソフト Access では NULL が空文字で 表示されるので注意 19
select * from T where 価格 IS NULL; IS NULL を使用 商品 かき氷 カレーライス サイダー 価格 400 NULL 200 マイクロソフト Access では NULL が空文字で 表示されるので注意 20
select * from T where 価格 IS NOT NULL; IS NOT NULL を使用 商品 かき氷 カレーライス サイダー 価格 400 NULL 200 マイクロソフト Access では NULL が空文字で 表示されるので注意 21
12-3. AND と OR 22
リレーショナルデータベースシステムでの AND と OR • SQL で,複数の条件をつなげる場合 <条件> AND <条件> <条件> OR <条件> ※ OR は,「どちらかを選んでください」という意 味ではないので、いまから説明 23
二進数は 0 または 1 右手が上がっていない 右手が上がっている 二通り 24
二進数は 0 または 1 右手が上がっていない 右手が上がっている FALSE TRUE 25
変数が2つ 右手と左手の 両方を考えると 4通り 26
変数が2つ FALSE と FALSE TRUE と FALSE FALSE と TRUE TRUE と TRUE 27
AND FALSE と FALSE TRUE と FALSE FALSE と TRUE TRUE と TRUE AND は両方とも1 28
OR FALSE と FALSE TRUE と FALSE TRUE と TRUE FALSE と TRUE OR は 少なくとも 片方には 1がある 29
OR は「どちらかを選びなさい」という意味ではない とんこつラーメン 食べない:FALSE 食べる:TRUE 醤油ラーメン 食べない:FALSE とんこつラーメン 食べる:TRUE どちらか食べても、両方食べても OK! (これが OR の鉄則) ※ 醤油ラーメン 「どちらかを選べ」 という意味ではない 30
AND と OR の表 FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE AND FALSE TRUE FALSE FALSE TRUE TRUE TRUE TRUE OR 31
12-4 AND と OR の演習 32
SQL での AND と OR <条件> AND <別の条件> 2つの条件が,両方とも成り立つものを選ぶ <条件> OR <別の条件> 2つの条件が,1つでも良いので成り立つものを選ぶ (両方等も成立する場合でもOK) 33
ANDの例 元データ select * from 授業 where 科目 = '国語' AND 教室名 = '一階'; 34
OR の例 元データ select * from 授業 where 科目 = '国語' OR 教室名 = '一階'; 35
演習用のデータベースファイル テーブル 授業,成績 を使用 36
ID 1 2 3 4 5 担当者 AA BB CC AA XX 科目 教室名 国語 一階 国語 二階 国語 三階 算数 一階 算数 二階 曜日 37 月 月 月 火 火
select * from 授業; テーブル「授業」をそのまま表示 38
select * from 授業 where 科目 = '国語'; 選択(AND, OR などはない) 39
select * from 授業 where 教室名 = '一階'; 選択(AND, OR などはない) 40
select * from 授業 where 科目 = '国語' AND 教室名 = '一階'; AND の例 41
select * from 授業 where 科目 = '国語' OR 教室名 = '一階'; OR の例 42
ANDの例 select * from 授業 where 科目 = '国語'; select * select * from 授業 from 授業 where 科目 = '国語' AND 教室名 = '一階'; where 教室名 = '一階'; 43
OR の例 select * from 授業 where 科目 = '国語'; select * select * from 授業 from 授業 where 科目 = '国語' OR 教室名 = '一階'; where 教室名 = '一階'; 44
いまから行うこと select 科目, 学生番号, 得点 結合条件なし from 授業, 成績; select 科目, 学生番号, 得点 from 授業, 成績 結合条件あり where 授業.ID = 成績.科目番号; select 科目, 学生番号, 得点 from 授業, 成績 AND を使用 where 授業.ID = 成績.科目番号 AND 学生番号 = 101; 45
select 科目, 学生番号, 得点 from 授業, 成績; すべてのペア 46
select 科目, 学生番号, 得点 from 授業, 成績 where 授業.ID = 成績.科目番号; 結合条件あり 47
select 科目, 学生番号, 得点 from 授業, 成績 where 授業.ID = 成績.科目番号 AND 学生番号 = 101; 条件 AND 条件 48
12-5. Paiza.IO による演習 49
Paiza.IO の使い方 ① ウェブブラウザを起動する ② 次の URL を開く https://paiza.io/ ③ もし,表示が英語になっていたら,日本語に切り 替える
④ 「コード作成を試してみる」をクリック ⑤ 「MySQL」を選ぶ(左上のボタンをクリックするとメニューが出る)
プログラムの 編集画面 プログラムを 書き換えること ができる 実行ボタン 52
編集画面を確認する。 すでに、SQL が入っているが、使わないので消す。
• NULL の演習のため,次の SQL を入れ,実行結果 を確認 54
• 次の SQL を入れる(次へ続く) 55
• 次の SQL を書き加える。ここまで入れたSQLは後 で使う。(次へ続く) 56
• 次の SQL を実行.結果を確認 57
• 次の SQL を実行.結果を確認 58
• 次の SQL を実行.結果を確認 59
• 次の SQL を実行.結果を確認 60
• 次の SQL を実行.結果を確認 61
• 次の SQL を実行.結果を確認 62
• 次の SQL を実行.結果を確認 63
• 次の SQL を実行.結果を確認 64
NULL, AND, OR, BETWEEN • NULL ・・・ 未定、未知、存在しない場合は NULL • IS NULL, IS NOT NULL select * from T where 価格 IS NULL; select * from T where 価格 IS NOT NULL; • AND, OR ・・・ 条件をつなげる select CUST_ID, COST from ORDERS where COST >10 AND COST <100; • BETWEEN 「 where COST >10 AND COST <100」の代わりに BETWEEN を使うこともできる select CUST_ID, COST from ORDERS where COST BETWEEN 10 and 100; 65