SQL文で複数の部分一致をきれいに書きたい。
SQL文の話です。
データベース(DB)やアプリの導入に関しては、誰かがやってくれるはず!
と他力本願でいきたいと思います。
今回は言いたいことは、SQL文で
「複数一致 (部分) が OR で連結するしかできない。」
です。
(OR 以外でできるよという方がいらっしゃいましたら、
ぜひ教えて下さい。お願い致します。切実。)
「複数一致 (部分) 」ってなんぞやと思う方は、
下記のおさらいを見て(読んで?)ください。
----------おさらい----------
DB情報
バージョン : Oracle9i 9.2.0.8
オブジェクト名: data_table
|SID |スキーマ|タイプ|カラム|
|TEST| USER_A | TABLE|ID, dName, dValue|
|ID|dName|dValue|
|1|ABCDEF|100|
|2|DEFGHI|1000|
|3|GHIABC|10|
|4|ABCGHI|10|
|5|GHIDEF|100|
|6|DEFABC|1000|
■ レコードの抽出クエリ
DBのレコードをある特定の条件で抽出する。
SELECT (カラム名) FROM (オブジェクト名) WHERE (条件)
■ 完全一致
・演算子「=」を使用する。
式
SELECT * FROM data_table
WHERE dName = ‘ABCDEF’
結果
|ID|dName|dValue|
|1|ABCDEF|100|
■ 部分一致
・演算子「like」とワイルドカード「%」を使用する。
(ワイルドカードを用いらないと、完全一致となります。)
(「*」はlikeのワイルドカードにならない。(このVerのOracleだから?))
式
SELECT * FROM data_table
WHERE dName = ‘ABC%’
結果
|ID|dName|dValue|
|1|ABCDEF|100|
|4|ABCGHI|10|
■ 複数一致 (完全)
・演算子「IN」を使用する。
・演算子「AND」を使用する。
式
SELECT * FROM data_table
WHERE dName IN (‘DEFGHI’, ‘ABCGHI’, ‘DEFABC’)
結果
|ID|dName|dValue|
|2|DEFGHI|1000|
|4|ABCGHI|10|
|6|DEFABC|1000|
式
SELECT * FROM data_table
WHERE dValue = 100
AND dName like ‘%I%’
結果
|ID|dName|dValue|
|5|GHIDEF|100|
■ 複数一致 (部分)
・演算子「OR」を使用する。
式
SELECT * FROM data_table
WHERE ID > 4
OR dValue = 1000
結果
|ID|dName|dValue|
|2|DEFGHI|1000|
|5|GHIDEF|100|
|6|DEFABC|1000|
ーーーーー