SQLite Операторы

Что такое оператор SQLite?

Оператор — это зарезервированное слово или символ, в основном используемый в предложении WHERE инструкции SQLite для выполнения операций, таких как сравнения и арифметические операции.

Операторы используются для указания условий в инструкции SQLite и для объединения нескольких условий в инструкции.

  • Арифметические операторы

  • Операторы сравнения

  • Логические операторы

  • Побитовые операторы

Арифметические операторы SQLite

Предположим, переменная a=10 и переменная b=20, тогда:

OperatorОписаниеПример
+Сложение — складывает значения с обеих сторон оператора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, тогда:

OperatorОписаниеПример
==Проверяет, равны ли значения двух операндов; если да, условие становится истинным.(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,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.

OperatorОписание
ANDОператор AND позволяет наличие нескольких условий в предложении WHERE оператора SQL.
МЕЖДУОператор BETWEEN используется для поиска значений в диапазоне значений, заданном минимальным и максимальным значением.
EXISTSОператор EXISTS используется для поиска наличия строки в указанной таблице, удовлетворяющей определённым критериям.
INОператор IN используется для сравнения значения со списком указанных значений.
NOT INПротивоположность оператора IN, используется для сравнения значения со значениями, которых нет в указанном списке.
LIKEОператор LIKE используется для сравнения значения с похожими значениями с помощью подстановочных знаков.
GLOBОператор GLOB используется для сравнения значения с похожими значениями с помощью подстановочных знаков. GLOB отличается от LIKE тем, что учитывает регистр.
НЕОператор NOT является противоположностью используемого логического оператора. Например, NOT EXISTS, NOT BETWEEN, NOT IN и т. д.Это отрицающий оператор.
ORОператор OR используется для объединения нескольких условий в предложении WHERE оператора SQL.
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 больше или равен 25andand SALARY больше или равен 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 больше или равно 25orand SALARY больше или равно 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, который находит все записи с полями AGE, где SALARY > 65000. Последующее предложение 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, который находит все записи с полями AGE, где SALARY > 65000. Последующее предложение 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, тогда:

OperatorОписаниеПример
&Двоичный оператор 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
Другие расширения