betweenに関する。
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
betweenに関する。
msg# 1
accompany
投稿数: 1
次のSQL文を実行して表示される製品名として正しいものはどれですか(該当するものを全て選択して下さい)。
SELECT prod_name
FROM products
WHERE UPPER(prod_name) BETWEEN 'H' AND 'LE';
Lantern
led light
(Wide)LEDシーリングライト
HighPower_LED_ハンディライト2
LEDライト
なんで答えが1,4番だけなのかよくわかりません。LEDライトはできないのかな。。・?
SELECT prod_name
FROM products
WHERE UPPER(prod_name) BETWEEN 'H' AND 'LE';
Lantern
led light
(Wide)LEDシーリングライト
HighPower_LED_ハンディライト2
LEDライト
なんで答えが1,4番だけなのかよくわかりません。LEDライトはできないのかな。。・?
Re: betweenに関する。
msg# 1.1
arashi1977
居住地: 広島
投稿数: 1715
まず大事なのは、ここでの問題は「BETWEEN」であって「LIKE」ではない、ということです。
条件はUPPER(prod_name)により、prod_nameの文字列がすべて大文字で比較されます。次にBETWEENですが、BETWEENはざっくりいうと「大小比較」なのです。わかりやすく言うと「BETWEEN 100 AND 200」って言ったときに「210」は含まない、ということです。
ここが大丈夫だったら話はかんたんなのです。
引用:全部大文字にすると
ですよね。並び替えると
となります。ここで大小比較になりますが
- (とHだと「H」のほうが大きい→「(WIDE)LEDシーリングライト」はBETWEENの範囲に含まれない
- HとHIだと「Hのほうが小さい」→「HIGHPOWER_LED_ハンディライト2」はBETWEENの範囲に含まれる
- LAとLEだと「LE」のほうが大きい→「LANTERN」はBETWEENの範囲に含まれる
- LEとLEDだと「LED」のほうが大きい→「LED LIGHT」や「LEDライト」ははBETWEENの範囲に含まれない
のです。
ここは実際にSQL使って確認すると、Oracleが文字の大小をどう判断しているのかがわかります。
SELECT prod_name
FROM products
WHERE UPPER(prod_name) BETWEEN 'H' AND 'LE';
ここが大丈夫だったら話はかんたんなのです。
引用:
Lantern
led light
(Wide)LEDシーリングライト
HighPower_LED_ハンディライト2
LEDライト
なんで答えが1,4番だけなのかよくわかりません。LEDライトはできないのかな。。・?
LANTERN
LED LIGHT
(WIDE)LEDシーリングライト
HIGHPOWER_LED_ハンディライト2
LEDライト
(WIDE)LEDシーリングライト
HIGHPOWER_LED_ハンディライト2
LANTERN
LED LIGHT
LEDライト
- (とHだと「H」のほうが大きい→「(WIDE)LEDシーリングライト」はBETWEENの範囲に含まれない
- HとHIだと「Hのほうが小さい」→「HIGHPOWER_LED_ハンディライト2」はBETWEENの範囲に含まれる
- LAとLEだと「LE」のほうが大きい→「LANTERN」はBETWEENの範囲に含まれる
- LEとLEDだと「LED」のほうが大きい→「LED LIGHT」や「LEDライト」ははBETWEENの範囲に含まれない
のです。
ここは実際にSQL使って確認すると、Oracleが文字の大小をどう判断しているのかがわかります。
# sqlplus pingt/oracle@XE
SQL*Plus: Release 11.2.0.2.0 Production on 金 5月 15 21:52:56 2020
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> SELECT CASE
WHEN 'H' > '(' THEN 'LOWER'
WHEN 'H' < '(' THEN 'HIGHER'
END RESULT
FROM DUAL; 2 3 4 5
RESULT
------
LOWER ← 「H」より「(」は小さい
SQL> SELECT CASE
WHEN 'H' > 'HI' THEN 'LOWER'
WHEN 'H' < 'HI' THEN 'HIGHER'
END RESULT
FROM DUAL; 2 3 4 5
RESULT
------
HIGHER ← 「H」より「HI」は大きい
SQL> SELECT CASE
WHEN 'LE' > 'HI' THEN 'LOWER'
WHEN 'LE' < 'HI' THEN 'HIGHER'
END RESULT
FROM DUAL; 2 3 4 5
RESULT
------
LOWER ← 「LE」より「HI」は小さい
SQL> SELECT CASE
WHEN 'LE' > 'LANTERN' THEN 'LOWER'
WHEN 'LE' < 'LANTERN' THEN 'HIGHER'
END RESULT
FROM DUAL; 2 3 4 5
RESULT
------
LOWER ← 「LE」より「LANTERN」は小さい
SQL> SELECT CASE
WHEN 'LE' > 'LED' THEN 'LOWER'
WHEN 'LE' < 'LED' THEN 'HIGHER'
END RESULT
FROM DUAL; 2 3 4 5
RESULT
------
HIGHER ← 「LE」より「LED」は大きい
Re: betweenに関する。
msg# 1.2
ruttey
投稿数: 3
すみませんが、下記について教えてください。
>LEとLEDだと「LED」のほうが大きい→「LED LIGHT」や「LEDライト」はBETWEENの範囲に含まれない
どうしてこの場合、2文字と3文字の比較になるのですか?
>LEとLEDだと「LED」のほうが大きい→「LED LIGHT」や「LEDライト」はBETWEENの範囲に含まれない
どうしてこの場合、2文字と3文字の比較になるのですか?
Re: betweenに関する。
msg# 1.2.1
arashi1977
居住地: 広島
投稿数: 1715
引用:えっ、だって問題のSQLって
引用:ですから、「LE」と「LED」を比べてどうなるかって重要じゃないですか?
(LEよりLEDの方が大きければBETWEENの範囲に入らない、という確認)
>LEとLEDだと「LED」のほうが大きい→「LED LIGHT」や「LEDライト」はBETWEENの範囲に含まれない
どうしてこの場合、2文字と3文字の比較になるのですか?
引用:
SELECT prod_name
FROM products
WHERE UPPER(prod_name) BETWEEN 'H' AND 'LE';
(LEよりLEDの方が大きければBETWEENの範囲に入らない、という確認)