OracleにおけるWHERE句、BETWEEN句、IN句、LIKE句、ORDER BY句のまとめ
まずは基本的な句のまとめから。
WHERE句
- 文字、日付は'(シングルクォーテーション)で囲む
- 文字列の大文字小文字は区別される
- 日付データのデフォルト値はDD-MON-RR
- WHERE句では列別名は使えない!
- ただし、ORDER BY句では使用できる!*1
例。普通のSQL文です。。
id列をXYZと名前付けてこいつをWHERE句で使おうとすると…。
エラーになります。しかし、name列をXYZと名前付けてORDER BY句で使おうとすると…。
使えます!
BETWEEN '○' AND '△'
○〜△で合致するものを探す。こんなテーブルで…
nameが1から9で合致するものを探す。
1から2で合致するもの。
*2
name (NOT) IN('AA', 'BB')
AA、BBいずれかに合致すれば取得します。下図の場合はname列の中からY's IかY's II*3に合致する値を探してくるので、
こうなります。
一方、NOTは合致しないものを取得します。Y's IとY's II以外の値を取得します。
name LIKE '%AA%'
(任意の文字列)AA(任意の文字列)に合致するものを探します。他には_(アンダーバー)があります。
NAME = '%AA%'のように=で比較してしまうと完全なる%AA%この文字列と合致するものを探します。
name LIKE '%A\_A%' ESCAPE '\'
(任意の文字列)A_A(任意の文字列)を探したい時にname LIKE '%A_A%'としてしまうと、_はワイルドカードと判断されてしまうのでエスケープ。
name IS (NOT) NULL
name = NULLではUNKNOWNが返ってくるのでNULLは取得できません。また、値が設定されていないカラムはNULLとされるので、検索するにはIS NULLしかありません。=で比較してしまうと結果は不定となってしまうようです。
例。id1から5までのtimstaが値なし、つまりNULLとなっています。
timsta IS NULLでNULLの行を選択すると…。
逆に、timsta IS NOT NULLでは…。
では、timsta = NULLだと…。
なぜ=NULLがダメなのかはリレーショナル・データベースの世界>NULLにまつわる諸問題にとても詳しく書かれています。一回読んだだけじゃふーん…? くらいにしかならなかったけど><
ORDER BY
SELECT文の最後に記述。ASC(昇順)、DESC(降順)でソート可能。デフォルトはASC。
ちなみに、1, 2, 3…とかa, b, c…が昇順のはず。昇順と降順が全然覚えられなかった僕です。が!
階段を1階、2階…と昇るように昇順! これで忘れない!