paiza DB/SQL入門編
こんばんは!
今日は少し気分を変える為、PHPの復習ではなく、DB/SQL入門編のイーラーニングをしてみました!
データベース操作言語のSQLの基本的なテクニックを学習できるもので、
ログ解析 、アクティブユーザーを調べたり、集計できるというあたりが、現在の仕事にかかわる所でもあってPHPよりもだいぶ興味を持ってできました:)

一流盗賊!・・・盗賊は・・あまり嬉しくないですね。笑
一流になるならもっと別の”魔法使い”とか”パラディン”とかが良いんだけどな:)
さて、自分の備忘録とSQLの基礎を勉強中の方の為に、入門編2のチャプター4までで使用した、SQLの命令文一覧を載せておきます。
======================================= -- 全てのデータを取り出す SELECT * FROM players; -- 一部のカラムだけ取得する SELECT name, level FROM players; -- 一部の行だけ取得する SELECT * FROM players WHERE level >= 7; -- 複数の条件を組み合わせる SELECT * FROM players WHERE level >= 7 AND job_id <> 6; --条件指定とカラム選択を組み合わせる SELECT name, level FROM players WHERE level >= 7; 「where」の条件指定たち a = b a と b が等しい level = 10 a < b a が b よりも小さい level < 15 a > b a が b よりも大きい level > 7 a <= b a が b 以下である level >= 15 a >= b a が b 以上である level >= 7 a <> b a と b が等しくない level <> 1 【データを表示する】======================================= -- データ件数を表示する SELECT COUNT(*) FROM players; --条件に合ったデータの件数を表示する SELECT COUNT(*) FROM players WHERE job_id = 6; -- データを並び替えて取得する SELECT * FROM players ORDER BY level; -- データを並び替えて取得する 逆順 SELECT * FROM players ORDER BY level DESC; --上位3件だけ表示す SELECT * FROM players ORDER BY level DESC LIMIT 3; -- 職業ごとに人数を集計する SELECT job_id, COUNT(*) FROM players GROUP BY job_id; 【データの追加削除】======================================= -- データを追加する INSERT INTO players(id,name,level,job_id) VALUES(11, "霧島1号", 1, 1); -- データを追加して表示する INSERT INTO players(id,name,level,job_id) VALUES(12, "霧島2号", 1, 1); SELECT * FROM players; -- 一度に複数のデータを追加する INSERT INTO players(id,name,level,job_id) VALUES (13, "霧島3号", 1, 1), (14, "霧島4号", 1, 1) ; SELECT * FROM players; -- データを更新する UPDATE players SET level = 10 WHERE id = 11; SELECT * FROM players; -- データを更新する。1増加 UPDATE players SET level = level + 1 WHERE id = 12; SELECT * FROM players; -- データを削除する DELETE FROM players WHERE id = 13; SELECT * FROM players; -- データを削除する DELETE FROM players WHERE id >= 11; SELECT * FROM players; 【テーブル結合】======================================= -- テーブルを結合して表示する(内部結合) SELECT * FROM players INNER JOIN jobs ON jobs.id = players.job_id; -- テーブルを結合して表示する(左結合) SELECT * FROM players LEFT JOIN jobs ON jobs.id = players.job_id; -- テーブルを結合して表示する(右結合) SELECT * FROM players RIGHT JOIN jobs ON jobs.id = players.job_id; 【結合したテーブルの操作】================================= -- 結合したテーブルを操作する SELECT * FROM players INNER JOIN jobs ON jobs.id = players.job_id; -- 結合したテーブルで、指定カラムだけ表示 SELECT name, level, vitality FROM players INNER JOIN jobs ON jobs.id = players.job_id; -- 結合したテーブルで、条件に合った行だけ表示 SELECT name, level, strength FROM players INNER JOIN jobs ON jobs.id = players.job_id WHERE strength >= 5; -- 職業ごとに人数を集計する SELECT job_id, job_name, COUNT(*) FROM players INNER JOIN jobs ON jobs.id = players.job_id GROUP BY job_id; エラーが出て実行されない時は以下をチェック。 ※SELECTのカンマ忘れ、カンマ多すぎ注意! ※テーブル連結時のテーブル名不足! ※WHEREでAND忘れ! 【SQLのログ解析】 ======================================= -- 日次のアクセス数を求める SELECT DATE(startTime), COUNT(logID) FROM eventlog GROUP BY DATE(startTime); -- ある期間のアクセス数を求める SELECT DATE(startTime), COUNT(logID) FROM eventlog WHERE DATE(startTime) BETWEEN "2015-04-01" AND "2015-04-30" GROUP BY DATE(startTime); -- 月次のアクセス数を求める SELECT DATE_FORMAT(startTime, '%Y-%m'), COUNT(logID) FROM eventlog GROUP BY DATE_FORMAT(startTime, '%Y-%m'); --カラム名を別名で表示する SELECT userID AS "アクティブユーザー" FROM users; --重複した行を省いて表示する SELECT DISTINCT userID AS "アクティブユーザー" FROM users; --空のカラムの行を表示する SELECT userID AS "アクティブユーザー" FROM users WHERE deleted_at IS NULL; =======================================
何かの参考になれば嬉しいです(*´ー`*)
それでは皆さん良き週末をお過ごしください♪
ご覧いただきありがとうございました:)