SQL语句检索数据排序及过滤

时间:2022-09-06 10:01:33

阅读目录

一:排序检索数据

1.1 排序数据

比如查询数据库中表数据的时候,我们使用如下语句:

select * from user;

如下所示:

SQL语句检索数据排序及过滤

但是上面查询出来的数据并没有排序过的,因此如果我们想让数据进行排序,我们可以使用 order by子句。order by 子句会以字母顺序排序数据的。如下排序代码:

select * from user order by username;

如上的含义是:查询user表,以username这个字段进行字母排序。然后结果如下所示:

SQL语句检索数据排序及过滤

1.2 按多个列排序

比如说我这个user表中,不仅仅按照username这个字段进行排序,还会按照password这个字段进行排序。首先我们会先按照username这个字段进行排序,排序完成后,然后再会按照password这个这段进行排序。如果按照多个列进行排序的话,那么多个列之间是用逗号分开即可。如下基本语法:

select * from user order by username, password;

SQL语句检索数据排序及过滤

1.3 按列位置排序

order by 还支持按相对位置进行排序。

比如我们先用 select * from user; 使用该语句查询 user表中所有的数据,结果如下:

SQL语句检索数据排序及过滤

如上是在数据库中默认排序的。我们现在要按照数字位置进行排序,如下基本代码:

select * from user order by 2,1;

如上代码的含义是:先按照列位置2进行排序,然后再按照列位置1进行排序。因此排序结果如下所示:

SQL语句检索数据排序及过滤

如上,我们的位置2,1其实就是按照user表中的字段username字段进行排序,再安装user表中的id字段进行排序。也就是说username字段排序完成后(username字段是按照字母的顺序排序的),然后我们再按照id进行排序(id是按照数字大小顺序排序的。)

1.4 指定排序方向

1.4.1 对单个字段进行降序排序

数据排序我们默认的是按照字母顺序排序的(从A到Z), 我们也可以使用order by 按照字母的降序排序(从Z到A进行排序)。
如果为了进行降序排序,我们必须需要指定DESC这个关键字。

比如如下语法:

select * from user order by id DESC;

如上代码的含义是 查询user表中的所有数据,然后按照id进行降序排序,如下图所示:

SQL语句检索数据排序及过滤

1.4.2 对多个字段进行降序排序

如上只是对单个字段进行降序排序,那如果对多个字段进行降序排序呢?比如如下基本语法:

select * from user order by username DESC, password;

注意:desc关键字只应用到直接位于其前面的列名。

上面sql语句的含义是:先按照username这个字段的值进行降序排序,然后再按照password这个值进行升序排序。比如如下所示:
SQL语句检索数据排序及过滤

那如果我们需要对username和password这个字段都进行排序呢?那就需要在每个字段后面都加上 desc这个关键字了,SQL语句如下所示:

select * from user order by username DESC, password DESC;

如下所示:

SQL语句检索数据排序及过滤

注意:对字段进行升序排序,该关键字就是 ASC了。默认就是按照升序排序的。

二:过滤数据

2.1 使用where子句

数据库表中一般会包含很多数据的,为了查找速度更快,我们需要根据某个条件去查找。因此搜索条件也属于过滤条件的一种。

基本语法如下:

select * from user where username = 'cccc';

如上语法的基本含义是:我们会查询user表中所有的数据,然后我们根据条件username='cccc' 这个条件去查找数据的。
如下图所示:

SQL语句检索数据排序及过滤

2.2 where子句操作符。

什么是子句操作符呢?比如 =(等于),!=(不等于),<(小于),<=(小于等于),!<(不小于),>(大于),>=(大于等于),!>(不大于), between(在指定的两个值之间),IS NULL(为NULL值)。

下面我们来使用下上面的操作符,下面我们来查询数据库表user表中的数据,然后我们查找 password这个字段的值大于500的。如下基本语法所示:

select * from user where password > 500;

SQL语句检索数据排序及过滤

2.3 范围值检查

要检查某个范围的值,我们可以使用 between 这个操作符,其基本语法如下:

select * from user where password between 200 and 500;

如上代码的含义是:我们查询user表,然后我们根据password这个字段进行查询,查询到该值是在200到500范围之内的,它是不包括500的。

如下图所示:

SQL语句检索数据排序及过滤

2.4 空值检查

在创建表的时候,我们会设置某个字段为null的时候,那么我们不能简单的检查是否等于null, select语句有一个特殊的where子句,可用来检查具有null值的列,这个where子句就是 is null子句。其基本语法如下:

