欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQLite SELECT 基本组合用法大全

程序员文章站 2022-07-02 20:03:42
SQLite SELECT 基本组合用法大全 //表 ID NAME AGE ADDRESS SALAR...

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 ORDER BY NAME, SALARY ASC;
-- 将结果按 NAME 降序排序:
SELECT * FROM COMPANY ORDER BY NAME DESC;

9. Group By 分组

在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。

-- 了解每个客户的工资总额,则可使用 GROUP BY 查询
SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;

让我们使用下面的 INSERT 语句在 COMPANY 表中另外创建三个记录:

INSERT INTO COMPANY VALUES (8, ‘Paul’, 24, ‘Houston’, 20000.00 );
INSERT INTO COMPANY VALUES (9, ‘James’, 44, ‘Norway’, 5000.00 );
INSERT INTO COMPANY VALUES (10, ‘James’, 45, ‘Texas’, 5000.00 );

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
8 Paul 24 Houston 20000.0
9 James 44 Norway 5000.0
10 James 45 Texas 5000.0
-- 用同样的 GROUP BY 语句来对所有记录按 NAME 列进行分组:
SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
NAME SUM(SALARY)
Allen 15000
David 85000
James 20000
Kim 45000
Mark 65000
Paul 40000
Teddy 20000

10. Having 分组设置条件限制

HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。
WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。

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
8 Paul 24 Houston 20000.0
9 James 44 Norway 5000.0
10 James 45 Texas 5000.0
-- 将显示名称计数大于 2 的所有记录:
SELECT * FROM COMPANY GROUP BY name HAVING count(name) > 2;
ID NAME AGE ADDRESS SALARY
10 James 45 Texas 5000

11. Distinct 消除重复

-- 没有任何重复的条目:
SELECT DISTINCT name FROM COMPANY;
NAME
Paul
Allen
Teddy
Mark
David
Kim
James