阅读目录

一:排序检索数据

1.1 排序数据

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

select * from user;

如下所示:

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

select * from user order by username;

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

1.2 按多个列排序

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

select * from user order by username, password;

1.3 按列位置排序

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

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

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

select * from user order by 2,1;

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

如上,我们的位置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进行降序排序,如下图所示:

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

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

select * from user order by username DESC, password;

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

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

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

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

如下所示:

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

二:过滤数据

2.1 使用where子句

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

基本语法如下:

select * from user where username = 'cccc';

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

2.2 where子句操作符。

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

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

select * from user where password > 500;

2.3 范围值检查

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

select * from user where password between 200 and 500;

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

如下图所示:

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 这个条件进行查询,如下所示:

2. OR 操作符

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

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

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

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

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

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

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

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

4. not操作符

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

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

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

四:用通配符进行过滤

1. like操作符

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

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

1.1 百分号(%) 通配符

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

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

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

如下图所示:

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

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

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

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

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

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

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

1.2 下划线(_) 通配符

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

select * from user where username like 'kongzhixxx__';

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

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

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. <搬运> SQL语句百万数据量优化方案

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

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

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

随机推荐

  1. [NewLife.XCode]对象字典缓存(百万军中取敌首级)

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示例代码和 ...

  2. PC逆向之代码还原技术,第六讲汇编中除法代码还原以及原理第二讲,被除数是正数 除数非2的幂

    目录 一丶简介 二丶代码还原讲解 1.被除数无符号 除数非2的幂 2.被除数无符号 除数为特例7 三丶代码还原总结 一丶简介 上一篇博客说的除2的幂. 如果被除数是有符号的,那么会进行调整,并使用位操 ...

  3. 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes

    前言 在之前的一篇文章中,我们介绍了 如何将一个本地的 Java 应用程序直接部署到阿里云 ECS ,有不少读者反馈,如果目前已经在使用阿里云容器服务 Kubernetes 了,那该如何配合这个插件部 ...

  4. [一]class 文件浅析 .class文件格式详解 字段方法属性常量池字段 class文件属性表 数据类型 数据结构

    前言概述  本文旨在讲解class文件的整体结构信息,阅读本文后应该可以完整的了解class文件的格式以及各个部分的逻辑组成含义   class文件包含了java虚拟机指令集 和  符号表   以及若 ...

  5. Django学习笔记(6)——Form表单

    知识储备:HTML表单form学习 表单,在前端页面中属于最常见的一个东西了.基本上网站信息的提交都用到了表单,所以下面来学习Django中优雅的表单系统:Form 表单的主要作用是在网页上提供一个图 ...

  6. [Go] golang互斥锁mutex

    1.互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码2.Lock()和Unlock()定义临界区 package main import ( " ...

  7. pm2部署nodejs项目

    安装: 最新的PM2稳定版可通过NPM进行安装: npm install pm2@latest -g 用法: 启动,守护和监控应用程序的最简单的方法是使用以下命令行: pm2 start app.js ...

  8. React的组件模式

    组件是 React 的核心,因此了解如何利用它们对于创建优秀的设计结构至关重要. 什么是组件 根据 React 官网的介绍,"组件让你可以将 UI 分割成独立的.可重用的部分,并独立管理每个 ...

  9. BOM简单知识

    JS分为ECMAScript,DOM,BOM BOM是用来和浏览器进行‘’对话‘’的 一:与window对象进行交互: 1.查看用户信息: window.navigator.userAgent; 可以 ...

  10. react create-react-app 跨域

    "proxy":"http://youAddr.com" 直接到根目录package.json里增加上面这行就行了,改成自己需要的地址.