Oracleデータベースエンジニアとしての基礎力を証明するORACLE MASTER Bronzeの取得を目指すITエンジニアは多い。本連載で間違いやすいポイントを確認し、合格に近づこう!
前回「SQLのSELECT文を使用したデータの取得」では、SQLの基本構文と、SELECT文における算術式とNULL値の取り扱い方について学習しました。
今回は、以下の項目について確認します。
■例題1
次のデータと要件を確認してください。
SQL> select last_name,salary from employees; LAST_NAME SALARY -------------------- ---------- Whalen 4400 Hartstein 13000 Fay 6000 Higgins 12000 Gietz 8300 King 24000 Kochhar 17000 De Haan 17000 Hunold 9000 Ernst 6000 Lorentz 4200 Mourgos 5800 Rajs 3500 Davies 3100 Matos 2600 Vargas 2500 Zlotkey 10500 Abel 11000 Taylor 8600 Grant 7000 20行が選択されました。 |
次の文を実行したとき、何行のデータが検索されますか。
SQL> select last_name,salary from employees 2 where salary between 3500 and 6000; |
a.4行
b.6行
c.5行
d.3行
■例題の範囲をおさらい
参考:「SQL問い合わせによる行の制限とソート」
問い合わせによって取得される行を制限するには、WHERE句を使用します。WHERE句の中で比較条件として使用できる演算子の1つに、BETWEENがあります。
SELECT {* | [DISTINCT] 列名 | 式} [列別名] [,...] FROM 表名 WHERE 列名 BETWEEN A and B; |
BETWEENを使用することによって、A以上B以下の値を選択することができます。
■正解
b
■解説
問題のSELECT文を実行すると、以下のような結果が戻ります。
SQL> select last_name,salary from employees 2 where salary between 3500 and 6000; LAST_NAME SALARY -------------------- ---------- Whalen 4400 Fay 6000 Ernst 6000 Lorentz 4200 Mourgos 5800 Rajs 3500 6行が選択されました。 |
BETWEEN演算子を「WHERE 列名 BETWEEN A and B;」のように使用した場合、A以上B以下の値を検索します。
この問題の場合は、SALARYの値が3500以上6000以下の行を検索します(下限の3500、上限の6000は検索結果に含まれます)。
よって、正解はbです。
■例題2
次のデータと要件を確認してください(例題1と同じものです)。
SQL> select last_name,salary from employees; LAST_NAME SALARY -------------------- ---------- Whalen 4400 Hartstein 13000 Fay 6000 Higgins 12000 Gietz 8300 King 24000 Kochhar 17000 De Haan 17000 Hunold 9000 Ernst 6000 Lorentz 4200 Mourgos 5800 Rajs 3500 Davies 3100 Matos 2600 Vargas 2500 Zlotkey 10500 Abel 11000 Taylor 8600 Grant 7000 20行が選択されました。 |
次の文を実行した場合の結果で正しいものを1つ選択してください。
select last_name,salary from employees where salary between 6000 and 3500; |
a.エラーになる
b.6行の値が戻る
c.レコードは選択されない
d.3行の値が戻る
■例題の範囲をおさらい
参考:「SQL問い合わせによる行の制限とソート」
例題1で学んだように、WHERE句でBETWEENを使用することによって、A以上B以下の値を選択することができます。
SELECT {* | [DISTINCT] 列名 | 式} [列別名] [,...] FROM 表名 WHERE 列名 BETWEEN A and B; |
ただし、Aに値の下限、Bに値の上限を指定しない限り、レコードを選択することはできません。
■正解
c
■解説
問題の文を実行すると、以下のような結果が戻ります。
SQL> select last_name,salary from employees 2 where salary between 6000 and 3500; レコードが選択されませんでした。 |
これは、
WHERE 列名 BETWEEN A and B; |
と選択範囲を指定する際、下限値、上限値の順に指定しなかったためです。
下記のように正しく指定すれば、SALARYの値が3500以上6000以下の行が検索され、結果として戻ります。
SQL> select last_name,salary from employees 2 where salary between 3500 and 6000; LAST_NAME SALARY -------------------- ---------- Whalen 4400 Fay 6000 Ernst 6000 Lorentz 4200 Mourgos 5800 Rajs 3500 |
正解はcです。
Copyright © ITmedia, Inc. All Rights Reserved.