親です。

読んだ本とかについて書いてます

【SQL】SQLの基本的な書き方についてまとめ

おつです。SQLのについてまとめる。

SQLの三つの言語

SQLには三種類の言語がある。

  1. データ定義言語(Data Definition Language)
  2. データ操作言語(Data Manipulation Language)
  3. データ制御言語(Data Control Language)

が、書いていく時にはそーんなに意識するところもないと思うのでここではまとめて扱うことにする。

基本的な書き方

SELECTで取得したいカラムを指定してFROMでどのテーブルから取得するのか指定するやつ。

SELECT カラム名
FROM テーブル名
WHERE 条件文
ORDER BY カラム名 ASC(または DESC)
LIMIT 件数;

エクセルみたいな表を想像して欲しいんだが、カラム名ってのは列の名前のことで、テーブル名ってのが表についた名前のことだ。
条件文についてはいろんな書き方があって、WHERE カラム名 = 'やくざ';とかWHERE カラム名 >= 100;とかWHERE カラム名 LIKE '$¥%なまはげ%';とか書ける。WHERE NOT カラム名 = 100;WHERE カラム名 IS NOT NULLみたいにNOTを使うこともできる。
条件文で出てくるLIKEってのは、カラム名のうち特定の文字列を含むデータを取ってきてねという命令。%を使ってワイルドカード指定もできる。
ORDER BY は並び替え。ASCが昇順、DESCが降順だ。
LIMITは件数。5とかって書けば5件だけ出てくる。
ちな、文末の';'は絶対に忘れると思うので気をつけたい。

もうちょい発展系

重複を消す

SELECT DISTINCT(カラム名)
FROM テーブル名;

取得したデータに足したり引いたり関数かけたり

SELECT カラム名 + 1
FROM テーブル名;

こんな感じでカラム名書くところに計算式を入れられる。また、SUM(カラム名みたいな感じに組み込み関数を埋め込んだりもできる。まあでもSELECT文がめっちゃ長くなったりしたら困るから、多分個々に埋め込まなくっても良いみたいな書き方がそのうち出てくるんだと思う。

ちな、関数は他にもあって、AVGMINMAXCOUNTなどがある。

GROUP BY

また、ちょっと難しいもので、GROUP BYってのがある。

SELECT MAX(price), date
FROM table
WHERE category = 'ごま'
GROUP BY date
HAVING MAX(price) > 200;

こんな感じ。これは、tableってテーブルからcategoryがごまのもので、dateでグループ化して、priceの最大値とdateを表示したのち、MAX(price)が200を超過したものだけ表示するってこと。
新しく出てきたものについて解説すると、GROUP BYってのは文字通りグループ化するもので、これを使う時SELECTにはGROUP BYで使われたカラム名と集計関数としか書けない。
また、HAVINGWHEREと同じく条件文なのだが、違うのは条件をかけるタイミングだ。こいつはGROUP BYされたあと、条件文を適用する。ので、集計結果に対して条件をかけられたりする。

ちな、SQLのコマンドには実行の優先度があって、下記のような順番らしい。

検索:WHERE
グループ化:GROUP BY
関数:MAXなど
HAVING:HAVING

ほーん。

JOIN - テーブルの結合

JOINを使うとテーブルの結合ができる。

SELECT カラム名
FROM テーブルA
JOIN テーブルB
ON テーブルA.カラム名 = テーブルB.カラム名

こんなもん。

以上!!!