首页 > 数据库 >Mysql查询语句进阶知识集锦

Mysql查询语句进阶知识集锦

时间:2023-04-23 15:33:48浏览次数:53  
标签:进阶 -- 集锦 age 查询 student Mysql WHERE SELECT


前言

上次咱们简单的学习了一下select的用法,一篇文章教会你进行Mysql数据库和数据表的基本操作,对数据库大概有了一些基本的了解。

咱们接着上次继续来看叭!

查询

数据如下

Mysql查询语句进阶知识集锦_表名

or查询

我们在上学时,会听到这样的话,某某某,你把谁谁谁或者谁谁谁叫过来。

这样子的话,我们我们要查询的,就是一个或(or)的关系了。

or查询只有满足一个条件即可

sql

-- 语法
SELECT * from student WHERE <条件> or <条件> ...;
-- 例如,查询姓名为张三的或者姓名为小刘的数据
SELECT * from student WHERE name="张三" or name="小刘";

执行结果

Mysql查询语句进阶知识集锦_表名_02

不等于(!=)查询

上述我们查询的,都是等于(=)操作,但是我们在上学时,还会有这种情况。

某个学生学习可好,背东西背的可快,放学的时候可能就人家一个人过了,这时候老师可能就说

除了某某某,其他学生本篇文章全部抄3遍,淦。。。

所以这时候就是反过来的查询的,只需要排除某个人即可!

sql

-- 语法
SELECT * from student WHERE <条件>;
-- 例如,查询姓名不是张三的其他人,排除张三
SELECT * from student WHERE name!="张三";

执行结果

Mysql查询语句进阶知识集锦_sql_03

in/not in查询

学生们还都是年轻人,年龄大概都在20来岁,这时候老师说,班长,把年龄在19,20,21的人统计一下!

根据上述我们学过的知识,可能你是这样婶的。

SELECT * from student WHERE age=19 or age=20 or age=21;

执行结果

Mysql查询语句进阶知识集锦_数据_04

通过三个or找到,其实这样也没错,但是还有一种更简单的。

sql

-- 语法
SELECT * from student WHERE <列名> in (值1,值2,...) ...;
-- 例如,需求同上
SELECT * from student WHERE age in (19,20,21);

执行结果

Mysql查询语句进阶知识集锦_表名_05

not in 就是不在这个范围的数据啦!

sql

-- 查询年龄不在19,20,21范围的数据
SELECT * from student WHERE age not in (19,20,21);

执行结果

Mysql查询语句进阶知识集锦_表名_06

between查询

between适合进行范围查询!

sql

-- 语法
select * from 表 where <列> between <开始范围> and <结束范围>;
-- 例如,查询年龄时20-22岁的学生
SELECT * from student WHERE age BETWEEN 20 and 22;

执行结果

Mysql查询语句进阶知识集锦_sql_07

同理,between还能用在时间上。

select * from <表名> where <时间列> between <开始时间> and <结束时间>

模糊查询(like)

假设现在数据如下,有三个姓张的。

Mysql查询语句进阶知识集锦_数据_08

老师可能突然有一天对你说,班长,把咱们姓张的列出来,我找他们谈点事,咋办???

我们只需要找,是以张开头的,后面是啥无所谓。

所以就要用到like模糊查询。

sql

-- 语法 %表示匹配一个或多个字符
select * from 表 where <列> like '[%]<字符串>[%]'
-- 例如,查询,以张开头的
SELECT * from student WHERE name like "张%";

执行结果

Mysql查询语句进阶知识集锦_数据_09

同理,这个%可以放在任意位置,他就是充当不确定的字符使用的,能够自动匹配一个或多个

例如

... WHERE name like "张%丰";
匹配:张三丰
WHERE name like "%鱼";
匹配:张甲鱼
WHERE name like "李%";
匹配:李四
...

限制(limit)

限制这个有点怪异,还是图片举例比较好。

数据如下

Mysql查询语句进阶知识集锦_表名_10

sql

-- 前两行
SELECT * from student LIMIT 2;

Mysql查询语句进阶知识集锦_数据_11

-- 从第2行开始后,再取4行
SELECT * from student LIMIT 2,4;
-- 同上,写法不同
SELECT * from student LIMIT 4 OFFSET 2

Mysql查询语句进阶知识集锦_sql_12

排序(order by)

不知道你有没有发现,我们之前查找的顺序都是正向的。

Mysql查询语句进阶知识集锦_sql_13

但是会有个问题,我们新增的数据,其实id是最大的,理论来说,应该要排在最前面。

所以,应该是倒序的是最好的。

sql

-- 语法
select * from <表名> order by <列> asc -- 从小到大排序
select * from <表名> order by <列> desc -- 从大到小排序
select * from <表名> order by <列1> desc,<列2> asc -- 先根据 列1 排序,如果数据相同,按照 列2 排序

例如

根据id正向排序

SELECT * from student ORDER BY id ASC;

执行结果

根据id反向排序

SELECT * from student ORDER BY id desc;

执行结果

Mysql查询语句进阶知识集锦_表名_14

hhh,这样我们就把数据反过来了!!!

分组(groupby)

分组,这个可能是难为了一批人,其实分组的核心,在于理解这个压缩这个概念。

假设数据如下

Mysql查询语句进阶知识集锦_数据_15

性别有男有女,如果我想知道,男的有多少个,女的有多少个怎么办???我总不能数吧。。。

