English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
演算子は保留語または文字で、主にWHERE子句で比較や算術演算を実行するために使用されます。
演算子は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
変数 a = を仮定します。10、変数 b =20、それでは:
演算子 | 説明 | 例 |
---|---|---|
== | 二つの操作数の値が等しいかどうかを確認し、等しい場合は条件が真です。 | (a == b) が真ではありません。 |
= | 二つの操作数の値が等しいかどうかを確認し、等しい場合は条件が真です。 | (a = b) が真ではありません。 |
!= | 二つの操作数の値が等しいかどうかを確認し、異なる場合は条件が真です。 | (a != b) が真です。 |
<> | 二つの操作数の値が等しいかどうかを確認し、異なる場合は条件が真です。 | (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子句が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のすべてのレコード:
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に含まれるすべての論理演算子のリストです。
演算子 | 説明 |
---|---|
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演算子はWHERE子句の複数の条件を結合するために使用されます。 |
IS NULL | NULL演算子は特定の値をNULL値と比較するために使用されます。 |
IS | IS演算子は = に似ています。 |
IS NOT | IS NOT演算子は != に似ています。 |
|| | 二つの異なる文字列を結合し、新しい文字列を得ます。 |
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のレコードが一つもないことを意味します:
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がサブクエリの返される結果の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がサブクエリの返される結果の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
位演算子は位に対して作用し、逐位に操作を実行します。真値表 & と | は以下の通りです:
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、現在、二進数形式で以下のように表示されます:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
~A = 1100 0011
下表に、SQLite 言語がサポートするビット演算子が示されています。仮に変数 A=60、変数 B=13、つまり:
演算子 | 説明 | 例 |
---|---|---|
& | 二進数 AND 運算子は、両方の操作数に同時に存在する場合、そのビットを結果にコピーします。 | (A & B) は 12、つまり 0000 1100 |
| | 二進数 OR 運算子は、任一操作数に存在する場合、そのビットを結果にコピーします。 | (A | B) は 61、即为 0011 1101 |
~ | 二進数補码運算子は一元運算子で、"反転"位効果を持っており、0は1、1变成0。 | (~A ) は -61、即为 1100 0011、符号付き二進数の補码形式。 |
<< | 二进制左移運算子。左操作数の値を右操作数で指定されたビット数だけ左に移動します。 | A << 2 次の結果が得られます 240、即为 1111 0000 |
>> | バイナリ右シフト演算子。左操作数の値が右操作数で指定されたビット数だけ右にシフトされます。 | 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