だれでもエンジニアさんの動画で、SQLのSELECTを学ぶ

はじめに
SQLは、企業のデータを扱うのに使われるから、身につけておいて損はない。
以下の動画の5:28に飛んでいただきたい。
SQLは大事
複雑になると分からないが、コツを理解すると一気にわかるようになるそうだ。

アジェンダ

全部、基礎中の基礎である。
基礎ができていないと応用が効かないということで、早速見ていこう。
SELECT FROM
kimetsuテーブルからnameとfeatureを取得したい場合を考える。

以下のSQLで実現可能だ。
SELECT name, feature FROM kimetsu;
データベースでは、表形式でデータを保存していて、表のことをテーブルと呼ぶ。列をカラム、行をレコードと呼ぶので、押さえておいて欲しい。

先ほどのデータの取得イメージはこちら。

ASを使用するとカラム名を変更できる。

*で全カラムを指定できる。

SQLを理解するコツ
元の表をどうやって加工したいかをイメージすること。

DISTINCTで重複を防ぐ
kokyuカラムには、水の呼吸が2つある。この重複なしで呼吸の一覧を取得するにはどうすればいいのか?

以下のSQLで、それを実現できる。
SELECT DISTINCT(kokyu) FROM kimetsu;
コードの実行イメージはこちら。

WHEREで条件を指定する
WHEREは、条件にあったレコードを取得したいときに使う。

【WHEREで条件指定】〜より大きい
evaテーブルに、kawaiiというカラムがある。kawaiiが5より大きいという条件を指定するにはどうすればいいのか?

以下のSQL文でそれを実現できる。
SELECT name, kawaii FROM eva WHERE kawaii > 5;
コードの実行イメージはこちら。

【WHEREで条件指定】複数 AND
複数の条件を指定したいときはどうするか?

ANDを使用する。
SELECT * FROM eva WHERE kawaii > 5 AND role = "パイロット";
コードの実行イメージはこちら。

【WHEREで条件指定】複数 OR
またはという場合。

ORを使用する。
SELECT * FROM eva WHERE kawaii > 5 OR role = "パイロット";
SQLの実行イメージはこちら。

【WHEREで条件指定】範囲指定
範囲指定をしたい場合。

以下のSQLを書こう。
SELECT * FROM eva WHERE kawaii BETWEEN 4 AND 6;
コードの実行イメージはこちら。

【WHEREで条件指定】まとめて指定
ORを使っても書けるが、冗長になってしまうので、INを使う。

コードはこちら。
SELECT * FROM eva WHERE role IN("パイロット", "作戦部長");
コードの実行イメージ。まとめて指定したいときに、INを使う。NOT INは、まとめて否定したいときに使う。

【WHEREで条件指定】曖昧検索
nameが「ア」から始まるレコードを取得したいとき。こちらは、曖昧検索と呼ばれている。

LIKEを使用して、以下のように書く。
SELECT * FROM eva WHERE name LIKE 'ア%';
コードの実行イメージはこちら。

否定する時は、NOT LIKEと書く。
詳しくはこちら。
【WHEREで条件指定】空のレコード取得
続いて、空のレコードを取得したいとき。

以下のように書く。
SELECT * FROM eva WHERE role IS NULL;
コードの実行イメージはこちら。空ではないときは、IS NOT NULLを使用する。

【WHEREで条件指定】件数の指定
レコードを2行というように制限を加えてデータを取得したい場合。

以下のように書く。
SELECT * FROM eva LIMIT 2;
コードの実行イメージはこちら。データ数が多すぎると、フリーズすることがあるので、この行数指定をすることがあるそうだ。

【WHEREで条件指定】並べ替え
続いては、並び替え。

ORDER BYを使用する。
SELET * FROM eva ORDER BY kawaii;
実行イメージはこちら。

最後にDESCをつけると降順になる。

SQLを書く上での秘訣

SELECTやWHEREなどを予約語と呼ぶ。それを大文字にしましょう。
予約語の文の後は改行する。
データが10,000件とかになってくるとサーバーに負担がかかる。それを防ぐために、SELECTで列名指定とLIMITを行う。
*で、すべてのデータを持ってくると負荷がかかってしまうが、列名を指定すれば負荷が減らせる。
LIMITで行数を制限するのもいい。
コメントを残す