select * from user where password is null;

上面语法的含义是:查询user表中的所有字段,其中password这个字段为null的值。

三:高级数据过滤

组合where子句

SQL允许给出多个where子句。这些子句有两种使用方式,即以and子句或or子句的方式使用。

1. AND 操作符

如下基本语法:

select * from user where username = 'cccc' and password > 200; 

如上语句的含义是:查询user这张表中的所有数据,然后根据 username='cccc' 和 password 大于200 这个条件进行查询,如下所示:
SQL语句检索数据排序及过滤

2. OR 操作符

or操作符和and操作符相反,它匹配的含义是:只要匹配上任意一个条件即可。如下基本语法:

select * from user where username = 'cccc' or password > 200; 

如上代码的含义是:查询user这张表,如果这张表username='cccc' 的话,就会把数据查询出来,或者 说 password > 200 的这种情况下,也会把对应的数据查询出来,如下图所示:
SQL语句检索数据排序及过滤

3. in 操作符
in操作符用来指定条件范围,范围中的每个条件都可以进行匹配。in取一组由逗号分隔,括在圆括号中的合法值。
如下基本语法:

select * from user where password in (234, 456, 123);

如上代码的含义是:查询user这张表,并且根据password这个字段中的值是 234, 456, 123 会把所有的数据查询出来,如下所示:

SQL语句检索数据排序及过滤

使用in操作符,优点如下:

1. 在有很多合法选项时候,in操作符的语法更清楚,更直观。
2. 在与其他and和or操作符组合使用in时,求值顺序更容易管理。
3. in操作符一般比一组or操作符执行更快。

4. not操作符

该操作符有且只有一个功能,那就是否定其后所跟的任何条件。如下基本语法:

select * from user where not username='cccc';

如上代码的含义是:查询user这张表,并且username 不等于 cccc 这个值的所有条件。如下所示:

SQL语句检索数据排序及过滤

四:用通配符进行过滤

1. like操作符

我们前面介绍的所有的都是针对已知值进行过滤的。不管是匹配一个值还是多个值。检索大于还是小于已知值,或者检查某个范围的值,他们的共同点就是过滤中使用的值都是已知的。

但是有时候我们需要进行模糊搜索,比如说我们要搜索字符串中 'kongzhi' 含有字符 'kong' 这个字符的所有值。因此我们这里需要使用通配符进行搜索。

1.1 百分号(%) 通配符

该通配符的含义是:%(百分号) 表示任何字符出现任意次数。如下基本语法:

select * from user where username like 'kong%';

如上代码含义是:查询user这张表中的所有数据,并且该表中的username字段值以 字符 'kong' 开头的所有匹配的值。

如下图所示:

SQL语句检索数据排序及过滤

百分号('kong%') 通配符的含义是:匹配以字符 'kong' 开头的字符,不管它后面有多少个字符都匹配。

注意:通配符可在搜索模式中的任意位置上使用,并且可以使用多个通配符。比如可以使用两个通配符,它在字符的两端。如下语法:

select * from user where username like '%kongzhi%';

该代码的含义是匹配user这张表中的字段 username,该字符中包含kongzhi这个字符,不管该字符之前或之后出现什么字符。如下所示:

SQL语句检索数据排序及过滤

通配符也可以出现在搜索模式的中间,比如找出以kong开头的字符,以zhi字符结尾的;如下代码:

select * from user where username like 'kong%zhi';

如上代码的含义是:查询user表中的字段以kong字符开头的,以字符zhi结尾的所有匹配到的数据,如下图所示:

SQL语句检索数据排序及过滤

1.2 下划线(_) 通配符

下划线 _ 通配符的用途和%通配符一样,但是它只匹配单个字符,而我们上面的百分号(%)可以匹配0个,1个或多个字符。

select * from user where username like 'kongzhixxx__';

如上代码,是匹配user这张表中的username字段中的字符 kongzhixxx 后 跟两个任意字符的字符串。如下图所示:

SQL语句检索数据排序及过滤

注意:使用通配符搜索比上面其他的搜索耗费的时间会更多。因此不到万不得已的时候尽量不要使用。

