第八章 数据库查询
基本的查询语句
- SELECT语句
- 基本语法:
SELECT 字段列表 FROM 表名 WHERE 查询条件;
- 查询多个字段列表,字段列表处需要用逗号隔开
- where是字句,可选项,限定查询条件用
- 例如,
select f_id,f_name from test1 where f_name='xi';
- 基本语法:
单表查询
单表查询概念:从一张表中查询所有的数据
单表查询相关指令
-
查询所有字段:
SELECT * FROM 表的名称;
-
查询指定字段:
SELECT 字段列表(列名) FROM 表名;
-
查询指定记录:
-
使用in和not in关键字进行范围查找:
-
SELECT 字段列表 FROM 表名 WHERE 字段列表 IN (要查的数据内容);
例如:
select s_id from test1 where s_id in (123,124);
,表示在s_id内找到有123和124的数据内容 -
SELECT 字段列表 FROM 表名 WHERE 字段列表 NOT IN (不要查的数据内容) ORDER BY 字段列表;
例如:
select s_id from test1 where s_id not in (124) order by s_id;
,表示在s_id内找除了124以外的数据内容
-
-
使用between关键字进行范围查找:
SELECT 字段列表 FROM 表名 WHERE 字段列表 BETWEEN 查找范围(小) AND 查找范围(大) ORDER BY 字段列表;
-
使用like关键字进行模糊查询:
SELECT 字段列表 FROM 表名 WHERE 字段列表 LIKE '模糊查询内容1%模糊查询内容2';
-
加了百分号表示查询以查询内容1开头的内容
例如,
select f_name from test1 where f_name like 'm%';
-
模糊查询结尾
-
模糊查询内容2为可选项,表示以模糊查询内容2结尾的内容
-
也可以“(前面字符个数的下划线)模糊搜索内容2”来查询以模糊搜索内容2结尾的内容
例如,
select f_name from test1 where f_name like '__i';
-
-
参数
- #%:匹配任意长度
- _:匹配任意字符
-
-
-
查询空值:
SELECT 列名 FROM 表名 WHERE 列名 IS NULL;
例如:(’'表示空字符串,NULL表示空值)
insert into test2 (id,name) values ('129',NULL);
SELECT ID FROM TEST2 WHERE NAME IS NULL;
-
多条件查询:
SELECT 字段列表 FROM 表名 WHERE 字段列表 条件1 OR 条件2;
例如,
SELECT ID FROM TEST2 WHERE NAME='1' OR NULL;
-
查询结果排序:
- 语法格式:在查询条件最后加
ORDER BY 字段列表
- 例如:
select s_id from test1 where s_id in (123,124) order by s_id;
- 语法格式:在查询条件最后加
合并查询结果并去重
-
合并查询结果关键字:UNION
-
例如:
SELECT ID,NAME FROM TEST2 WHERE ID<128 UNION ALL SELECT ID,NAME FROM TEST2 WHERE ID IN (123,126) AND NAME IN (1);
- UNION后加上ALL:不删除重复的行
- UNION后不加ALL:删除重复的行(去重)
正则表达式查询
- 正则表达式关键字:REGEXP
- 一条语句中匹配的字符可以不止一个
- 符号
符号 | 含义 |
---|---|
^ | 匹配文件的开头字符 |
$ | 匹配文件结尾的字符 |
. | 匹配任意单个字符 |
* | 匹配任意个字符(包括0个) |
+ | 匹配前面的字符1~n次 |
[字符集合] | 匹配范围中的任意字符 |
[^] | 匹配不在范围内的任何字符 |
{n} | 匹配前面的字符至少n次 |
{n,m} | 匹配前面的字符n~m次 |
匹配包含任意字符串的文本 |
查询特定字符开头的记录
例如:select * from test3 where name regexp '^x';
,为查询name列中以x字符开头的记录
查询特定字符结尾的记录
例如:select * from test3 where name regexp 'i$';
,为查询name列中以i字符结尾的记录
用点符号.替代任意字符
例如:select * from test3 where name regexp '^.';
,为查询任意字符开头的记录
使用+和*匹配多个字符
例1:select * from test3 where name regexp 'e*';
表示查询匹配e任意个的记录(包括0个)
例2:select * from test3 where name regexp 'e+';
表示查询匹配e至少1个的记录