助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26649
問題を開く
次の条件式で検索できる商品名はどれですか(該当するものを全て選択して下さい)。

 WHERE prod_name LIKE '_i%LEDW_%ライト%' ESCAPE 'W'

正解

Light_LED_ハンディライト(6球)

HighPower_LED_ハンディライト2

Silver LED_ライト

解説

LIKE演算子を使用すると、指定した文字パターンに一致した行を検索できます。
文字パターンには、任意の1文字と一致する「_」や、0文字以上の任意の文字列と一致する「%」といった、ワイルドカードを利用できます。
ワイルドカードをリテラルの一部として使用する場合は、ESCAPEオプションを指定してワイルドカードをリテラルとして扱えるようにしなければなりません。

設問では「W」がエスケープ文字として指定されています。ですので「W」の直後に来るワイルドカードは、通常のリテラルとして扱われます。

'_i%LEDW_%ライト%'

設問の文字パターンでは、2つ目の「_」がワイルドカードでは無く、文字のアンダーバーとして扱われます。
この文字パターンは、以下のような文字列を表します。
・1文字目 任意の1文字
・2文字目 「i」
・任意の文字列(0文字でも可)
・「LED_」という文字列
・任意の文字列(0文字でも可)
・「ライト」という文字列
・任意の文字列(0文字でも可)

以上より、
・Light_LED_ハンディライト(6球)
・HighPower_LED_ハンディライト2
・Silver LED_ライト
が正解となります。

設問の検索条件でPRODUCTS表を検索すると次のようになります。


 
SQLを表示
SELECT prod_name
FROM products
WHERE prod_name LIKE '_i%LEDW_%ライト%' ESCAPE 'W';

参考

LIKE演算子を使用すると、指定した文字パターンに一致した行を検索できます。

 WHERE 項目 LIKE '文字パターン'

文字パターンには、以下のワイルドカードを使用できます。



 例) '_bc'  abc,bbc,cbc など、bcの前に任意の1文字が付く文字列が検索される
   '%bc'  bc,abc,aabc など、bcの前に任意の文字列(0文字でも可)が付く文字列が検索される

ワイルドカードをリテラルの一部として使用する場合は、ESCAPEオプションを指定してワイルドカードをリテラルとして扱えるようにしなければなりません。
ESCAPEオプションの指定方法は次の通りです。

 WHERE 項目 LIKE '文字パターン' ESCAPE 'エスケープ文字'

文字パターン中のエスケープ文字の直後のワイルドカードはリテラルとして扱われます。エスケープ文字には任意の1バイト文字を指定します。

 例)「_bc」という文字列を検索する場合
 LIKE '\_bc' ESCAPE '\'

なお、文字パターンに一致しない行を検索する場合は、LIKE演算子とNOT演算子を組合せて次のように指定します。

 
 
SQLを表示
SELECT customer_id, cust_last_name || cust_first_name, cust_address
FROM customers
WHERE cust_address NOT LIKE '%横浜市%';
上に戻る

LIKE演算子のESCAPEの意味

投稿日 2023/03/12

お世話になります。
Oracle Master Silver SQL 2019(1Z0-071)の問題を解いてまして、
問題ID:26649について質問なのですが、
「WHERE prod_name LIKE 'i%LEDW%ライト%' ESCAPE 'W'」でLIKE演算子にESCAPEがあった場合、
この問題で言うと、Wは省いて「LED_」という文字列で検索して良いという意味なのでしょうか。
お手数お掛けしますがアドバイスの程お願い致します。

2023/03/12 18:11

この問題で言うと、Wは省いて「LED_」という文字列で検索して良いという意味なのでしょうか。

そうですね。というか解説の以下の部分に続くところでどのような文字列が検索文字列となるかが記載されています。

'i%LEDW%ライト%'

設問の文字パターンでは、2つ目の「_」がワイルドカードでは無く、文字のアンダーバーとして扱われます。
この文字パターンは、以下のような文字列を表します。

超シンプルに言えばESCAPE '\'だったら \になるはずのエスケープ文字がこの問題ではWになってる、ってだけの話ですね。


コメント

r ren4219

2023/03/14 05:42

なるほどですね! 理解できました! ありがとうございます!

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?