Upgrade to Pro — share decks privately, control downloads, hide ads and more …

第4課 リレーショナルデータベース

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for ひでシス ひでシス
November 02, 2016
710

第4課 リレーショナルデータベース

Avatar for ひでシス

ひでシス

November 02, 2016
Tweet

Transcript

  1. リレーショナルデータベース概観 ユーザー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
  2. それぞれの名前 つぶやき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
  3. 型について データ型 例 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 12. 存在(EXISTS) SELECT name FROM users WHERE EXISTS ( SELECT

    * FROM tweets WHERE users.id = tweets.user_id ); 26
  9. なにやっているかわかりますか? 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