当前位置:首页 > 数据库 > MySQL条件查询

MySQL条件查询

2022年08月06日 08:30:28数据库6

目录

MySQL条件查询

基本匹配条件

数值比较

字符比较/匹配空/匹配非空

逻辑匹配

范围匹配/去重显示

高级匹配条件

模糊查询

正则表达式

四则运算

操作查询结果

聚集函数

查询结果排序

查询结果分组

查询结果过滤

限制查询结果显示行数


MySQL条件查询

基本匹配条件

  • 适用于 select、update、delete 记录操作

数值比较

  • 字段必须是数值类型

类型

比较

例子

=

相等

UID = 3

>

大于

UID > 3

>=

大于或等于

UID >= 3

<

小于

UID < 3

<=

小于或等于

UID <= 3

!=

不相等

UID != 3

  • 示例

mysql> select username,UID from db3.user where UID=0;       //匹配字段UID的值等于0的行,显示行中的username字段和UID字段

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,UID,GID from db3.user where UID = GID;      //匹配字段UID的值等于字段GID的值的行,显示行中的username字段、UID字段、GID字段

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,UID,GID from db3.user where UID != GID;       //匹配字段UID的值不等于字段GID的值的行,显示行中的username字段、UID字段、GID字段

MySQL条件查询 _ JavaClub全栈架构师技术笔记

字符比较/匹配空/匹配非空

  • 字段必须是字符类型,且字符需要用双引号引起来

类型

比较

例子

=

相等

name = "root"

!=

不相等

name != "root"

is null

shell is null

is not null

非空

shell is not null

  • 示例

    • 字符比较

mysql> select username,shell from db3.user where shell = "/bin/bash"; //匹配shell字段的值为/bin/bash的行,显示行中的username字段和shell字段

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,shell from db3.user where shell != "/bin/bash"; //匹配shell字段的值不为/bin/bash的行,显示行中的username字段和shell字段

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • 匹配空

mysql> select username from db3.user where username is null;      //查询字段username为空值的

Empty set (0.00 sec)

mysql> desc db3.user;      //字段username允许为空

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> insert into db3.user(username,UID) values(null,1002);       //插入记录字段username赋空值

Query OK, 1 row affected (0.00 sec)

mysql> select username,UID from db3.user where username is null;       //查询username为空值的

MySQL条件查询 _ JavaClub全栈架构师技术笔记

注:"null"和""不是空

mysql> insert into db3.user(username,UID) values("null",1003);      //注:"null"不是空,是字符串null

mysql> select username,UID from db3.user where username is null;      //匹配空是匹配不到的

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,UID from db3.user where username="null";

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> insert into db3.user(username,UID) values("",1003);      //注:""不是空,是无字符

mysql> select username,UID from db3.user where username is null;     //匹配空是匹配不到的

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,UID from db3.user where username="";

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • 匹配非空

mysql> select username,UID from db3.user where username is not null;       //匹配字段username的值为非空的

MySQL条件查询 _ JavaClub全栈架构师技术笔记

//如图所示:"null"和""是非空

逻辑匹配

  • 多个判断条件时使用

类型

用途

格式

说明

or

逻辑或

条件1 or 条件2 or 条件3

多个匹配条件,某一个条件成立即可

and

逻辑与

条件1 and 条件2 and 条件3

多个匹配条件,必须同时成立

! 或 not

逻辑非

取反

  • 示例

mysql> select username,UID from db3.user where username="root" and UID=1;     //匹配字段username的值为root且字段UID的值为1的记录,这两个条件必须同时满足,没有输出结果表示没有能同时满足这两个条件的记录。

Empty set (0.00 sec)

mysql> select username,UID from db3.user where username="root" or UID=1;     //匹配字段username的值为root或字段UID的值为1的记录,两个条件满足其中一个即可

MySQL条件查询 _ JavaClub全栈架构师技术笔记

范围匹配/去重显示

  • 匹配范围内的任意一个值即可

类型

比较

in (值列表)

在...里...

not in (值列表)

不在...里...

between 数字 and 数字

在...之间...

distinct 字段名

去重显示

  • 示例

    • in (值列表)

