Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
第4課 リレーショナルデータベース
Search
ひでシス
November 02, 2016
720
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
第4課 リレーショナルデータベース
http://onemonthweb.hatenablog.com/
ひでシス
November 02, 2016
More Decks by ひでシス
See All by ひでシス
第3課 書いたコードを管理する(Git)
hidesys
0
820
第2課 Rubyでプログラミング
hidesys
0
820
第1課 Linuxことはじめ
hidesys
0
900
第1課 Linuxことはじめ 事前準備
hidesys
0
270
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
330
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
Faster Mobile Websites
deanohume
310
32k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
960
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
600
Crafting Experiences
bethany
1
210
Transcript
リレーショナルデータベース ひでシス=めぐみ・西岡 (@hidesys) 1
第4課の内容 • リレーショナルデータベースの操作を学ぶ – リレーショナルデータベースとはなにか – テーブルの作り方、データの挿入の仕方 2
リレーショナルデータベースとは 3
リレーショナルデータベース概観 ユーザーID 名前 メールアドレス 1 ひでシス
[email protected]
2 西岡めぐみ
[email protected]
つぶやきID ユーザーID つぶやき 投稿時間 1 1 ちんぽ 2016/11/02 17:13 2 2 ああああああ!!!! 2016/11/02 17:15 3 1 ちんちん 2016/11/02 17:20 4 1 ちん 2016/11/02 17:21 5 2 ああああああああ!!!!!! 2016/11/02 17:25 6 1 ぽ 2016/11/02 17:34 1 0-多 ユーザーテーブル つぶやきテーブル 4
それぞれの名前 つぶやきID ユーザーID つぶやき 投稿時間 1 1 ちんぽ 2016/11/02 17:13
2 2 ああああああ!!!! 2016/11/02 17:15 3 1 ちんちん 2016/11/02 17:20 4 1 ちん 2016/11/02 17:21 5 2 ああああああああ!!!!!! 2016/11/02 17:25 6 1 ぽ 2016/11/02 17:34 つぶやきテーブル テーブル名 属性(列) 順不同 組(行) 順不同 複数のテーブルをまとめて、「データベース」という 5
リレーショナルデータベースとは • もっとも広く用いられているデータベースモデ ル • SQL(など)の問い合わせ言語を用いて、制 限・射影・結合・和・差・交わりなどの関係代 数演算(集合演算を含む)ないし関係論理演 算を行うことで結果を取り出す。 6
リレーショナルデータベースの製品 • SQLite3 – 軽量で小規模向け – FirefoxのURL履歴やmantropy.netに使われている – ワシの修論もこれを使った •
MySQL – 最も普及している • PostgreSQL • Microsoft SQL Server 7
リレーショナルデータベースを使う 8
今日はSQLiteを使います • データベースが1ファイルで便利 • ユーザー制御がなくて便利 • 簡単に試せる • Windowsでも使える 9
教材をダウンロードしてください `git clone https://github.com/onemonthweb/sql-teaching.git` 10
型について データ型 例 Ruby SQLite3 MySQL 整数 21341 Fixnum INTEGER,
NUMERIC Int 浮動小数点数 値 1.3423 Float REAL Float 文字列 "あああああ" String TEXT Char, Text 日付時刻 2016/11/02 17:35:00 Date, DateTime TEXT DateTime 配列 [1, 34, 3.23, "あ ああ"] Array ない ない ハッシュ {075 => "Kyoto", 03 => "Tokyo"} Hash ない ない 真偽値 true TrueClass, FalseClass NUMERIC Boolean 11
SQLite3の実行 • `sqlite3 twitter.sqlite3` – `sqlite3 データベースファイル名`でデータベース を開く – 教材ディレクトリの中でデータベースを作ってくだ
さい 12
SQLite3の初期設定 • `.headers on` – これでデータ表示時にヘッダが出力される – . から始まるものはSQLite特有のコマンドです •
`.echo on` – これで実行されるコマンドが表示されるようになり ます 13
SQLite3で出来合いSQL文を読み込む • `.read 1-create.sql` – SQLite3のコマンドを利用してファイルを読み込ん で実行します – `.echo on`されていないと何が実行されているの
かわかりません – [TAB]キーで補完ができます 14
1. 表を作る(CREATE) CREATE TABLE tweets ( id INTEGER PRIMARY KEY
AUTOINCREMENT, user_id INTEGER, tweet TEXT, posted_at TEXT ); CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT ); 15
2. データの挿入(INSERT) INSERT INTO users (name, email) VALUES ("hidesys", "
[email protected]
");
INSERT INTO tweets (user_id, tweet, posted_at) VALUES (1, "aaaaaa", "2016/11/02 18:00:00"); 16
3. データを見る(SELECT) SELECT * FROM users; 17
4. データの選択(WHERE) SELECT * FROM users WHERE id = 1;
18
5. データの射影(SELECT) SELECT name, email FROM users; 19
6. 結合(JOIN) SELECT users.name, tweets.tweet, tweets.posted_at FROM tweets INNER JOIN
users ON users.id = tweets.user_id; 20
7. グループ化(GROUP BY) SELECT user_id, COUNT(*) FROM tweets GROUP BY
user_id; 21
8. グループ後に条件を加える (HAVING) SELECT user_id, COUNT(*) FROM tweets GROUP BY
user_id HAVING COUNT(*) > 3; 22
9. 別名(AS) SELECT user_id, COUNT(*) AS tweet_count FROM tweets GROUP
BY user_id HAVING tweet_count > 3; 23
10. 並び替え(ORDER BY) SELECT user_id, COUNT(*) AS tweet_count FROM tweets
GROUP BY user_id HAVING tweet_count > 3 ORDER BY tweet_count; SELECT * FROM tweets ORDER BY user_id; SELECT * FROM tweets ORDER BY user_id DESC; 24
11. リストの中にある(IN) SELECT * FROM tweets WHERE user_id = 2
OR user_id = 4 OR user_id = 5; SELECT * FROM tweets WHERE user_id IN (2, 4, 5); 25
12. 存在(EXISTS) SELECT name FROM users WHERE EXISTS ( SELECT
* FROM tweets WHERE users.id = tweets.user_id ); 26
なにやっているかわかりますか? SELECT u.name, t2.tweet_count FROM users AS u INNER JOIN
( SELECT user_id, COUNT(*) AS tweet_count FROM tweets AS t GROUP BY user_id HAVING tweet_count >= 2 ) AS t2 ON u.id = t2.user_id ORDER BY t2.tweet_count DESC; 27