助け合いフォーラム
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;
判別基準についてのイメージ
y
yu07
投稿日 2025/09/03
自分用のメモで、あくまでイメージですが、、、
辞書順で考えたときに H と LE の間にあるものを選択する。
ということは「 ( 」は記号なので論外。
UPPER が使用されているのですべて大文字となったうえで、
「LED」は、辞書で引こうとすると
「LE」よりは後ろになる。
※広辞苑でいえば、「愛(あい)」よりも「間(あいだ)」の方が後ろになるイメージ。
同じ理論で「LAN」は「LE」よりは前になる。
※広辞苑でいうところの、「間(あいだ)」が「赤(あか)」より前になるイメージ。
「HI~」については、「LE」よりも前。
※そもそも頭文字が「L」より前な「H」なので、
辞書で引いたら圧倒的に早く出てくるといった具合。
ということですかね……?
r
rink_rew
2025/09/03 19:40
「LED」は、辞書で引こうとすると
「LE」よりは後ろになる。
※広辞苑でいえば、「愛(あい)」よりも「間(あいだ)」の方が後ろになるイメージ。同じ理論で「LAN」は「LE」よりは前になる。
※広辞苑でいうところの、「間(あいだ)」が「赤(あか)」より前になるイメージ。「HI~」については、「LE」よりも前。
※そもそも頭文字が「L」より前な「H」なので、
辞書で引いたら圧倒的に早く出てくるといった具合。
そうですね。その理解で良いと思います。
コメント
この投稿に対して返信しませんか?