mysql> select username from db3.user where username in ("sync","daemon","apache","mysql");      //匹配字段username的值在值列表里的

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,UID from db3.user where UID in (0,1,2,3);      //值列表里也可以是数字,匹配字段UID的值在值列表里的

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • not in (值列表)

mysql> select username,shell from db3.user where shell not in ("/bin/bash","/sbin/nologin");      //匹配字段shell的值不在值列表里的

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • between 数字 and 数字

mysql> select username,UID from db3.user where UID between 10 and 20;     //匹配字段UID的值在10到20之间的行

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select id,username,UID from db3.user where id between 10 and 20;       //匹配字段id的值在10到20之间的行

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • distinct 字段名(去重显示)

mysql> select shell from db3.user;    

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select distinct shell from db3.user;      //去重显示

MySQL条件查询 _ JavaClub全栈架构师技术笔记

高级匹配条件

  • 适用于 select、update、delete 记录操作

模糊查询

  • 用法

—— where 字段名 like '表达式'   注:表达式可以用通配符来表示

—— _:表示1个字符

—— %:表示0~n个字符

  • 示例

    • 列出字段username的值有“4个字符”的记录

mysql> select username from db3.user where username like '____';

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • 列出字段username的值“含字符a”的记录

mysql> select username from db3.user where username like '%a%';

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • 列出字段username的值“以字符a开头”的记录

mysql> select username from db3.user where username like 'a%';

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • 列出字段username的值“至少有4个字符”的记录

mysql> select username from db3.user where username like '__%__';

MySQL条件查询 _ JavaClub全栈架构师技术笔记

正则表达式

  • 用法

—— where 字段名 regexp '正则表达式'

—— 正则元字符 ^ $ . [] * |

  • 示例

    • 列出字段username的值“以a开头或以t开头”的记录

mysql> select username from db3.user where username regexp '^a|^t';

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username from db3.user where username regexp '^[at]';

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • 列出字段username的值“含有字符a或t”的记录

mysql> select username from db3.user where username regexp '[at]';

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • 列出字段username的值“含有数字”的记录

mysql> select username from db3.user where username regexp '[0-9]';     //字段username里面没有含数字的值

Empty set (0.00 sec)

mysql> insert into db3.user(username) values("yaya7"),("5yaya"),("ya8ya");      //向字段username插入含数字的值

mysql> select username from db3.user where username regexp '[0-9]';

MySQL条件查询 _ JavaClub全栈架构师技术笔记

四则运算

  • 运算操作

—— 字段必须是数值类型

符号

用途

例子

+

加法

UID + GID

-

减法

UID - GID

*

乘法

UID * GID

/

除法

UID / GID

%

取余数(求模)

UID % GID

()

提高优先级

(UID + GID) / 2

  • 示例

向 db3.user 中添加一个 age 字段,age字段类型为tinyint

mysql> alter table db3.user add age tinyint unsigned default 19 after username;

mysql> select username,age from db3.user;

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,2021 - age birth,age from db3.user where username="root";      //匹配到字段username的值为root的那一行,用2021减去那一行age字段的值,并给这个新值定义一个名称叫birth

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,2021-age birth,age from db3.user;

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,UID from db3.user where uid <= 5;       //匹配字段UID的值小于等于5的

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> update db3.user set UID=UID+1 where UID <= 5;       //字段UID的值小于等于5的值加1

mysql> select username,UID from db3.user where uid <= 6;        //匹配字段UID的值小于等于6的

MySQL条件查询 _ JavaClub全栈架构师技术笔记

匹配用户bin的UID+GID的平均值:

mysql> select username,UID,GID,(UID+GID)/2 pjz from db3.user where username="bin";

MySQL条件查询 _ JavaClub全栈架构师技术笔记

//默认保留四位小数

匹配字段UID的值为偶数的用户:

mysql> select username,UID from db3.user where UID % 2 = 0;

MySQL条件查询 _ JavaClub全栈架构师技术笔记

匹配字段UID的值为奇数的用户:

mysql> select username,UID from db3.user where UID % 2 != 0;

MySQL条件查询 _ JavaClub全栈架构师技术笔记

操作查询结果

  • 对查询后的数据做处理

