English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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、それでは:

演算子説明
==二つの操作数の値が等しいかどうかを確認し、等しい場合は条件が真です。(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論理演算子

以下はSQLiteに含まれるすべての論理演算子のリストです。

演算子説明
ANDAND演算子は、SQL文のWHERE子句内で複数の条件の存在を許可します。
BETWEENBETWEEN演算子は、指定された最小値と最大値の範囲内の値の中で値を検索するために使用されます。
EXISTSEXISTS演算子は、特定の条件を満たす指定されたテーブル内の行の存在を検索するために使用されます。
ININ演算子は、ある値を指定されたリストの値と比較するために使用されます。
NOT ININ演算子の対立演算子で、ある値を指定されたリストに含まれない値と比較するために使用されます。
LIKELIKE演算子は、ある値をワイルドカード演算子を使用した似た値と比較するために使用されます。
GLOBGLOB演算子は特定の値をワイルドカード演算子を使用した似た値と比較するために使用されます。GLOBはLIKEと異なり、大文字小文字を区別します。
NOTNOT演算子は使用される論理演算子の対極です。例えばNOT EXISTS、NOT BETWEEN、NOT INなどがあります。これは否定演算子です。
OROR演算子はWHERE子句の複数の条件を結合するために使用されます。
IS NULLNULL演算子は特定の値をNULL値と比較するために使用されます。
ISIS演算子は = に似ています。
IS NOTIS NOT演算子は != に似ています。
||二つの異なる文字列を結合し、新しい文字列を得ます。
UNIQUEUNIQUE演算子は指定されたテーブルの各行を検索し、一貫性(重複なし)を確保します。

オンラインサンプル

仮に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

SQLite 位演算子

位演算子は位に対して作用し、逐位に操作を実行します。真値表 & と | は以下の通りです:

pqp & qp | q
0000
0101
1111
1001

仮に 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