最近、システマチックなサービスの保守業務に携わることが多くなってきたのでデータベースやSQL等の学習したことを記録していこうと思う。
と言っても、筆者自身、DBもSQLも全くの初心者なので、今回はprogateを使いながら学びを進めていくことにする。
そもそもDBとは
文字や数値などのデータを保存するためのツールを指します。DBでは表形式でデータを管理しています。
表のことを「テーブル」とよび、縦列のことを「カラム」、横の列のことを「レコード」とよびます。DBでは必要に応じて複数のテーブルを作成することが可能になっています。
クエリとは
DBではデータを取得するためにDBに送る命令「クエリ」が必要になります。
SQLはそのクエリを書くための言語になります。
・SELECT
どのカラムのデータを取得するかを選ぶのに使用します
複数のカラムを参照する場合は「,」でカラム名を接続して記述します。
全てのカラムのデータを参照する場合は「*」を使用します。
SELECTname,price;--カラム名(複数)SELECT*;--全てのカラム
・FROM
参照するDBには複数のテーブルが存在する場合があります。そのため「FROM」を用いてどのテーブルかを指示します。
SELECTname--カラム名FROMcharacter;--テーブル名
・WHERE
特定のデータを取得するために使用します。
SELECT, FROMと併用して特定のレコードのデータを取得する場合に使用します。
※データ型 ... ここでは詳しくは触れませんがデータ型によっては「"」が必要ないものがあります(例:数値...)
-- 「character」テーブル内で「name」が飛行機のレコードのデータを取得SELECT*FROMcharacterWHEREname="飛行機";
・LIKE演算子
特定の文字を場合に使用します。
指定したカラムの○○を含むレコードという条件式になります。
※このときワイルドカードを利用して前後に別の文字列が入っても一致することを示す記号を書くことで様々な文字列を指定することができます。
SELECT*FROMcharacterWHEREnameLIKE"%飛行機%";
・NOT演算子
一致しないデータや、特定の文字列を含まないデータを取得する際に使用します。
他の演算子の前に「NOT」を置くことでその条件を満たさないデータを取得できます。
-- 文字列「飛行機」を含まないデータSELECT*FROMcharacterWHERENOTnameLIKE"%飛行機%";
・IS NULL / IS NOT NULL
NULLのデータを取得する際には「カラム名 IS NULL」で指定したカラムがNULLであるデータを取得します。
またNULLではないデータを取得する場合も同様に「カラム名 IS NULL」で指定したカラムのデータがNULLでない物を取得します。
SELECT*FROMcharacterWHEREdateISNULL;
SELECT*FROMcharacterWHEREdateISNOTNULL;
・AND/OR演算子
AND演算子を使用するとWHEREに複数の条件を指定することができます。
「WHERE 条件1 AND 条件2 ...」 という風に条件1と条件2を満たすクエリを書くことができます。
またOR演算子の場合は「WHERE 条件1 OR 条件2 ...」という風に条件1または条件2を満たすクエリを書くことができます。
-- dateが2019/12/01以降でpriceが1000のデータSELECT*FROMcharacterWHEREdate>"2019-12-01"ANDprice=1000;
-- priceが1000か2000のデータSELECT*FRRMcharacterWHEREprice=1000ORprice=2000;
・ORDER BY
取得したデータを並び替えるには「ORDER BY」を使用します。
「並び替えたいカラム名」と「並び方」を指定します。
このときWHEREとOEDERは併用することができます。
SELECT*FROMcharacterORDERBYpriceDESC;-- DESC →大きい順, ASC →小さい順
LIMIT
複数のデータを取得した際に再大取得件数を指定する際に使用されます。
取得データの上から指定されたデータの件数を指定します。
このときWHEREやORDERと併用して使用することができます。
SELECT*FROMcharacterLIMIT10;
総合演習
characterのテーブルから値段の高い順に最大5件を検索結果として表示するクエリ
SELECT*FROMcharacterORDERBYpriceDESCLIMIT5;