聚集函数

  • MySQL服务内置的对数据做统计的命令

  • MySQL内置数据统计函数

—— avg(字段名)            //统计字段平均值

—— sum(字段名)           //统计字段之和

—— min(字段名)            //统计字段最小值

—— max(字段名)           //统计字段最大值

—— count(字段名)         //统计字段值个数

  • 示例

mysql> select avg(UID) from db3.user;       //统计字段UID的平均值

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select sum(UID) from db3.user;       //统计字段UID的值的和

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select min(UID) from db3.user;       //统计字段UID的最小值

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select max(UID) from db3.user;        //统计字段UID的最大值

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select count(*) from db3.user;        //统计所有行的个数

MySQL条件查询 _ JavaClub全栈架构师技术笔记

聚集函数结合条件判断:

mysql> select UID from db3.user where UID>=10 and UID<=20;

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select min(UID) from db3.user where UID>=10 and UID<=20;     //匹配字段UID的值大于等于10且小于等于20里面的最小值

MySQL条件查询 _ JavaClub全栈架构师技术笔记

匹配字段shell的值为/sbin/nologin的行的个数:

mysql> select count(username) from db3.user where shell="/sbin/nologin";

MySQL条件查询 _ JavaClub全栈架构师技术笔记

查询结果排序

  • 用法

—— SQL查询 order by 字段名 [ asc | desc ];   注:字段名 ——> 通常是数值类型字段

—— asc 升序排序

—— desc 降序排序

  • 示例

mysql> select username,UID from db3.user where UID <= 1000;

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • asc 升序排序

mysql> select username,UID from db3.user where UID <= 1000

    -> order by UID;       //字段UID的值小于等于1000的值进行升序排序,默认是升序排序

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • desc 降序排序

mysql> select username,UID from db3.user where UID <= 1000

-> order by UID desc; //字段UID的值小于等于1000的值进行降序排序

MySQL条件查询 _ JavaClub全栈架构师技术笔记

查询结果分组

  • 用法

—— SQL查询 group by 字段名; 注:字段名 ——> 通常是字符类型字段

  • 示例

mysql> select shell from db3.user group by shell;     //匹配所有所有用户的shell的分组,即所有用户的shell的种类

MySQL条件查询 _ JavaClub全栈架构师技术笔记

查询结果分组结合条件匹配:

mysql> select shell from db3.user where UID <= 100;     //查看字段UID的值小于等于100的用户的shell

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select shell from db3.user where UID <= 100

    -> group by shell;       //匹配字段UID的值小于等于100的用户的shell进行分组

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select distinct shell from db3.user where UID <= 100;

MySQL条件查询 _ JavaClub全栈架构师技术笔记

//注:查询结果分组和查询结果去重虽然执行结果一样,但是查询过程不一样。分组是对条件查询后的结果进行分组操作,而去重是对整张表的所有记录进行去重操作。所以分组的效率要比去重的效率高,资源占用率也比去重所占的低。

查询结果过滤

  • having用法

—— SQL查询 having 条件表达式;

  • 示例

mysql> select username,UID from db3.user where username is not null having UID=300;      //匹配字段username的值不为空的记录里过滤字段UID的值为300的记录,查询结果为空,即没有符合条件的记录。

Empty set (0.00 sec)

mysql> select username,UID from db3.user where username is not null having UID=3;       //匹配字段username的值不为空的记录里过滤字段UID的值为3的记录。

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,UID from db3.user where username is not null and UID=3;    //逻辑查询和结果过滤查询的输出结果一样

MySQL条件查询 _ JavaClub全栈架构师技术笔记

//注:逻辑查询和结果过滤查询的执行效果虽然一样,但是查询过程不一样,逻辑查询是整张表进行逐行查询,每次查询只能进行一个条件对比,即如果表内有100条数据,需先进行100次的判断是否为空,在判断100次UID是否等于3。而结果过滤查询则是先判断100条数据是否为空,加入有10条数据满足要第一个条件,那么第二次判断则在这10条数据中进行,相比于逻辑查询,结果过滤查询的次数会少很多。综上所属,结果过滤查询的速度要比逻辑查询快,消耗资源比逻辑查询少。

限制查询结果显示行数

  • 用法

