SQLite 演算子
SQLite 演算子とは?
演算子は予約語または文字であり、主に SQLite 文の WHERE 句で比較や算術演算などの操作を実行するために使用されます。
演算子は SQLite 文内の条件を指定し、文内の複数の条件を結合するために使用されます。
算術演算子
比較演算子
論理演算子
ビット演算子
SQLite 算術演算子
変数 a=10、変数 b=20 と仮定すると、次のようになります:
| 演算子 | 説明 | 例 |
|---|---|---|
| + | 加算 - 演算子の両側の値を加算します | a + b は 30 になります |
| - | 減算 - 左のオペランドから右のオペランドを減算します | a - b は -10 になります |
| * | 乗算 - 演算子の両側の値を乗算します | a * b は 200 になります |
| / | 除算 - 左のオペランドを右のオペランドで除算します | b / a は 2 になります |
| % | 剰余 - 左のオペランドを右のオペランドで除算した後の余り | b % a は 0 になります |
例
以下は SQLite 算術演算子の簡単な例です:
sqlite> .mode line sqlite> select 10 + 20; 10 + 20 = 30 sqlite> select 10 - 20; 10 - 20 = -10 sqlite> select 10 * 20; 10 * 20 = 200 sqlite> select 10 / 5; 10 / 5 = 2 sqlite> select 12 % 5; 12 % 5 = 2
SQLite 比較演算子
変数 a=10、変数 b=20 と仮定すると、次のようになります:
| 演算子 | 説明 | 例 |
|---|---|---|
| == | 2つのオペランドの値が等しいかどうかを確認し、等しい場合は条件が真になります。 | (a == b) は真ではありません。 |
| = | 2つのオペランドの値が等しいかどうかを確認し、等しい場合は条件が真になります。 | (a = b) は真ではありません。 |
| != | 2つのオペランドの値が等しいかどうかを確認し、等しくない場合は条件が真になります。 | (a != b) は真です。 |
| <> | 2つのオペランドの値が等しいかどうかを確認し、等しくない場合は条件が真になります。 | (a <> b) は真です。 |
| > | 左のオペランドの値が右のオペランドの値より大きいかどうかを確認し、大きい場合は条件が真になります。 | (a > b) は真ではありません。 |
| < | 左のオペランドの値が右のオペランドの値より小さいかどうかを確認し、小さい場合は条件が真になります。 | (a < b) は真です。 |
| >= | 左のオペランドの値が右のオペランドの値以上かどうかを確認し、そうであれば条件が真になります。 | (a >= b) は真ではありません。 |
| <= | 左のオペランドの値が右のオペランドの値以下かどうかを確認し、そうであれば条件が真になります。 | (a <= b) は真です。 |
| !< | 左のオペランドの値が右のオペランドの値より小さくないかどうかを確認し、小さくなければ条件が真になります。 | (a !< b) は偽です。 |
| !> | 左のオペランドの値が右のオペランドの値より大きくないかどうかを確認し、大きくなければ条件が真になります。 | (a !> b) は真です。 |
例
COMPANY テーブルに次のレコードがあると仮定します:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
以下の例では、さまざまな SQLite 比較演算子の使い方を示します。
ここでは、次を使用しますWHERE WHERE 句については、後の章で個別に説明しますが、ここでは、WHERE 句が SELECT 文の条件を設定するために使用されることを理解しておく必要があります。
次の SELECT 文は、SALARY が 50,000.00 より大きいすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY WHERE SALARY > 50000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
次の SELECT 文は、SALARY が 20,000.00 に等しいすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY WHERE SALARY = 20000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0
次の SELECT 文は、SALARY が 20,000.00 に等しくないすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY WHERE SALARY != 20000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
次の SELECT 文は、SALARY が 20,000.00 に等しくないすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY WHERE SALARY <> 20000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
次の SELECT 文は、SALARY が 65,000.00 以上であるすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY WHERE SALARY >= 65000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
SQLite 論理演算子
以下は SQLite のすべての論理演算子のリストです。
| 演算子 | 説明 |
|---|---|
| AND | AND 演算子は、SQL 文の WHERE 句内で複数の条件を存在させることを許可します。 |
| BETWEEN | BETWEEN 演算子は、指定された最小値と最大値の範囲内の一連の値から値を検索するために使用されます。 |
| EXISTS | EXISTS 演算子は、特定の条件を満たす指定されたテーブル内に行が存在するかを検索するために使用されます。 |
| IN | IN 演算子は、ある値を指定された一連のリストの値と比較するために使用されます。 |
| NOT IN | IN 演算子の反対で、ある値を指定されたリストの値のいずれとも一致しない値と比較するために使用されます。 |
| LIKE | LIKE 演算子は、ワイルドカード演算子を使用した類似の値と、ある値を比較するために使用されます。 |
| GLOB | GLOB 演算子は、ワイルドカード演算子を使用した類似の値と、ある値を比較するために使用されます。GLOB は LIKE と異なり、大文字と小文字を区別します。 |
| NOT | NOT 演算子は、使用された論理演算子の反対です。例:NOT EXISTS、NOT BETWEEN、NOT IN など。これは否定演算子です。 |
| OR | OR 演算子は、SQL 文の WHERE 句内の複数の条件を結合するために使用されます。 |
| IS NULL | NULL 演算子は、ある値を NULL 値と比較するために使用されます。 |
| IS | IS 演算子は = に似ています。 |
| IS NOT | IS NOT 演算子は != に似ています。 |
| || | 2つの異なる文字列を連結して、新しい文字列を取得します。 |
| UNIQUE | UNIQUE 演算子は、指定されたテーブルの各行を検索して、一意性(重複がないこと)を保証します。 |
例
COMPANY テーブルに次のレコードがあると仮定します:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
以下の例では、SQLite 論理演算子の使い方を示します。
次の SELECT 文は、AGE が 25 以上で、且給与が 65000.00 以上であるすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
次の SELECT 文は、AGE が 25 以上で、或給与が 65000.00 以上であるすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
次の SELECT 文は、AGE が NULL ではないすべてのレコードをリストします。結果はすべてのレコードを示し、AGE が NULL に等しいレコードは1つもないことを意味します。
sqlite> SELECT * FROM COMPANY WHERE AGE IS NOT NULL; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
次の SELECT 文は、NAME が 'Ki' で始まるすべてのレコードをリストします。'Ki' の後の文字は制限されません:
sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%'; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 45000.0
次の SELECT 文は、NAME が 'Ki' で始まるすべてのレコードをリストします。'Ki' の後の文字は制限されません:
sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*'; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 45000.0
次の SELECT 文は、AGE の値が 25 または 27 であるすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 ); ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
次の SELECT 文は、AGE の値が 25 でも 27 でもないすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 ); ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
次の SELECT 文は、AGE の値が 25 と 27 の間にあるすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
次の SELECT 文は SQL サブクエリを使用します。サブクエリは SALARY > 65000 の AGE フィールドを持つすべてのレコードを検索し、後続の WHERE 句は EXISTS 演算子とともに使用され、外部クエリの AGE がサブクエリが返す結果に存在するすべてのレコードをリストします:
sqlite> SELECT AGE FROM COMPANY
WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
AGE
----------
32
25
23
25
27
22
24
次の SELECT 文は SQL サブクエリを使用します。サブクエリは SALARY > 65000 の AGE フィールドを持つすべてのレコードを検索し、後続の WHERE 句は > 演算子とともに使用され、外部クエリの AGE がサブクエリが返す結果内の年齢より大きいすべてのレコードをリストします:
sqlite> SELECT * FROM COMPANY
WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
SQLite ビット演算子
ビット演算子はビットに作用し、ビット単位で操作を実行します。真理値表 & と | は次のとおりです:
| p | q | p & q | p | q |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 |
A = 60、B = 13 と仮定すると、2進数形式では次のようになります:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
~A = 1100 0011
次の表に、SQLite 言語がサポートするビット演算子を示します。変数 A=60、変数 B=13 と仮定すると、次のようになります:
| 演算子 | 説明 | 例 |
|---|---|---|
| & | 両方のオペランドに存在する場合、2進AND演算子は1ビットを結果にコピーします。 | (A & B) は 12、つまり 0000 1100 になります。 |
| | | いずれかのオペランドに存在する場合、2進OR演算子は1ビットを結果にコピーします。 | (A | B) は 61、つまり 0011 1101 になります。 |
| ~ | 2進補数演算子は単項演算子で、ビットを「反転」する効果があります。つまり、0は1に、1は0になります。 | (~A ) は -61、すなわち 1100 0011 となり、符号付き2進数の2の補数形式です。 |
| << | 2進左シフト演算子。左オペランドの値を右オペランドで指定されたビット数だけ左に移動します。 | A << 2 は 240、すなわち 1111 0000 になります。 |
| >> | 2進右シフト演算子。左オペランドの値を右オペランドで指定されたビット数だけ右に移動します。 | A >> 2 は 15、すなわち 0000 1111 になります。 |
例
以下の例は、SQLite ビット演算子の使い方を示しています:
sqlite> .mode line sqlite> select 60 | 13; 60 | 13 = 61 sqlite> select 60 & 13; 60 & 13 = 12 sqlite> select (~60); (~60) = -61 sqlite> select (60 << 2); (60 << 2) = 240 sqlite> select (60 >> 2); (60 >> 2) = 15その他の拡張