SQLite基础:语法、数据类型、运算符、表达式
1. 语法
特点:
- SQLite不区分大小写。但是有部分命令区分大小写:GLOB 和 glob 在 SQLite 语句中具有不同的含义。
- 注释以两个连续的“-”字符开头、不能嵌套、与“/”一起出现并扩展到并包括下一个“/”字符对。
- 语句都以一些关键字开头,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等。
所有语句都以分号 (😉 结束。
- ANALYZE 语句
- AND/OR 子句
- ALTER TABLE 语句
- ALTER TABLE 语句(重命名)
- ATTACH DATABASE 语句
- BEGIN TRANSACTION 语句
- BETWEEN 子句
- CREATE INDEX 语句
- CREATE UNIQUE INDEX 语句
- CREATE TABLE 语句
- CREATE TRIGGER 语句
- CREATE VIEW 语句
- CREATE VIRTUAL TABLE 语句
- COMMIT TRANSACTION 语句
- COUNT 计数子句
- DELETE 语句
- DETACH DATABASE 语句
- DISTINCT 子句
- DROP INDEX 语句
- DROP TABLE 语句
- DROP VIEW 语句
- DROP TRIGGER 语句
- EXISTS 子句
- EXPLAIN 语句
- GLOB 子句
- GROUP BY 子句
- HAVING 子句
- INSERT INTO 语句
- IN 子句
- Like 子句
- NOT IN 子句
- ORDER BY 子句
- PRAGMA 语句
- RELEASE SAVEPOINT 语句
- REINDEX 语句
- ROLLBACK 语句
- SAVEPOINT 语句
- SELECT 语句
- UPDATE 更新语句
- VACUUM 语句
2. 数据类型
SQLite数据类型用于指定任何对象的数据类型。在SQLite中,每个列、变量和表达式都有相关的数据类型。这些数据类型在创建表时使用。SQLite使用更通用的动态类型系统。在SQLite中,值的数据类型与值本身相关联,而不是与它的容器相关联。
2.1 SQLite 存储类
存储类 | 描述 |
---|---|
NULL | 它指定该值为空值。 |
INTEGER | 它指定值是一个有符号整数,根据值的大小存储在 1、2、3、4、6 或 8 个字节中。 |
REAL | 它指定值是一个浮点值,存储为一个 8 字节的 IEEE 浮点数。 |
text | 它指定值为文本字符串,使用数据库编码(utf-8、utf-16be 或 utf-16le)存储 |
BLOB | 它指定值是一个数据块,完全按照输入的方式存储。 |
注意:SQLite 存储类比数据类型更通用。例如: INTEGER 存储类包括 6 种不同长度的整数数据类型。
2.1 SQLite 关联类型
SQLite支持列的类型关联。任何列仍然可以存储任何类型的数据,但是列的首选存储类称为其关联。
Affinity | 描述 |
---|---|
TEXT | 此列用于使用存储类 NULL、TEXT 或 BLOB 存储所有数据。 |
NUMERIC | 此列可能包含使用所有五个存储类别的值。 |
INTEGER | 它的行为与具有数字关联的列相同,但在强制转换表达式中例外。 |
REAL | 它的行为类似于具有数字关联的列,只是它强制整数值转换为浮点表示 |
NONE | 具有关联性 NONE 的列不偏爱一种存储类而不是另一种存储类,并且不会将数据从一个存储类说服到另一个。 |
以下是创建 SQLite 表时可以使用的各种数据类型名称的列表:
Data Types | Corresponding Affinity |
---|---|
INT INTEGER TINYINT SMALLINT MEDIUMINT BIGINT UNSIGNED BIG INT INT2 INT8 | INTEGER |
CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE CHARACTER(70) NVARCHAR(100) TEXT CLOB | TEXT |
BLOB no datatype specified | NONE |
REAL DOUBLE DOUBLE PRECISION FLOAT | REAL |
NUMERIC DECIMAL(10,5) BOOLEAN DATE DATETIME | NUMERIC |
2.3 日期和时间数据类型
在 SQLite 中,没有单独的类来存储日期和时间。但是您可以将日期和时间存储为 TEXT、REAL 或INTEGER 值。
存储类 | 日期格式 |
---|---|
TEXT | 它以类似“yyyy-mm-dd hh:mm:ss.sss”的格式指定日期。 |
REAL | 它指定自公元前 4714 年 11 月 24 日中午在格林威治的天数 |
INTEGER | 它指定自 1970-01-01 00:00:00 UTC 以来的秒数。 |
2.4 布尔数据类型
在 SQLite 中,没有单独的布尔存储类。相反,布尔值存储为整数 0 (false) 和 1 (true)。
3. 运算符
3.1 算术运算符
操作符 | 描述 | 例子 |
---|---|---|
‘+’ | 加法运算符:用于将运算符两边的值相加。 | a+b = 150 |
‘-’ | 减法运算符:用于从左手操作数中减去右手操作数。 | a-b = -50 |
‘*’ | 乘法运算符:用于将两边的值相乘。 | a*b = 5000 |
/ | 除法运算符:用于将左手操作数除以右手操作数。 | a/b = 0.5 |
% | 模运算符:用于将左手操作数除以右手操作数并返回余数。 | b%a = 0 |
3.2 比较运算符
操作符 | 描述 | 例子 |
---|---|---|
== | 它用于检查两个操作数的值是否相等,如果是则条件为真。 | (a == b) 不是真的。 |
= | 它用于检查两个操作数的值是否相等,如果是则条件为真。 | (a = b) 不是真。 |
!= | 它用于检查两个操作数的值是否相等,如果值不相等则条件成立。 | (a != b) 是真的。 |
<> | 它用于检查两个操作数的值是否相等,如果值不相等则条件成立。 | (a <> b) 是真的。 |
‘>‘ | 它用于检查左操作数的值是否大于右操作数的值,如果是则条件成立。 | (a > b) 不是真的。 |
< | 它用于检查左操作数的值是否小于右操作数的值,如果是则条件成立。 | (a < b) 是真的。 |
‘>=’ | 它用于检查左操作数的值是否大于或等于右操作数的值,如果是则条件成立。 | (a >= b) 不是真的。 |
<= | 用于检查左操作数的值是否小于或等于右操作数的值,如果是则条件成立。 | (a <= b) 是真的。 |
!< | 用于检查左操作数的值是否不小于右操作数的值,如果是则条件成立。 | (a !< b) 是假的。 |
!> | 它用于检查左操作数的值是否不大于右操作数的值,如果是则条件成立。 | (a !> b) 是真的。 |
3.3 逻辑运算符
操作符 | 描述 |
---|---|
AND | AND 运算符允许在 SQL 语句的 WHERE 子句中存在多个条件。 |
BETWEEN | BETWEEN 运算符用于在给定最小值和最大值的情况下搜索一组值中的值。 |
EXISTS | EXISTS 运算符用于搜索指定表中是否存在满足特定条件的行。IN |
IN | IN 运算符用于将值与已指定的文字值列表进行比较。 |
NOT IN | 它是 IN 运算符的否定,用于将值与已指定的文字值列表进行比较。 |
LIKE | LIKE 运算符用于使用通配符运算符将值与相似值进行比较。 |
GLOB | GLOB 运算符用于使用通配符运算符将值与相似值进行比较。此外, glob 区分大小写,不像喜欢。 |
NOT | NOT 运算符颠倒了与它一起使用的逻辑运算符的含义。例如:EXISTS、NOT BETWEEN、NOT IN 等。这些被称为否定运算符。 |
OR | OR 运算符用于在 SQL 语句的 where 子句中组合多个条件。 |
IS NULL | NULL 运算符用于将值与空值进行比较。 |
IS | IS 运算符的工作方式类似于 = |
IS NOT | IS NOT 运算符的工作方式类似于 != |
‘’// | 此运算符用于添加两个不同的字符串并生成新的字符串。 |
UNIQUE | UNIQUE 运算符搜索指定表的每一行的唯一性(无重复)。 |
3.4 按位运算符
操作符 | 描述 | 例子 |
---|---|---|
& | 如果两个操作数中都存在二进制 AND运算符,则将其复制到结果中。 | (a & b) 将给出 12,即 0000 1100 |
/ | 如果任一操作数中存在二进制 OR 运算符,则复制一点。 | (a |
~ | Binary Ones Complement Operator是一元的,具有“翻转”位的效果。 | (~a ) 将给出 -61,它是 1100 0011 由于带符号的二进制数,以 2 的补码形式表示。 |
<< | 二元左移运算符。左操作数值向左移动右操作数指定的位数。 | a << 2 将给出 240,即 1111 0000 |
'>> | 二元右移运算符。左操作数值向右移动右操作数指定的位数。 | a >> 2 将给出 15,即 0000 1111 |
4. 表达式
SQLite 表达式是一个或多个值、运算符和 SQL 函数的组合。这些表达式用于计算值。
4.1 布尔表达式
SQLite 布尔表达式用于在匹配单个值的基础上获取数据。
SELECT column1, column2, columnN
FROM table_name
WHERE SINGLE VALUE MATCHTING EXPRESSION;
4.2 数值表达式
SQLite 数字表达式用于在查询中执行任何数学运算。
SELECT (25 + 15) AS ADDITION;
数值表达式包含几个内置函数,如 avg()、sum()、count() 等。这些函数称为聚合数据计算函数。
4.3 日期表达式
SQLite 日期表达式用于获取当前系统日期和时间值。
SELECT CURRENT_TIMESTAMP;