レス
元トピ
次レスタイトル
Re: 問題18425について
フォーラム
最強WEB問題集Oracle Master 11g Bronze SQL基礎
投稿ユーザ(投稿日)
(2015/9/17)本文
うーん、ちょっと解説がよわいのかなぁ… (^^;
以下の公式情報を見てください。
Oracle® Database SQL言語リファレンス 11g リリース2 (11.2) B56299-07:BETWEEN条件
http://docs.oracle.com/cd/E16338_01/server.112/b56299/conditions011.htm
真ん中あたりの説明を確認します。
-----引用(始)-----
さらに次の式の値について考えてみます。
expr1 BETWEEN expr2 AND expr3
この式の値は次のブール式の値と同じです。
expr2 <= expr1 AND expr1 <= expr3
-----引用(終)-----
expr1 BETWEEN expr2 AND expr3 は「expr1がexpr2とexpr3の間のもの」
ではなく「expr1がexpr2以上、
かつ、expr1がexpr3以下のもの」です。
標準的なSQLなので、sqliteで確認してみました。
まず、expr1 >= expr2のパターン
[code]
sqlite> select prod_name from products where upper(prod_name) >= 'H' order by upper(prod_name);
HighPower_LED_ハンディライト2 ←ここ
Lantern ←ここ
led light
LED_サイクルライト
LEDライト
ledランタン
Light_LED_ハンディライト(6球)
Silver LED_ライト
Watch1
watch2
watch3
[/code]
次に、expr1 <= expr3のパターン
[code]
sqlite> select prod_name from products where upper(prod_name) <= 'LE' order by upper(prod_name);
(Wide)LEDシーリングライト
BEST HITS_60's
BEST HITS_70's
BEST HITS_70's DANCE
BEST HITS_80's
BEST HITS_80's DANCE
cyclelight
HighPower_LED_ハンディライト2 ←ここ
Lantern ←ここ
[/code]
「LE(大文字LE、ASCIIコード10進数表記で76+69=145)」以下のものが表示されています。
※「LED(大文字LED、ASCIIコード10進数表記で76+69+68=213)」だとLEより大きくなるので含まれない。LIKE演算子とは異なるので注意してください。
検証には以下のSQLを使ってみるといいですよ
[code]
SELECT 'LE' <= 'LE';
SELECT 'LED' <= 'LE';
SELECT 'LED' LIKE 'LE';
SELECT 'LED' LIKE 'LE%';
[/code]
なので、この結果のAND(両方の結果に存在するもの)は
[code]
sqlite> select prod_name from products where upper(prod_name) between 'H' and 'LE';
HighPower_LED_ハンディライト2
Lantern
[/code]
になるということです。
レス一覧
元トピ
次レス
Copyright (c) 2010
Ping-t All rights reserved.