cafemapのテーブル結合できました!

LEFT JOINで結合。

こんばんは!

paizaのDB/SQLの動画をおさらいしつつ、テーブル結合をやってみたらできたので、方法を共有したいと思います。

1、Xammpのコントロールパネルの中の、MysqlのAdminをクリック

2、結合したいテーブル名と、項目の名前を確認する。

今回私が結合したかったのが、”shopsテーブル”id”items”テーブルのshop_idでした。

3、データベースの上部のSQLタブをクリック。

4、ここに下記命令文(ダブルクォーテーションは除く)を書いて実行。

”SELECT * FROM shops LEFT JOIN items ON items.shop_id = shops.id;”

そうすると↓こんな感じで結合できます!やった~!:)

はい。今日の共有事項は以上です!

最近の私の小さな楽しみ。。

「仕事帰りの休憩室で10分だけピアノの練習。(人が少ない時限定)」

なのですが。外が寒いせいなのかな?

休憩室が人気で、ここ数日なかなか弾けないのでした。。(笑)

でも「悲愴」の出だし弾けるようになってきた。わーい(*´ー`*)

忘れないうちにまた弾けたらいいな。

皆様は「私だけの小さな楽しみ。。」とかありますか?

そういうのがあると、疲れてても回復できるし、自分の中で若干テンションもあがるし良いですよね:)

安住紳一郎の日曜天国(ラジオ)でありそうなお題だけど。人の密かな楽しみを知るのも面白くて大好きです。

それでは。ご覧いただきありがとうございました:)

今日も一日お疲れさまでした!

DB/SQL サブクエリを使う

paiza DB/SQL入門編

こんばんは!

今日はSQLでクロス集計をする方法などなど・・をやりました。

毎日1チャプターづつ、進めていたのですが、

ちょっと強引にSQLを終わらせました(笑)

はい。ひとまず終了!:)

これからどんどん技術が進歩していったらもっと簡単にコードをかけたり、

DBの設定なんて不要になっていくのでは?と考えています。

これからの時代、5G時代がやって来た時にどんな知識やスキルが必要になるのかな。

既に”youtuber”は”職業”として成り立つようになっているけど、

「VLOG」として、普段の生活や、趣味や、お得情報や、なんやかんやの

「自分の好き」や「自分の生活」、「自分のチャレンジ」、「自分の意見・知識」

を発信してかなり再生回数回している人が多く居ますよね。

少し前に言われていた”個人の時代”が完全に来ているんだなぁ。と感じました。

意外と「自分の好きな事を楽しむ・追及する」っていうのがどんな知識やスキルよりも人の役に立ったり、必要とされる事に繋がっていくのかも?

なんて思います:)

令和。。良い時代ですね(*´ー`*)

それでは、今日はこの辺りで!

ご覧いただきありがとうございました!

DB/SQL SQLを使ってテキスト検索

paiza DB/SQL入門編

こんばんは!

最近、電車の中と降りた後の気温差が激しいですよね(Θ_Θ)

「サウナと水風呂」級なので体温調節が難しいですよね。

さて、今日はpaizaのDB/SQL入門編の続きで「テキスト検索の方法」を学びました。

「%ムラサキイモ%」で実行すると、「ムラサキイモ」が含まれる文字を検索できるという感じ。。

SQLでテキスト検索っていつ使うのか。。

イメージがあまりつかなかいですが、きっとそのうち役に立つのかも?:)

先日訓練校の頃の仲間と勉強法について話しをした時に、「遅延勉強法」というワードが出た。

遅延勉強法っていうのは、

「必要になったら、必要なところを勉強する」 というもの。

「〇〇を勉強したから××をやる」ではなくて、「××をやりたいから○○を勉強する」

という事なのだけど、私は体系的に学びたいと思う反面、

よくよく考えたら、遅延勉強法の方が自分には合っているかもと思います。。

少しやり方を変えてみようかと考えています。

模索迷走中ですが、目的地は変わらず(笑)

ゆっくりですが、一歩ずつ進んでみます:)

それでは、ご覧いただきありがとうございました(*´ー`*)

DB/SQL ユーザーの年齢計算をする

paiza DB/SQL入門編

こんばんは!

今日のpaizaはSQLの命令文で計算ができる事を知りました:)

四則演算も出来るとは、ますますエクセル(笑)

今日使った関数はこの二つでした。↓

■現在の日時を求める関数
 CURRENT_DATE()) AS 現在日時
 
■二つの日付の間の期間を整数で求める
 TIMESTAMPDIFF(YEAR, (誕生日), (現在の日時))

ゲームユーザーのプレイ期間を計算するという練習問題はこんな感じ。。

SELECT
     userID AS ユーザーID,
     MIN(startTime) AS 開始日,
     MAX(endTime) AS 終了日,
     DATE(max(endTime)) - DATE(min(startTime)) +1 AS プレイ期間
 FROM
     eventlog
     GROUP BY userID;

ゲームユーザーの年齢を計算する練習問題はこんな感じ。。

SELECT
     userID AS ユーザーID,
     year(current_date()) AS 現在年,
     birth AS 生年月日,
     year(current_date())-year(birth) AS 数え年,
     Timestampdiff(year,birth,current_date()) AS 満年齢
 FROM 
     users;

でした:)

久々にyoutuberの中田あっちゃんが動画アップしたので、それ見たさに今日はこの辺りで失礼します!!(笑)

ご覧いただきありがとうございました(*´ー`*)

皆様も良い秋の夜を~♪

DB/SQL 合計や平均を集計

paiza DB/SQL入門編

こんばんは!

今日はDB/SQLの続き。データを集計する方法として、SUMやAVG(←エクセルでいうaverageの事をSQLの命令文ではこう書くらしい。)を使う事などを学びました。

「50以上の値を持っているものだけに絞りたい時」はHAVING関数を使います。

【問題】
 サンプルデータベースのeventlogテーブルから、userIDおよび合計の獲得所持金と平均の獲得所持金を表示します。ここに、HAVINGを追加して、合計の獲得所持金が50以上のユーザーだけ表示してください。 
-- ユーザーごとの合計獲得金額と平均獲得金額
 SELECT
     eventlog.userID AS "ユーザーID",
     SUM(events.increase_gold) AS "合計",
     AVG(events.increase_gold) AS "平均"
 FROM
     eventlog
     INNER JOIN events ON events.eventID = eventlog.eventID
 GROUP BY eventlog.userID
 having sum(events.increase_gold)  >= 50;

はい。やっぱりSQLの命令文ってエクセルに似ていますね:)

それでは、今日はこのあたりで!

ご覧いただきありがとうございました:)

DB/SQL 命令文一覧

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;

  ======================================= 

何かの参考になれば嬉しいです(*´ー`*)

それでは皆さん良き週末をお過ごしください♪

ご覧いただきありがとうございました:)