SQLでのデータの制限とソート間違いやすいポイントを追え! Bronze SQL基礎I(3)(1/2 ページ)

Oracleデータベースエンジニアとしての基礎力を証明するORACLE MASTER Bronzeの取得を目指すITエンジニアは多い。本連載で間違いやすいポイントを確認し、合格に近づこう!

» 2008年05月16日 00時00分 公開

 前回「SQLのSELECT文を使用したデータの取得」では、SQLの基本構文と、SELECT文における算術式とNULL値の取り扱い方について学習しました。

 今回は、以下の項目について確認します。

  • 問い合わせによって取得される行の制限(WHERE句)
  • 問い合わせによって取得される行のソート(ORDER BY句)

問い合わせによって取得される行の制限(WHERE句)

例題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です。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。