—— SQL查询 limit 数字;      //显示查询结果前多少条记录

—— SQL查询 limit 数字1,数字2;      //显示指定范围内的查询记录

—— 数字1 起始行 (0表示第1行)

—— 数字2 总行数

  • 示例

    • 只显示查询结果的前几行

limit 1;  //意为显示查询结果的前1行     

limit 2;  //意为显示查询结果的前两行       

limit n;  //意为显示查询结果的前n行

mysql> select * from db3.user limit 2;    //显示user表的前两行

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,UID from db3.user where id <= 10;

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,UID from db3.user where id <= 10 limit 2;      //显示字段id的值小于等于10的前两行

MySQL条件查询 _ JavaClub全栈架构师技术笔记

    • 只显示查询结果指定范围之间的行

limit 数字1,数字2;      //数字1表示显示的起始行,数字2表示显示的总行数

limit 0,3;      //意为从查询结果的第1行开始显示,一共显示3行

limit 3,3;      //意为从查询结果的第4行开始显示,一共显示3行

mysql> select username,UID from db3.user where id <= 10 limit 2,4; //从第3行开始显示,一共显示4行

MySQL条件查询 _ JavaClub全栈架构师技术笔记

mysql> select username,UID from db3.user where id <= 10 limit 0,3; //从第1行开始显示,一共显示3行

MySQL条件查询 _ JavaClub全栈架构师技术笔记

作者:机佬在线搞机
来源链接:https://blog.csdn.net/N_jw107/article/details/122223070

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/18248.html

标签: MySQL
分享给朋友:

“MySQL条件查询” 的相关文章

MySQL触发器

MySQL触发器 触发器是一种特殊的存储过程,触发器和存储过程一样是一个能完成特定功能、存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用. 在MySQL中,只...

JDBC如何连接mysql数据库附详细步骤

JDBC如何连接mysql数据库附详细步骤

JDBC连接数据库在学习中是很重要的一个环节,今天给大家详细说明JDBC连接数据库需要的步骤 1.加载驱动 驱动包的下载地址 https://dev.mysql.com/downloads/connector/j/ 到时候要将这个加载到项目中然后输入...

性能优化|Mysql优化之Explain精讲

性能优化|Mysql优化之Explain精讲

Explain详解 本次测试使用的数据库版本为5.7 初始化sql语句: CREATE TABLE `film` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) D...

cloudera-scm-server启动出现Error creating bean with name 'entityManagerFactoryBean'与HHH010003: JDBC Driver class not found: com.mysql.jdbc.Driver错误解决办法(图文详解)

cloudera-scm-server启动出现Error creating bean with name 'entityManagerFactoryBean'与HHH010003: JDBC Driver class not found: com.mysql.jdbc.Driver错误解决办法(图文详解)

     不多说,直接上干货!       问题详情 2017-07-31 22:19:40,342 INFO main:com.cloudera.server.cmf.Main: Starting SCM Serv...

MySQL查询JSON类型字段中某个属性值

MySQL查询JSON类型字段中某个属性值

只支持MySQL5.7以上的版本 user表中有如下数据: id profile 1 {“age”: 20, “name”: “...

mysql递归查询

  在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。   在MySQL中如果...

MySQL学习(4)︱数据库的查询

MySQL学习(4)︱数据库的查询

在SQL中,使用select语句来查询数据。不同的关系数据库,select语法会有细微差别,在MySQL官网可以查询到支持的select语法。 SQL语法: SELECT column_name1, column_name2//...

mysql查询结果中文显示成了问号

character-set-server = utf8    collation-server = utf8_general_ci   然后 service  mysq...

会mysql不一定会sql

会mysql不一定会sql

1. 查询缓存 多数MySQL服务器都开启了查询缓存,相同的查询被执行多次,查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。 //查询缓存不开启 $r= mysql_query("SELECT username...

MySQL 查询结果中增加字段的方法

例如我查出来的结果: | 字段1 | 字段2 | | 值1 | 值2 | 我想要在结果集中增加一个字段,这个字段是表中没有的,值是固定的,例如: | 字段1 | 字段2 | 新增字段 | | 值1 | 值2 | 值固定 |...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。