はじめに
プログラミング入門最後です!
SQLは基本的にコマンド覚えゲーだと思ってます。
コマンドを一つ一つメモするのは、他言語以上に効率が悪いと思うのでやりません。
かといって疑問点もそこまであるかな?って気はするので短めの記事になるかも。
メモず
ワイルドカード%
とLIKE
の使い方
SELECT *
FROM table
where name like "%太郎%";
これで、「なんとか太郎」も「太郎なんとか」も「なんとか太郎なんとか」も取得できます。
でも、思ったんですよね
name = "%太郎%"
じゃダメ?なんでLIKE
使うの?
つまりこういうことです
SELECT *
FROM table
where name = "%太郎%";
そうすると……
「%太郎%」と、%
をワイルドカードではなく、文字 "%"として扱ってしまうらしい!
だから、LIKE
演算子で「この後の%
をワイルドカードとして扱ってね!」って教えてるわけですね。なるほど!
雑記:%
以外の、LIKE
によって特殊な解釈をする文字 (_
)
_
は任意の1文字を表すらしい。
SELECT *
FROM table
where name like "_太郎";
つまりこれで、"与太郎"に一致しつつ、"ハム太郎”には一致しないようにできるわけですね。
雑記:%
/ _
のエスケープ方法
%
/ _
を文字としてもワイルドカードとしても使いたいときは?
SELECT *
FROM table
WHERE name LIKE '%\%%' ESCAPE '\';
ややこしいですが、これで"100%"や、"20%引き"に一致することができます。
ESCAPE 'char'
で、どの文字をエスケープ文字として使用しているか示してるわけですね。
null
へのアクセスは = NULL
ではなくIS NULL
=
は等価かどうかを比較する演算子であり、「何もない」ものを比較できないため。
GROUP BY
の絞り込みはHAVING
良い表があったのでメモ
実行順 | 種別 | 句 |
---|---|---|
1 | 取得条件 | WHERE |
2 | グループ化 | GROUP BY |
3 | (集約)関数 | COUNT / SUM / AVG / MAX / MIN |
4 | HAVING句 | HAVING |
実行順の表
優先度は上の方が高く、下の方が後回しになる
実行順 | 種別 | 句 |
---|---|---|
高 | テーブルの指定 | FROM |
結合 | ON / JOIN | |
取得条件 | WHERE | |
グループ化 | GROUP BY | |
(集約)関数 | COUNT / SUM / AVG / MAX / MIN | |
HAVING句 | HAVING | |
検索 | SELECT / DISTINCT | |
順序 | ORDER BY | |
LIMET句 | LIMIT |
JOIN ON table1.column = table2.column
はnull
を除外する
null
のデータもつなぎたい場合は、LEFT JOIN
(table1
のnull
を除外しない)を使う。
今回は調べないけど、両方のnull
を除外しない方法もあるはず。
データの挿入:INSERT
構文は
INSERT INTO table (key1, key2) VALUES (value1, value2)
データの更新:UPDATE
構文は
UPDATE table SET key1=value1, key2=value2 WHERE key=value
WHERE
がないと、全データが更新されてしまうらしい。怖。
なんにしろ取り返しのつかない操作なので、SELECT
でちゃんと確認してから使おうね!ハーイノ
データの削除:DELETE
構文は
DELETE FROM table WHERE key=value
取り返しのつかない操作なので(以下略
終わりに
短めの記事でしたね。
SQLは触る機会が少なくて、RubyとJSみたいに「違う言語だけど感覚は一緒」みたいなこともないので、意識的に触っていきたい!