所以这时候,如果能吧,男的都拿出来,女的都拿出来,就像这样!

Mysql查询语句进阶知识集锦_sql_16

然后我对拿出来进行压缩成一条。

Mysql查询语句进阶知识集锦_数据_17

如果这个你懂了,那分组就懂了。

语法

SELECT <列>,COUNT(<列>) from student GROUP BY <列>;
-- 因为分组了某个列,所以就不能再展示其他列的信息了,因为压在一块了,显示不了
-- 但是可以通过count,sum等函数计算压缩的个数,或者总值

例如

统计男女各多少人

SELECT gender,COUNT(gender) from student GROUP BY gender;

执行结果

统计同一年龄多少人

SELECT age,COUNT(age) as "数量" from student GROUP BY age;

执行结果

Mysql查询语句进阶知识集锦_表名_18

注意:group by必须在where之后,order by之前。

总结

本篇主要讲述的是Mysql查询语法,再单表查询中,基本上就上述这么些的内容,但是从理论到事件,是需要时间的。

一定要勤加练习,什么是or查询,like查询注意事项,尤其是group by分组查询,一定要多多思考和联系。

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

不要轻易改变自己,因为你可能就是世界上那颗未加工的最亮的钻石。

我是码农星期八,如果觉得还不错,记得动手点赞一下哈。

感谢你的观看。

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。



标签:进阶,--,集锦,age,查询,student,Mysql,WHERE,SELECT
From: https://blog.51cto.com/u_13389043/6217761

相关文章

  • mysql主从-day1——mysql主从搭建、django中使用多数据库做读写分离
    目录一、mysql主从5django使用多数据库做读写分离一、mysql主从#之前做过redis的主从,很简单#mysql稍微复杂一些,搭建mysql主从的目的是? -读写分离-单个实例并发量低,提高并发量-只在主库写,读数据都去从库#mysql主从原理步骤一:主库db的更新事件......
  • Django配置mysql数据库
    今天跟大家分享Django配置python的mysql数据库链接工具pymysql。系统环境:windows11x64,pycharm专业2022.3版本,python11,Django4.0。第一步:pip安装pymysql库,在当前django的python环境中用pip install pymysql进行安装。如下图: 我已经安装好,所以不用重新安装,这里需要注意的是有......
  • ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run
      今天执行mysql操作的时候出现了错误:ERROR2002(HY000):Can'tconnecttolocalMySQLserverthroughsocket'/var/run/mysqld/mysqld.sock'问题1:首先检查是否安装了mysql-server了 sudoapt-getinstallmysql-servertoinstallmysqlonubuntu  sudoapt-getin......
  • mysql数据库表的自增id被删后的乱序重排问题
    在对数据库进行操作的时候遇到了这样一个问题,数据库的表里的id是自增的,当数据被删除或者添加时,ID便会一直增上去,id就会变得很乱,不会按照顺序,今天查找了各个网站,终于找到了解决办法altertabletablenamedropcolumnid;altertabletablenameaddidmediumint(8)notnullprim......
  • mysql+proxysql+replication-manager的主从半同步复制+高可用+读写分离
    环境:AlmaLinuxrelease9.1MySQLCommunityServerVer8.0.33ReplicationManagerv2.2.40forMariaDB10.xandMySQL5.7SeriesProxySQLversion2.5.1-90-gbedaa6c主机分配情况:采用hyper-v创建虚拟机的方式进行的,创建1台模板之后另外3台导入虚拟机复制。1、安装mysq......
  • mysql 基于idb文件恢复数据
    目录mysql基于idb文件恢复数据创建shcema将新建表关联复制idb文件import表mysql基于idb文件恢复数据适用于mysql8.0+,mysql5版本没测试过数据库因为磁盘损坏起不来了,好在data目录下的idb文件还在,可以基于idb文件恢复数据步骤:创建schem和表将新建表关联复制idb文件import......
  • Django全栈进阶之路1 Django4下载与安装
    python下载安装:下载网址:https://www.python.org/downloads/ 安装方法:https://www.cnblogs.com/beichengshiqiao/p/16153586.html新版的python一般无需配置环境,在安装的时候勾选带有AddPython3.10toPATH的选项即可,如果需要手动配置的,参考:https://www.cnblogs.com/beicheng......
  • SpringBoot 集成 Quartz + MySQL
    Quartz简单使用JavaSpringBoot中,动态执行bean对象中的方法源代码地址=>https://gitee.com/VipSoft/VipBoot/tree/develop/vipsoft-quartz工作原理解读只要配置好DataSourceQuartz会自动进行表的数据操作,添加QuartzJob任务保存QRTZ_JOB_DETAILS、QRTZ_TRIGGERS=>QR......
  • MySQL安装
    MySQLjavaEE:企业级java开发Web前端后台数据库安装Mysqlmysql5.7.33安装网站:https://dev.mysql.com/downloads/mysql/解压放到环境目录下添加环境变量path--->添加mysql下的bin目录新建mysql配置文件my.ini[mysqld]#目录换成自己的basedir=D:\Environmen......
  • Openharmony应用NAPI详解--进阶篇1
    NAPI面向C++的异步接口3.C++实现NAPI异步接口需要做到三步同步返回结果给js/ets调用者另起线程完成异步操作通过回调(callback)或Promise将异步操作结果返回4.异步接口//foundation/filemanagement/dfs_service/frameworks/js/napi/src/sendfile_napi.cpp...DECLARE......