SQLite SELECT 基本组合用法大全
//表
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 |
1. Where 条件筛选
SELECT * FROM COMPANY WHERE AGE = 25 ;
2. AND/OR NOT/BETWEEN交并集
-- AGE 大于等于 25 且工资大于等于 65000.00 的所有记录:
SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
-- AGE 大于等于 25 或工资大于等于 65000.00 的所有记录:
SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
-- AGE 不为 NULL 的所有记录
SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
-- AGE 的值为 25 或 27 的所有记录:
SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
-- AGE 的值既不是 25 也不是 27 的所有记录:
SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
-- AGE 的值在 25 与 27 之间的所有记录:
SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
-- 使用 SQL 子查询,子查询查找 SALARY > 65000 的带有 AGE 字段的所有记录,后边的 WHERE 子句与 EXISTS 运算符一起使用,列出了外查询中的 AGE 存在于子查询返回的结果中的所有记录
SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
-- 使用 SQL 子查询,子查询查找 SALARY > 65000 的带有 AGE 字段的所有记录,后边的 WHERE 子句与 > 运算符一起使用,列出了外查询中的 AGE 大于子查询返回的结果中的年龄的所有记录:
SELECT * FROM COMPANY WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
3. Update 更新
-- 更新 ID 为 6 的客户地址:
UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
-- 修改 COMPANY 表中 ADDRESS 和 SALARY 列的所有值,则不需要使用 WHERE 子句
UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00;
4. Delete 删除
-- 删除 ID 为 7 的客户:
DELETE FROM COMPANY WHERE ID = 7;
-- 从 COMPANY 表中删除所有记录,则不需要使用 WHERE 子句
DELETE FROM COMPANY;
5. Like 模糊匹配
这里有两个通配符与 LIKE 运算符一起使用:
– 百分号 (%)
– 下划线 (_)
百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。
语句 |
描述 |
WHERE SALARY LIKE ‘200%’ |
查找以 200 开头的任意值 |
WHERE SALARY LIKE ‘%200%’ |
查找任意位置包含 200 的任意值 |
WHERE SALARY LIKE ‘_00%’ |
查找第二位和第三位为 00 的任意值 |
WHERE SALARY LIKE ‘2_%_%’ |
查找以 2 开头,且长度至少为 3 个字符的任意值 |
WHERE SALARY LIKE ‘%2’ |
查找以 2 结尾的任意值 |
WHERE SALARY LIKE ‘_2%3’ |
查找第二位为 2,且以 3 结尾的任意值 |
WHERE SALARY LIKE ‘2___3’ |
查找长度为 5 位数,且以 2 开头以 3 结尾的任意值 |
//
-- COMPANY 表中 AGE 以 2 开头的所有记录:
SELECT * FROM COMPANY WHERE AGE LIKE '2%';
--COMPANY 表中 ADDRESS 文本里包含一个连字符(s)的所有记录
SELECT * FROM COMPANY WHERE ADDRESS LIKE '%s%';
6. Glob 匹配指定模式
SQLite 的 GLOB 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,GLOB 运算符将返回真(true),也就是 1。与 LIKE 运算符不同的是,GLOB 是大小写敏感的,对于下面的通配符,它遵循 UNIX 的语法。
– 星号 (*)
– 问号 (?)
星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用。
语句 |
描述 |
WHERE SALARY GLOB ‘200*’ |
查找以 200 开头的任意值 |
WHERE SALARY GLOB ‘*200*’ |
查找任意位置包含 200 的任意值 |
WHERE SALARY GLOB ‘?00*’ |
查找第二位和第三位为 00 的任意值 |
WHERE SALARY GLOB ‘2??’ |
查找以 2 开头,且长度至少为 3 个字符的任意值 |
WHERE SALARY GLOB ‘*2’ |
查找以 2 结尾的任意值 |
WHERE SALARY GLOB ‘?2*3’ |
查找第二位为 2,且以 3 结尾的任意值 |
WHERE SALARY GLOB ‘2???3’ |
查找长度为 5 位数,且以 2 开头以 3 结尾的任意值 |
-- COMPANY 表中 AGE 以 2 开头的所有记录:
SELECT * FROM COMPANY WHERE AGE GLOB '2*';
-- COMPANY 表中 ADDRESS 文本里包含一个连字符(-)的所有记录:
SELECT * FROM COMPANY WHERE ADDRESS GLOB '*-*';
7. Limit 条数限制
-- 用法1 默认从第0个开始
SELECT column1, column2, columnN FROM table_nameLIMIT rows;
-- 用法2 从第几个开始
SELECT column1, column2, columnN FROM table_name LIMIT rows OFFSET num
-- 从表中提取的行数:
SELECT * FROM COMPANY LIMIT 6;
-- 从一个特定的偏移开始提取记录。下面是一个实例,从第三位开始提取 6 个记录:
SELECT * FROM COMPANY LIMIT 6 OFFSET 2;
8. Order By 排序
-- 将结果按 SALARY 升序排序:ASC(升序)
SELECT * FROM COMPANY ORDER BY SALARY ASC;
-- 将结果按 NAME 和 SALARY 升序排序:NAME的优先级高于SALARY
SELECT * FROM COMPANY O