SQL语句检索数据排序及过滤的更多相关文章

  1. 使用SELECT语句检索数据

    使用SELECT语句检索数据select指令适用于SQL数据库SELECT 语句用于从数据库中选取数据.(指令不分大小写,选择的值除名字和一些有特殊意义的字符可不分大小写,from结束时一定要加;) ...

  2. PHP如何通过SQL语句将数据写入MySQL数据库呢?

    1,php和MySQL建立连接关系 2,打开 3,接受页面数据,PHP录入到指定的表中 1.2两步可直接使用一个数据库链接文件即可:conn.php <?phpmysql_connect(&qu ...

  3. 通过Sql语句导数据

    在通过SQL Server向导中的SQL语句导数据时,默认情况下源表中的nvarchar字段类型会变成202,解决此问题的方法是,要重新选择一下对应的数据接收表.

  4. SQL语句之 数据约束

    SQL语句之 数据约束 什么是数据约束 数据约束用来限制用户对数据的非法的修改操作. 1.约束字段的默认值 如果插入记录时,没有给某个字段赋值,那么我们可以设置它的默认值 关键字:default CR ...

  5. 使用SQL语句进行数据复制

    使用SQL语句对数据或者表进行复制,一般用于两张表结构相同的时候使用. SQL Server中,如果目标表存在: insert into 目标表 select * from 原表; SQL Serve ...

  6. sql语句百万数据量优化方案

    一:理解sql执行顺序 在sql中,第一个被执行的是from语句,每一个步骤都会产生一个虚拟表,该表供下一个步骤查询时调用,比如语句:select top 10 column1,colum2,max( ...

  7. mysql详解常用命令操作,利用SQL语句创建数据表—增删改查

    关系型数据库的核心内容是 关系 即 二维表 MYSQL的启动和连接show variables; [所有的变量] 1服务端启动 查看服务状态 sudo /etc/init.d/mysql status ...

  8. &lt&semi;搬运&gt&semi; SQL语句百万数据量优化方案

    一:理解sql执行顺序 在sql中,第一个被执行的是from语句,每一个步骤都会产生一个虚拟表,该表供下一个步骤查询时调用,比如语句:select top 10 column1,colum2,max( ...

  9. 《mysql必知必会》笔记1(检索、排序、过滤、计算、汇聚、分组)

    一:了解SQL 1:列是表中的字段,所有表都由一个或多个列组成的.行是表中的记录,表中的数据都按行存储. 2:表中每一行都应该有可以唯一标识自己的一列或一组列.主键(一列或一组列),其值能够唯一区分每 ...

随机推荐

  1. 烂泥:haproxy与nginx、zabbix集成

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 昨天介绍了haproxy的手机匹配规则,今天再来介绍下haproxy与nginx.za ...

  2. iOS AutoLayout自动布局&amp&semi;Masonry介绍与使用实践

    Masonry介绍与使用实践:快速上手Autolayout http://www.cnblogs.com/xiaofeixiang/p/5127825.html http://www.cocoachi ...

  3. WCF - 实例与会话

    实例上下文 实例上下文是对服务实例的封装 是WCF管理服务实例生命周期的依托  一个WCF服务通过ServiceHost进行寄宿 开启服务后当接收到请求 则会判断当前是否存在实例上下文 如果存在 则通 ...

  4. call 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法&period;

    call 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法. 注意:该函数的语法与 apply() 方法的语法几乎完全相同,唯一的区别在于,apply()方法接受的是一个参 ...

  5. vc类型转换函数大全

    windows c++中存在各种类型,在实际应用过程中也需要将类型互相转换,故整理了常用类型之间的转换并将之封装成函数,仅供参考,有什么不对的地方,还请指正!   ****************** ...

  6. prometheus 基于文件的目标发现

    prometheus 基于文件的目标发现 1.创建目录 cd /usr/local/prometheus/conf mkdir -pv targets/{nodes,docker} 2.修改prome ...

  7. 数字特征值-java

    题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作x,如果x和n的奇偶性相 ...

  8. Linux for python教程02

    目录 1. Linux用户及权限管理 1.1. who 1.2. 查看当前用户: whoami 1.3. 添加用户账号: useradd 1.4 切换用户 su 2.用户组 3. 修改文件权限: ch ...

  9. JSON数据格式解析

    JSON数据的语法规则 1.数据以键值对的形式 2.数据由逗号分隔 3.花括号保存对象 4.方括号保存数组 以PHP的数组为例: <?php $arr = array( "aaaa&q ...

  10. TDD中的单元测试写多少才够?

    测试驱动开发(TDD)已经是耳熟能详的名词,既然是测试驱动,那么测试用例代码就要写在开发代码的前面.但是如何写测试用例?写多少测试用例才够?我想大家在实际的操作过程都会产生这样的疑问. 3月15日,我 ...