一、数据检索
1.基本格式
select [字段名...] from 表名 where 表达式
2.查询所有列
select * from 表名 where 表达式;
*通常会降低检索和应用程序的性能,能不用尽量不用
3.去重检索 DISTINCT
mysql>> select DISTINCT 字段 from 表名;
DISTINCT 必须直接放在列名的前面,作用于后面所有列
4.限制结果
在SQL Server和Access中使用SELECT时,可以使用TOP关键字来限制最多返回多少行
mysql>> select TOP 5 * from user;
如果你使用MySQL、MariaDB、PostgreSQL或者SQLite,需要使用LIMIT 子句,offset 第0行开始
mysql>> select * from user LIMIT 5 OFFSET 5;
5.使用注释
行内注释:
--(两个连字符 ,之后的便是注释文本)
行首注释:
# 在每一行的行首加# ,注释整行
多行注释:
/**/
以上都基于mysql语句
二、排序检索
1.ORDERBY
mysql>> select * from user ORDER BY [字段名...];
保证oder by为select最后一条子句,按后接字段名优先级排序
2.按字段位置排序
mysql>> select * from user ORDER BY 2,3;
按照第二列与第三列排序
3.降序排列
mysql>> select * from user ORDER BY [字段..] DESC;
DESC 只应用到直接位于其前面的列名,所列降序需指定多个DESC
三、数据过滤
数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指
定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。
1.where子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<>、!= | 不等于 |
< | 小于 |
<= | 小于等于 |
BETWEEN AND | 在指定两个值之间 |
IS NULL | 为NULL值 |
eg:
select * from user where id BETWEEN 5 AND 10;
select * from user where id IS NULL;
null和非匹配
通过过滤选择不包含指定值的所有行时,你可能希望返回含NULL值的行。但是这做不到。因为未知(unknown)有特殊的含义,数据库不知
道它们是否匹配,所以在进行匹配过滤或非匹配过滤时,不会返回这些结果。
过滤数据时,一定要验证被过滤列中含NULL的行确实出现在返回的数据中
四、高级数据过滤
用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logical operator)
1.AND操作符
要通过不止一个列进行过滤,可以使用AND操作符给WHERE子句附加条件
mysql>> select * from user where id <10 AND id >2;
2.OR操作符
在第一个条件满足时,不管第二个条件是否满足,相应的行都将被检索出来
mysql>> select * from user where id <10 OR id >2;
3. WHERE OR 组合使用
mysql>> select * from user where id <10 AND id >2 OR sex = 1;
结合使用时,AND在求值过程中优先级更高,使用圆括号可消除歧义
4.IN操作符
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配
mysql>> select * from user where name IN ('july','tofu');
IN操作符拥有和OR相似的功能
IN操作符优点:
- 在有很多合法选项时,IN操作符的语法更清楚,更直观。
- 在与其他AND和OR操作符组合使用IN时,求值顺序更容易管理。
- IN操作符一般比一组OR操作符执行得更快(在上面这个合法选项很少的例子中,你看不出性能差异)。
- IN的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE子句。
5.NOT操作符
NOT操作符有且只有一个功能,那就是否定其后所跟的任何条件,一般和IN配合使用
mysql>> select * from user where NOT id=6 ORDER BY id;
五、通配符(wildcard)过滤
1.LIKE操作符
通配符搜索只能用于文本字段(串),非文本数据类型字段不能使用通配符搜索
为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较。
2.百分号(%)
在搜索串中,%表示任何字符(包括空格)出现任意次数,相当于其他模式的,可在任意位置使用,使用多个,不匹配NULL*
mysql>> select * from user where name LIKE "lily%";
3.下划线(_)
下划线的用途与%一样,但它只匹配单个字符
相当于填空,一个字符
mysql>> select * from user where name LIKE "_eo";
4.方括号([ ])
方括号([])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符
只有微软的Access和SQL Server支持集合
和正则表达式规则类似
5.通配符技巧
- 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
- 在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。
- 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据