SQL攻略 - Web上でSQLを実行しながらマスターするサイト
ホーム >> SQL攻略 - 範囲で抽出(BETWEEN演算子)

範囲で抽出(BETWEEN)

BETWEEN演算子を使った範囲抽出の方法を学習します。

1.BETWEENの使い方

--SAL(給料)が1000以上、2000以下の従業員を検索。
SELECTENAME
FROMEMP
WHERESAL BETWEEN 1000 AND 2000
■BETWEEN演算子の使い方

BETWEEN演算子はWHERE句で使用します。[カラム名 BETWEEN 下限値 AND 上限値]と記述し、カラムの値が下限値以上、上限値以下の場合真を返します。下限値と上限値を逆に記述することはできません。上記のSQLを比較演算子で書き直すと以下のSQLになります。

SELECTENAME
FROMEMP
WHERE 1000 <= SAL AND SAL <= 2000

■BETWEEN演算子の否定

BETWEEN演算子を否定する場合は、[カラム名 NOT BETWEEN 下限値 AND 上限値]のようにBETWEEN演算子の前にNOTを記述します。カラムの値が下限値未満と上限値超の場合真を返します。


■実習

それでは実習です。2題出題します。


2.範囲で抽出(BETWEEN)の過去問題

初級システムアドミニストレータ午前平成13年秋問28
“BUSHO”表と“SHAIN”表があり,“SHAIN”表は次のSQL文で定義されている。
CREATE TABLE SHAIN
 (S_CODE CHAR(3) PRIMARYKEY,
 S_NAMEN CHAR(3),
 BU_CODE CHAR(3),
 S_AGE DECIMAL(2),
 FOREIGN KEY(BU_CODE) REFERENCE SBUSHO,
 CHECK(S_AGE BETWEEN 18 AND 60))

また,“BUSHO”表と“SHAIN”表には現在次のようなデータが格納されている。
BUSHO
BU_CODEBU_NAME
B01人事部
B02総務部
B03経理部

SHAIN
S_CODES_NAMEBU_CODES_AGE
111山田B0260
122川上B0355
233田中B0135
259岡本B0234

このとき,“SHAIN”表に追加可能なタプルとして,適切なものはどれか。
S_CODES_NAMEBU_CODES_AGE
012山田B0360
111山田B0255
320山本B0434
920山下B0317

若干難易度も高くCREATE文についても解説していないのでヒントです。

・CREATE文はテーブルを作成するSQLです。
・PRIMARYKEYは主キーで重複した値を認められません。
・REFERENCEは外部で主キーとして定義されている値で、外部テーブルに無い値は認められません。
・CHECKにある条件を満たしていないと表にデータを保存することが出来ません。
正解



解説


S_CODEにPRIMARYKEYが指定されているのでイは重複キーになる。

REFERENCEで外部キーに指定されているBU_CODEがB04は存在しないのでウは追加できない。

残りのうち、S_AGE BETWEEN 18 AND 60の条件に合うものはアだけになるので、答えはアとなります。

これで[範囲で抽出(BETWEEN)]は終了です。