| 1.WHERE句と演算子 |
SELECT 品名 , 定価
FROM 商品台帳
WHERE 定価 < 1000; |
WHERE句の中で使用できる比較演算子には、他にも4項のような種類があります。
|
| 2.演算子の優先順位 |
- 一般に、演算子には次の2 つのクラスがあります。
- 特別な書式を持ち、3 つ以上のオペランドについて操作可能な演算子もあります。
- 演算子のオペランドにNULL が指定された場合、結果は常にNULL
になります。この規則に従わない唯一の演算子が連結演算子(||)です。
- 優先順位とは、同じ式の中の異なる演算子をOracle
が評価する順序を意味します。複数の演算子を含む式を評価するとき、Oracle
は優先順位の高い演算子を評価した後で、優先順位の低い演算子を評価します。優先順位の等しい演算子は、式の中で左から右に評価されます。
- 式の評価の優先順位を明示的にするには括弧を使用します。
- 演算子には、単項目演算子とバイナリ演算子の2つのクラスがあります。
■単項単項演算子は、1 つのみのオペランドについて操作します。単項演算子の書式は次のとおりです。
operator operand
■バイナリバイナリ演算子は、2 つのオペランドについて操作します。バイナリ演算子の書式は次のとおりです。
operand1 operator operand2
- SQLの演算子は優先順位の高い方から以下のようになります。同じ行にリストされている演算子の優先順位は同じです。
| 演算子 |
操作 |
| +、- |
同一、否定 |
| *、/ |
乗算、除算 |
| +、-、|| |
加算、減算、連結 |
| =、!=、<、>、<=、>=、IS NULL
、LIKE 、BETWEEN 、IN |
比較 |
| NOT |
指数、論理否定 |
| AND |
論理積 |
| OR |
論理和 |
|
| 3.算術演算子 |
- 算術演算子を式の中で使用することによって、数値を否定(正負を反転)、加算、減算、乗算および除算できます。演算の結果も数値になります。これらの演算子の中には、日付算術算術演算子を使うものもあります。
| 演算子 |
用途 |
| + |
加算、正の値 |
| - |
減算、負の値 |
| * |
乗算 |
| / |
除算 |
- +、−式の正負を示す場合、これらは単項演算子です。
SELECT * FROM orders
WHERE
qtysold = -1;
SELECT * FROM emp
WHERE
-sal < 0; |
- 加算、減算を行う場合、これらはバイナリ演算子です。
SELECT sal + comm FROM emp
WHERE
SYSDATE - hiredate
>
365; |
- *、/乗算、除算を行います。これらはバイナリ演算子です。
UPDATE emp
SET sal = sal
* 1.1; |
- 二重否定や負の数の減算を表現する場合に、算術式で、連続した負の符号(--)は使用しないでください。文字--は、SQL
文ではコメントの開始を示す場合に使用します。連続した負の符号は、空白またはカッコで区切ってください。
|
| 4.連結演算子 |
| SELECT 'Name is ' || ename FROM emp; |
- 2 つの文字列を連結した結果は別の文字列になります。両方の文字列がCHAR
データ型の場合、結果はCHAR データ型の文字列になり、その最大文字数は2000
です。どちらかの文字列がVARCHAR2 データ型の場合、結果はVARCHAR2
データ型の文字列になり、その最大文字数は4000
です。文字列のデータ型にかかわりなく、後続空白は連結後も文字列に残ります。
|
| 5.集合演算子 |
- 集合演算子は、2 つのコンポーネントの問合せ結果を1
つの結果にまとめます。集合演算子を含む問合せをコンパウンド問合せと呼びます。以下
に、SQL の集合演算子を示します。
| 演算子 |
操作 |
| UNION |
各問合せによって戻るすべての行(重複行は含まない) |
| UNION ALL |
各問合せによって戻るすべての行(重複行を含む) |
| INTERSECT |
両方の問合せによって戻るすべての行(重複行は含まない) |
| MINUS |
最初の問合せによって戻る行で、2 番目の問合せでは戻されない行(重複行は含まない) |
- 集合演算子の優先順位はすべて同じです。SQL
文に複数の集合演算子がある場合、カッコによって明示的に別の順序が指定されない限り、Oracle
は左から右の順に評価します。
コンパウンド問合せを構成する各問合せと、それに対応するSELECT
構文のリスト内の各式は、数値とデータ型が一致している必要があります。集合演算子によって結合された2
つの問合せが文字データを選択する場合、戻される値のデータ型は次のようにして決定されます。
- 両方の問合せがCHAR データ型の値を選択する場合、戻される値のデータ型はCHAR
に 問合せのどちらか一方または両方が、VARCHAR2
データ型の値を選択する場合、戻される値のデータ型はVARCHAR2
になります。
- 集合演算子の例
次の2つの問合せとその結果
SELECT PART
FROM orders_list1;
PART
----------
SPARKPLUG
FUEL PUMP
FUEL PUMP
TAILPIPE
|
SELECT PART
FROM orders_list2;
PART ----------
CRANKSHAFT
TAILPIPE
TAILPIPE |
- 次の文は、UNION 演算子によって2 つの結果を結合しています。結果に重複行は含まれません。次の文は、他方の表に存在していない列がある場合に、データ型を一致させる必要がある(TO_DATE およびTO_NUMBER 関数を使用して)ことを示しています。
SELECT PART ,PARTNUM to_date(null) DATE_IN
FROM orders_list1
UNION
SELECT PART, to_number(null), DATE_IN
FROM orders_list2;
PART PARTNUM DATE_IN
---------- ------- --------
SPARKPLUG 3323165
SPARKPLUG 10/24/98
FUEL PUMP 3323162
FUEL PUMP 12/24/99
TAILPIPE 1332999
TAILPIPE 01/01/01
CRANKSHAFT 9394991
CRANKSHAFT 09/12/02
|
SELECT PART
FROM orders_list1
UNION
SELECT PART
FROM orders_list2;
PART
----------
SPARKPLUG
FUEL PUMP
TAILPIPE CRANKSHAFT |
- 次の文は、UNION ALL 演算子を使用して2 つの結果を結合しています。結果には重複行が含まれることもあります。
SELECT PART
FROM orders_list1
UNION ALL
SELECT PART
FROM orders_list2;
PART
----------
SPARKPLUG
FUEL PUMP
FUEL PUMP
TAILPIPE
CRANKSHAFT
TAILPIPE
TAILPIPE
|
- UNION ALL演算子がすべての行を戻すことに対して、UNION
演算子は重複しない行のみを戻すことに注意してください。問合せで複数回戻されるPART
値(FUEL PUMP など)は、UNION 演算子では1
回のみ戻されますが、UNION ALL 演算子では複数回戻されています。
- 次の文は、INTERSECT 演算子によって2 つの結果を結合しています。この場合、両方の問合せによって共通に戻される行のみが戻されます。
SELECT PART
FROM orders_list1
INTERSECT
SELECT PART
FROM
orders_list2;
PART
----------
TAILPIPE |
- 次の文は、MINUS 演算子を使用して2 つの結果を結合します。この場合、最初の問合せでは戻されるが、2
番目の問合せでは戻されない行のみが戻されます。
SELECT PART
FROM
orders_list1
MINUS
SELECT PART
FROM orders_list2;
PART
----------
SPARKPLUG
FUEL PUMP |
|
| 6.比較演算子 |
- 比較演算子は、2 つの式を比較します。比較の結果は、真(TRUE
)、偽(FALSE )または不明(UNKNOWN )になります。
| 演算子 |
用途 |
| = |
等価性を評価します。 |
| > |
より大きいかを評価します。(越える) |
| < |
より小さいかを評価します。(未満) |
| >= |
以上かを評価します。(大きい/等しい) |
| <= |
以下を評価します。(小さい/等しい) |
| != |
不等性を評価します。プラットフォームによっては、一部の不等号演算子の書式を使用できない場合もあります。 |
| ^= |
| <> |
| IN |
メンバーとの等価性を評価します。「= ANY 」と同じです。 |
| NOT IN |
「!=ALL 」と同じです。メンバーのいずれかがNULL
の場合に、FALSE と評価されます。 |
| ANY |
リスト内の各値または問合せによって戻される各値と、ある値を比較します。=、!=、>、<、<=、>=のいずれかを先に指定する必要があります。問合せによって行が戻されない場合には、FALSE
と評価されます。 |
| SOME |
| ALL |
リスト内のすべての値または問合せによって戻されるすべての値と、ある値を比較します。=、!=、>、<、<=、>=のいずれかを先に指定する必要があります。問合せによって行が戻されない場合には、TRUE
と評価されます。 |
| [NOT] BETWEEN min AND max |
min 以上max 以下の範囲である[ない]ことを評価します。 |
| EXISTS |
副問合せによって行が1 行以上戻される場合には、TRUE
と評価されます。 |
| x [NOT] LIKE y |
x がパターンy と一致する[しない]場合にTRUE
と評価されます。y の中の「%」文字は、NULL
を除く0(ゼロ)文字以上の任意の文字列に一致します。「_」文字は、任意の1文字に一致します。パーセント(%)およびアンダースコア(_)を除く任意の文字をESCAPE
の後に指定できます。ワイルド・カード文字は、エスケープ文字に指定された文字が前に付いている場合はリテラルとして扱われます。 |
| [ESCAPE 'z'] |
| IS [NOT] NULL |
NULL を評価します。NULL の評価に使用する必要がある唯一の演算子です。 |
- これらの関数は数値と文字列の両方で使える。必要であれば、文字は自動的に数字に変換され、数字は文字に変換されます。 文字列は、シングル・クォート(')、または、ダブル・クォート(")で囲みます。
|
| 7.論理演算子 |
- 論理演算子は、2 つのコンポーネントの条件の結果を結合して、両方をもとに単一の結果を生成するため、または単一の条件の結果を反転させるために使用します。
| 演算子 |
機能 |
| AND |
構成要素の条件が両方ともTRUE の場合にTRUE
を戻します。どちらかがFALSE の場合にはFALSE
を戻します。それ以外の場合はUNKNOWN を戻します。 |
| OR |
構成要素の条件のどちらかがTRUE の場合にTRUE
を戻します。両方ともFALSE の場合はFALSE を戻します。それ以外の場合はUNKNOWN
を戻します。 |
| NOT |
後続する条件がFALSE の場合にTRUE を戻します。TRUE
の場合にはFALSE を戻します。UNKNOWN の場合にはUNKNOWN
を戻します。 |
- 論理演算子 AND , OR , NOT を用いて、条件部に、二つ以上の条件を組み合わせて指定することが出来ます。
- NOT/ !
- 論理否定。引数が 0 なら 1 を返し、そうでなければ
0 を返す。例外: NOT NULL は NULL
を返す。
- OR/ ||
- 論理和。引数のどれかが 0 または NULL でなければ
1 を返す。
- AND/ &&
- 論理積。全ての引数が 0 または NULL でなければ
1 を返す。
- 次の例は、NOT演算子を使ってjob項目がNULLでないものを表示します。
SELECT *
FORM emp
WHERE NOT (job IS NULL); |
- 次の例は、OR演算子を使って、job項目がTEST1でまたは、testnoが10のものを表示します。
SELECT *
FORM emp
WHERE job = 'TEST1'
OR testno = '10';
|
|
| 8.BETWEEN 〜 AND 〜 |
- 範囲を指定する場合、BETWEEN min AND maxを使って指定できます。
- BETWEENでは、範囲指定の両端は含まれます。
expr BETWEEN min AND max
SELECT 品名 , 定価
FROM 商品台帳
WHERE 定価 BETWEEN 500 AND 1000 |
- 定価が500以上1000以下の品名と定価が表示されます。
|
| 9.ISNULL |
- NULL値の評価をするには、ISNULL(expr) を使用できます。
- expr が NULL なら 1 を、そうでなければ 0
を返す。
ISNULL(expr)
- 値がNULLだということは、未知、未定、不明を表していると解釈される。次のような場合、検索に失敗する。
SELECT 品名 , 定価
FROM 商品台帳
WHERE 定価 = NULL |
- カラムの値としてのNULL値は、自分自身とさえ一致しない。NULLをもつ項目は、ISNULL構文で扱う。
SELECT 品名 , 定価
FROM 商品台帳
WHERE 定価 IS NOT NULL |
|
| 10.IN |
■expr IN (value,...)
- もし expr が IN リストにある値のどれかならば、1
を返す。そうでなければ 0 を返す。 IN リストに定数を与えた場合、IN
が速くなる。
SELECT * FROM emp
WHERE job IN ('CLERK','ANALYST'); |
■expr NOT IN (value,...)
- NOT IN 演算子に続くリストの中のいずれかの項目がNULL
の場合は、すべての行は不明(UNKNOWN )と評価されます(行は戻されません)。たとえば、次の文ではそれぞれの行に対して文字列'TRUE'が戻されます。
SELECT 'TRUE' FROM emp
WHERE deptno NOT IN (5,15); |
- NOT (expr IN (value,...)) と同じ。
|
| 11.LIKE |
- LIKE 演算子は、パターン一致による文字列の比較で使用されます。
- 等号(=)は、ある文字値を別の文字値と一致させますが、LIKE
演算子は、ある文字値の一部を別の文字値と一致させます(ある値が指定したパターンの検索を、もう一方の値に対して行います)。LIKE
比較では、空白埋めが使用されないことに注意してください。
- LIKE 演算子では、値を定数ではなくパターンと比較できます。必ずLIKE
キーワードの直後に、パターンを指定してください。たとえば、次の問合せを発行することによって、名前が「SM
」で始まるすべての従業員の給与を検索できます。
SELECT sal
FROM emp
WHERE ename LIKE
'SM%';
|
- 次の問合せは、LIKE 演算子ではなく=演算子を使用しているため、名前が'SM%'のすべての従業員の給与が検索されます。
SELECT sal
FROM emp
WHERE ename = 'SM%'; |
|