助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26844
問題を開く
次のSQL文を実行して表示される製品名として正しいものはどれですか(該当するものを全て選択して下さい)。
SELECT prod_name
FROM products
WHERE UPPER(prod_name) BETWEEN 'H' AND 'LE';
SELECT prod_name
FROM products
WHERE UPPER(prod_name) BETWEEN 'H' AND 'LE';
正解
HighPower_LED_ハンディライト2
Lantern
解説
BETWEEN演算子の下限値、上限値に文字リテラルが指定された場合は、指定された文字列の文字コードの範囲で検索が行われます。
設問の場合は、UPPER(prod_name)で全て大文字に変換された商品名の頭文字が「H」で始まるものから、「LE」という2文字の文字コードの範囲までが検索されます。
以上より、
・HighPower_LED_ハンディライト2
・Lantern
が正解となります。
設問のSELECT文の実行結果は次のようになります。
ちなみに、このSQL文でUPPER関数を使わないと、商品名「Lantern」はヒットしません。2文字目の小文字の「a」は大文字の全アルファベットより文字コードが大きいからです。
UPPER関数で大文字「LANTERN」にした場合は、最初の2文字「LA」の組合せの文字コードが、検索の上限値の「LE」より小さいため、設問のように検索でヒットします。
設問の場合は、UPPER(prod_name)で全て大文字に変換された商品名の頭文字が「H」で始まるものから、「LE」という2文字の文字コードの範囲までが検索されます。
以上より、
・HighPower_LED_ハンディライト2
・Lantern
が正解となります。
設問のSELECT文の実行結果は次のようになります。
SQLを表示
SELECT prod_name
FROM products
WHERE UPPER(prod_name) BETWEEN 'H' AND 'LE';
FROM products
WHERE UPPER(prod_name) BETWEEN 'H' AND 'LE';
ちなみに、このSQL文でUPPER関数を使わないと、商品名「Lantern」はヒットしません。2文字目の小文字の「a」は大文字の全アルファベットより文字コードが大きいからです。
SQLを表示
SELECT prod_name
FROM products
WHERE prod_name BETWEEN 'H' AND 'LE';
FROM products
WHERE prod_name BETWEEN 'H' AND 'LE';
UPPER関数で大文字「LANTERN」にした場合は、最初の2文字「LA」の組合せの文字コードが、検索の上限値の「LE」より小さいため、設問のように検索でヒットします。
参考
指定された範囲の値を検索する場合、「A以上」、「B以下」という2つの条件をAND演算子で指定する方法もありますが、BETWEEN演算子で指定された範囲の値を検索することもできます。
BETWEEN演算子の指定方法は次のとおりです。
BETWEEN 下限値 AND 上限値
BETWEEN演算子では指定された下限値以上、上限値以下の値を検索します(下限値、上限値も検索範囲に含まれる)。
以下の3つのSQLは同じ意味を表します。
例) SELECT employee_name, salary FROM employees WHERE salary BETWEEN 300000 AND 600000;
例) SELECT employee_name, salary FROM employees WHERE salary >= 300000 AND salary <= 600000;
例) SELECT employee_name, salary FROM employees WHERE salary <= 600000 AND salary >= 300000;
※BETWEEN演算子で下限値と上限値の位置を逆にすると、1件も検索できませんので注意して下さい。
下限値、上限値には数値の他、文字リテラルや日付リテラルを指定することもできます。文字リテラルを指定した場合は文字コードの範囲を、日付リテラルの場合は期間を検索します。
なお、文字リテラルや日付リテラルは一重引用符(')で囲まなければなりません。
例)SELECT order_id, order_date FROM ORDERS WHERE order_date BETWEEN '2010-04-01' AND '2011-03-31';
また、BETWEEN演算子はNOT演算子と組み合せて使用することもできます。
NOT BETWEEN 下限値 AND 上限値
NOT演算子と組合せて使用する場合は下限値よりも小さい、または上限値よりも大きい値を検索します。下限値、上限値は検索結果に含まれませんので注意しましょう。
上記ではSALARY列が300000より小さいか、600000より大きい行が検索されます。300000、600000の行は検索結果に含まれません。つまり以下のSQLと同じです。
例) SELECT employee_name, salary FROM employees WHERE salary < 300000 OR salary > 600000;
例) SELECT employee_name, salary FROM employees WHERE salary > 600000 OR salary < 300000;
BETWEEN演算子の指定方法は次のとおりです。
BETWEEN 下限値 AND 上限値
BETWEEN演算子では指定された下限値以上、上限値以下の値を検索します(下限値、上限値も検索範囲に含まれる)。
以下の3つのSQLは同じ意味を表します。
例) SELECT employee_name, salary FROM employees WHERE salary BETWEEN 300000 AND 600000;
例) SELECT employee_name, salary FROM employees WHERE salary >= 300000 AND salary <= 600000;
例) SELECT employee_name, salary FROM employees WHERE salary <= 600000 AND salary >= 300000;
※BETWEEN演算子で下限値と上限値の位置を逆にすると、1件も検索できませんので注意して下さい。
下限値、上限値には数値の他、文字リテラルや日付リテラルを指定することもできます。文字リテラルを指定した場合は文字コードの範囲を、日付リテラルの場合は期間を検索します。
なお、文字リテラルや日付リテラルは一重引用符(')で囲まなければなりません。
例)SELECT order_id, order_date FROM ORDERS WHERE order_date BETWEEN '2010-04-01' AND '2011-03-31';
また、BETWEEN演算子はNOT演算子と組み合せて使用することもできます。
NOT BETWEEN 下限値 AND 上限値
NOT演算子と組合せて使用する場合は下限値よりも小さい、または上限値よりも大きい値を検索します。下限値、上限値は検索結果に含まれませんので注意しましょう。
SQLを表示
SELECT employee_name, salary
FROM employees
WHERE salary NOT BETWEEN 300000 AND 600000;
FROM employees
WHERE salary NOT BETWEEN 300000 AND 600000;
上記ではSALARY列が300000より小さいか、600000より大きい行が検索されます。300000、600000の行は検索結果に含まれません。つまり以下のSQLと同じです。
例) SELECT employee_name, salary FROM employees WHERE salary < 300000 OR salary > 600000;
例) SELECT employee_name, salary FROM employees WHERE salary > 600000 OR salary < 300000;
なぜ答えのLEDライトとled lightは含まれないのでしょうか?
投稿日 2022/11/27
s shimogawa 公開日 2022/11/27
解説にUPPER関数を使えば、商品名「Lantern」が「LANTERN」になって「LA」が
該当の範囲内になるということについては理解しました。
「LEDライト」と「led light」もUPPER関数を使うことで「LEDライト」、「LED LIGHT」となり
BETWEEN句の'LE'の範囲(先頭2文字のLEに該当して)に該当するのではないでしょうか?
ご教示いただけないでしょうか。
2022/11/28 15:45
恐らくですが、
数字・・・数字~数字
日付・・・日付~日付
文字・・・数字(文字)~数字(文字)
として範囲として認識しているのではないでしょうか。
例えばASCIIコードで10進数で表すと、
Hは104,Lは108,Eは101,Aは97として、設問の
H(104)~LE(108 101)の範囲の中にLAは(108 97)となるので範囲内、
LEDは108 101 100となるので範囲外という認識でいかがでしょうか。
コメント
この投稿に対して返信しませんか?
h hikichi68
2022/11/28 16:36
日付も中では数値として使っていましたね。 日付・・・数値(日付)~数値(日付)と訂正させてください。