はじめに
SQLについて学習している入社1年目のSEです。『SQL書き方ドリル』のテーブルデータをMariaDBに移してクエリの練習をしています。アウトプットのために学んだクエリを書いていきます。今回はSELECT文の中でも超超基本的な内容です。
間違っていたら優しくご指摘をいただければと思います。
#SELECT
SQLで一番最初に使ったクエリ。初めて見たときは、SELECTよりもカラムって何だ!?となりました。column(行)とrow(列)のことだったんですね。いろいろ恥ずかしい…。
データが入っているテーブルを指定して、指定したカラムを表示することができます。
SELECT カラム名 FROM テーブル名;
#WHERE
WHERE句を使うとSELECTする対象を絞り込むことができます。
SELECT カラム名 FROM テーブル名 WHERE 条件式;
--文字列を指定したいとき(完全一致)
SELECT カラム名 FROM テーブル名 WHERE 対象 LIKE '文字列';
--文字列を指定したいとき(部分一致)
SELECT カラム名 FROM テーブル名 WHERE 対象 LIKE '%文字列%';
#GROUP BY
GROUP BY句を使うことによって、特定のカラムで行をグループ分けできる。
SELECT カラム名 FROM テーブル名 GROUP BY まとめたいカラム名;
以下の文では、StudentClassでグループ化して、SCHOOLテーブルから、クラスごとに生徒の数をカウントしています。
SELECT StudentClass AS クラス, COUNT(*) AS 生徒数 FROM SCHOOL GROUP BY StudentClass;
結果として、下の表が得られました。
+-----------+-----------+
| クラス | 生徒数 |
+-----------+-----------+
| A | 2 |
| B | 3 |
| C | 1 |
+-----------+-----------+
このように、GROUP BY句は集合関数(AVG、SUM、COUNTなど)と一緒に使ってグループ化⇒集計までやることができます。
#HAVING句
つい最近まで、WHERE句とHAVING句の区別がついていませんでした…。恥ずかしい…。
WHERE句の対象はカラムに入っている値ですが、HAVING句の対象は集合関数の計算結果です。
WHERE句ではカラムの値ごとに、条件に当てはまっているか真偽を判定しますが、HAVING句では、集合関数の計算結果をフィルタにかけることができます。
たとえば、先ほどのSCHOOLテーブルで、生徒の数が2人以上のクラスを調べたいときに使います。
例えば、先ほどのSCHOOLテーブルで、HAVING句を使うことによって生徒数が2人以上のクラスを調べることができます。
SELECT StudentClass AS クラス, COUNT(*) AS 生徒数 FROM SCHOOL GROUP BY StudentClass HAVING COUNT(*) >= 2;
マンツーマンレッスンのCクラスが除外されて表が出力されます。
+-----------+-----------+
| クラス | 生徒数 |
+-----------+-----------+
| A | 2 |
| B | 3 |
+-----------+-----------+
#おわりに
初めての記事で、超初歩的なうえに短いですが、Qiitaの記事を書くのはとても大変ですね…。記事を書かれている先輩方を心の底からリスペクトします。SQLに関してはまだまだ入り口にも立ってないくらいですが、とても奥が深く、面白いので知識を深めて使えるようになりたいと思います。