助け合いフォーラム
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文の実行結果は次のようになります。
その他の選択肢については以下のとおりです。
・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回目に出現する「佐藤」を検索します。
苗字が「佐藤」で始まる従業員を検索するには、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) = '佐藤';
FROM employees
WHERE SUBSTR(employee_name, 1, 2) = '佐藤';
SQLを表示
SELECT employee_id, employee_name
FROM employees
WHERE INSTR(employee_name, '佐藤') = 1;
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がデフォルト値となります。
その他、主な文字関数には次のものがあります。
・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 さん ご指摘の点を修正いたしました。 ご報告、誠にありがとうございました。