助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26464
問題を開く
EMPLOYEES表の構造を確認して下さい。



苗字が「佐藤」で始まる従業員を検索するには、どの問い合わせを実行しますか(該当するものを全て選択して下さい)。

正解

SELECT employee_id, employee_name FROM employees WHERE SUBSTR(employee_name, 1, 2) = '佐藤';

SELECT employee_id, employee_name FROM employees WHERE INSTR(employee_name, '佐藤') = 1;

解説

SUBSTR関数は引数で指定された文字列の部分文字列を返す関数、INSTR関数は引数で指定した文字列中から検索文字列を検索し、その位置を数値で返す関数です。

苗字が「佐藤」で始まる従業員を検索するには、EMPLOYEE_NAME列の最初の2文字が「佐藤」であればよいので、SUBSTR関数で最初の2文字を取り出して比較するか、INSTR関数で1文字目から「佐藤」が出現するかを確認します。

以上より、
・SELECT employee_id, employee_name FROM employees WHERE SUBSTR(employee_name, 1, 2) = '佐藤';
・SELECT employee_id, employee_name FROM employees WHERE INSTR(employee_name, '佐藤') = 1;
が正解となります。

なお、INSTR関数は検索文字列が文字列中に見つからなかった場合は0(ゼロ)を返します。
ですので、例えば「藤」という文字が含まれていない名前を検索したい場合は、以下のようにします。

WHERE INSTR(employee_name, '藤') = 0;

逆に「藤」という文字が含まれている名前(場所はどこでも良い)を検索したい場合は、以下のようにします。

WHERE INSTR(employee_name, '藤') <> 0;

正解のSQL文の実行結果は次のようになります。


 
SQLを表示
SELECT employee_id, employee_name
FROM employees
WHERE SUBSTR(employee_name, 1, 2) = '佐藤';



 
SQLを表示
SELECT employee_id, employee_name
FROM employees
WHERE INSTR(employee_name, '佐藤') = 1;


その他の選択肢については以下のとおりです。

・SELECT employee_id, employee_name FROM employees WHERE employee_name = '佐藤%';
「%」をワイルドカードとして使用する場合はLIKE演算子を使用します。

・SELECT employee_id, employee_name FROM employees WHERE SUBSTR(employee_name, 1) = '佐藤';
SUBSTR関数の3番目の引数が省略されているので、末尾までの文字列が返されます。

・SELECT employee_id, employee_name FROM employees WHERE INSTR(employee_name, '佐藤', 1, 2) = 1;
INSTR関数の4番目の引数に「2」が指定されているので、2回目に出現する「佐藤」を検索します。

参考

SUBSTR関数とINSTR関数は、単一行関数のうちの文字関数に分類されます。

・SUBSTR関数は引数で指定された文字列の部分文字列を返します。

  SUBSTR(文字列, m[, n])

 引数で指定された文字列のm文字目からn文字分の文字列を返します。nが省略された場合はm文字目から末尾までの文字列を返します。
 なお、mに負の値が指定された場合は、文字列の末尾から数えてm文字目からn文字分の文字列を返します。

・INSTR関数は引数で指定した文字列中から検索文字列を検索し、その位置を返します。検索文字列が見つからなかった場合は0(ゼロ)を返します。

  INSTR(文字列, 検索文字列[, m][, n])

 引数で指定された文字列のm文字目以降からn回目に出現した検索文字列の先頭の位置を返します。m,nが省略された場合は、どちらも1がデフォルト値となります。

その他、主な文字関数には次のものがあります。

上に戻る

3番目の引数に「2」が指定されている

投稿日 2024/04/14

・SELECT employee_id, employee_name FROM employees WHERE INSTR(employee_name, '佐藤', 1, 2) = 1;
INSTR関数の3番目の引数に「2」が指定されているので、2回目に出現する「佐藤」を検索します。

と解説にありますが、”4”番目の引数に「2」が指定されているので、と考えてよろしいでしょうか。引数の数え方が違っていたらすみません。

スタッフからの返信

s staff_ishii

2024/04/15 15:53

tsukasa39 さん ご指摘の点を修正いたしました。 ご報告、誠にありがとうございました。

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