ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

MySQL + SQLの概要メモ

データベースからSQLの文法でMySQLにクエリを投げて検索結果を取得する際のメモ。

ちなみに入門としては、Udemyのこちらの動画を購入して学びました。

4000人以上が購入していてとても高評価。
142本の動画は計7時間なので、休日にがっつりやれば1~2日で終われるボリュームです。
私も土日の2日間で終わりました。

半分くらいまでは簡単な内容をとても丁寧に解説されていて、素晴らしいと思う反面「書籍を買った方が良かったのでは」と不安に思い始めましたが、テーブルの結合あたりから徐々にややこしくなっていくので丁寧な解説がとてもありがたかったです。

ちなみにUdemyの再生速度は大体いつも1.25xで再生しています。

MySQLSQL とは?

MySQLはデータベースを管理するシステムの1つ
 オープンソースで無料で使える
 コマンドプロンプトから操作できる
 GUIで操作したい場合に「MySQL Workbench」といったアプリケーションもある
 https://www.mysql.com/jp/products/workbench/

SQLはデータベースを定義したり扱うための言語
 国際規格として標準化されている

MySQLインストール時の注意

インストール時に管理者のパスワードを決める工程がありますが、しばらく後に忘れてしまったりすると困ることになるのでメモっておくのをオススメします。。

忘れた場合の対処方法も色々な方が記事にされていてありがたいです。


SQLの構文

小文字大文字どちらでもOKだけど、今時は全て小文字で書く場合が多い
文末にセミコロン「;」
文字列はシングルクォーテーション「'」で囲む
コメントは「-- 」または「/*~~*/」

まず最初にどのデータベースを操作するかを指定する ‥ use データベース名;

■データベースの概念

データベース
 情報を入れる箱
 1アプリケーションでデータベースは1つが基本

テーブル
 行(ロウ)と列(カラム)の情報を持ったデータの集合
 データベース内には複数のテーブルを持たせることができる
 管理の利便性のため基本的に「id」を振る

クエリ
 データベースに対して検索や更新、削除、抽出などを要求すること
 言葉の使い方の例:クエリを投げる

■主なデータ型

数値型
 int
 tinyint
  -128~127の範囲の整数
  true/falseを扱える(0 が false, 1 が true)
  MySQLでは 0 と null が false, 空文字を含むそれ以外の全ては true
 float
 double

文字列型
 char
  固定長 255文字まで 例:char(5)
 varchar
  可変長 255文字まで 例:varchar(255)
 text
  65535文字まで

日付、時刻型
 date
  日付
  '1000-01-01' ~ '9999-12-31'
 datetime
  日付と時刻
  '1000-01-01 00:00:00.000000' ~ '9999-12-31 23:59:59.999999'
 time
  時刻
  '-838:59:59' ~ '838:59:59'

■記述順序

① select ‥ 取得する列
② from ‥ テーブルの指定
③ ~ join ‥ テーブルの結合(いくつでも結合できる)
④ where ‥ 絞り込み条件(条件は複数指定できる xx and xx and xx ...)
⑤ group by ‥ グループ化
⑥ having ‥ グループに対しての絞り込み条件
⑦ order by ‥ 並び変え条件
⑧ limit ‥ 取得する行数

■nullについて

平均を出す関数などの計算でnullは無視されるため注意が必要。
nullに対して何か演算しても結果はnullになる。
データの値がnullにならないようなるべく「0」や「""」(空文字) になるようにする。

■色々な関数

合計値 ‥ sum(*)
平均値 ‥ avg(*)
最小値 ‥ min(*)
最大値 ‥ max(*)
行数のカウント ‥ count(*)
絶対値 ‥ abs(*)
四捨五入 ‥ round(対象, 丸める桁数)
文字列の連結 ‥ concat(xx, xx, xx, ...)

■日付・時刻の関数や演算

現在の日付 ‥ current_date()
現在の時刻 ‥ current_timestamp()
n日後の日付 ‥ d + interval n day
n日前の日付 ‥ d - interval n day
n時間後の時刻 ‥ h + interval n hour
n時間前の時刻 ‥ h - interval n hour
日付・時刻から特定部を抽出 ‥ extract(指定 from カラム) = xxxxxx
 month 例:1
 year 例:2019
 year_month 例:201901

■テーブル関連

正規化 ‥ idで管理してidごとの内容の紐付けは別テーブルを参照する形にすること
主キー / Primary Key(PK)
外部キー / Foreigh Key(FK)

内部結合 ‥ inner join
外部結合 ‥ outer join(left outer join / right outer join)
テーブル末尾に別テーブルを追加 ‥ union または union all(重複行も残す)

■ビュー関連

ビュー作成 ‥ create view ~~
ビュー削除 ‥ drop view ~~
ビューの利用 ‥ select ~ from ~(ビュー名)

■サブクエリ

where xx in(select ~~ from ~~) ‥ ある値が含まれているものを探す
where xx not in(select ~~ from ~~) ‥ ある値が含まれていないものを探す

■条件分岐

case
 when ~~ then
 when ~~ then
 else ~~
end

■日付のフォーマット変更

date_format(~~, '%Y%m') ‥ 年・月のフォーマットに変更

■テーブルのデータ操作

データ追加
 insert into テーブル名(列1, 列2, 列3, ...) values(値1, 値2, 値3, ...)
データ追加 省略版
 insert テーブル名 values(値1, 値2, 値3, ...) ※ただし全列の値の指定が必要

データ変更
 set sql_safe_updates = 0; ※大量のデータを変更する際のセーフティの外し方
 update テーブル名 set 列1 = 値1, ...;

データ削除
 delete from テーブル名 where ~~

■データベース構造の操作

データベース表示 ‥ show databases;
データベース作成 ‥ create database データベース名;
データベース削除 ‥ drop database データベース名;

テーブル表示 ‥ show tables;
テーブル追加 ‥ create table テーブル名(列名 データ型, 列名 データ型, ...);
 列のオプション
  not null nullを許可しない
  auto_increment IDを自動で割り当てる
  primary key IDを主キーに設定する
テーブル削除 ‥ drop table テーブル名;

列情報の表示 ‥ show columns from テーブル名;
列の追加 ‥ alter table テーブル名 add 新しい列名 int after 既存の列名;
列の変更 ‥ alter table テーブル名 change 旧列名 新列名 データ型;
列の削除 ‥ alter table テーブル名 drop 削除したい列名;

一通り学んで、とりあえずSQLでデータベースを操作するということがどんな感じかを理解することができました!