概要
SQLについて学習した内容をまとめました。
基礎的な事ばかりですが、ITのエンジニアには業務で直接扱うことが無かったとしても重要な知識だと感じたので、忘れた頃に見直せるようにまとめてみました。
まず、1.SELECT、2.FROM、3.WHEREについて下記の例を元に補足していきます。
-- 例)
SELECT id,name
FROM foods
WHERE type='果物';
1.SELECT
検索する際に使用するSQLです。
データを取得するにあたって、どの列(カラム)を持ってくるかをこの句の後に指定します。
例えば、「id,name,type」の列を持っているテーブルに対して例文のように「id,name」だけを指定した場合「type」は取得されません。
また、ここで*(アスタリスク)を指定することで全項目を指定できます。
-- 例)
SELECT * FROM foods;
2.FROM
検索するテーブル名を指定します。
必ずFROM句の前にSELECT句を記載します。
3.WHERE
特定したフィールド(Excelでいうセル)の行(レコード)を検索します。
例文では「種類」列に「果物」と言う文字列が格納されているセルを特定しています。
IDが「3」nameが「オレンジ」typeが「果物」みたいな列があったとしたら、[3,オレンジ]のような行が結果として出力されます。
要するに例文では食材テーブルから種類が果物の行のIDと名前を検索しています。
比較演算子
WHERE句で「type='果物'」と記載している部分について、
「=」というのは等しいと言う意味ですが、他にも比較を行うための記号や構文はあるのでその例をいくつか記載しておきます。
= | 等しい |
---|---|
<>もしくは!= | 等しくない |
< | 小なり |
> | 大なり |
<= | 以下 |
>= | 以上 |
4.ORDER BY
-- 例)
SELECT id,name FROM foods WHERE type='果物' ORDER BY id;
ORDER BY の後に指定したカラムの並べ替えを行ってくれます。
また、例文で言う最後の「id」の後にスペースを開けて「DESC」と記載すると降順で並び替えてくれます。「ASC」と記載もしくは何も記載しない場合は昇順です。
こちらは複数のカラムで並び替えが可能です。
-- 例)
SELECT id,name FROM foods ORDER BY id ORDER BY name;
最初に指定しているカラムが第1ソートとして指定され、そこから2つ目3つ目と順番に優先されます。
5.NOT
-- 例)
SELECT * FROM foods WHERE NOT type='果物'
指定した条件以外のものを取得します。<>や!=などの不等号も使用可能です。
6.AND
-- 例)
SELECT * FROM foods WHERE type='果物' AND id>=10;
複数の条件を満たすものを取得します。
例ではtypeが果物かつidが10以上のものを検索しています。
7.OR
-- 例)
SELECT * FROM foods WHERE type='果物' OR name='いちご';
どちらかの条件を満たすものを取得します。
例ではtypeが果物もしくはnameがいちごのものを検索しています。
8.IN
-- 例)
SELECT * FROM foods WHERE name IN('いちご', 'メロン', 'すいか');
こちらもORと同じく複数の条件と指定していずれかを満たすものを取得します。
ですが、条件が多い時 name=〇〇 OR name=〇〇 OR name=〇〇 OR・・・みたいに記載していくよりもすっきりします。
また逆に、NOT IN('いちご', 'メロン', 'すいか')
のように記載することで、どの条件も満たさないものという条件にすることができます。
9.COUNT
-- 例)
SELECT COUNT(id) FROM foods;
いわゆる「集計関数」のひとつです。
指定したカラムのNULL以外のレコード数を数えます。
()の中で*(アスタリスク)を指定することで、単純に全体のレコード数を取得することができます。
また、WHERE句と併用することで、条件に絞った件数を取得することができます。
-- 例)
SELECT COUNT(*) FROM type='果物'; -- ※果物の件数を取得
10.GROUP BY
-- 例)
SELECT type FROM foods GROUP BY type;
指定したカラムを基準にして、レコード全体をグループ化します。
例ではtypeを基準にグループ化して、typeカラムだけを取得しているので、
出力結果としては
肉
野菜
果物
のような形になると思われます。
COUNTのような集計関数と一緒に使うことで、グループ化したカラムの集計を行うことができます。
-- 例)
SELECT type, COUNT(*) FROM foods GROUP BY type;
このように記載することで
肉 3
野菜 14
果物 9
のようにそれぞれグループ化したものの件数を集計することができます。
参考:
比較演算子について
https://www.postgresql.jp/document/8.0/html/functions-comparison.html
IN句について
https://medium-company.com/select-in/