当前位置: 首页 > news >正文

mysql高阶语句

目录

前言

一、高级sql语句

1、按关键字排序

二、区间判断 ——且/或

三、 distinct 查询不重复记录

四、对结果进行分组

五、限制结果条目——limit

六、设置别名(alias ——>as)

七、通配符

八、子查询


前言

当我们对mysql数据库进行了查询后,除了基本查询,有时候更需要对查询的结果集进行再次处理。比如统计个数,对结果进行排序,只查看部分数据等等。

一、高级sql语句

1、按关键字排序

命令格式:SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... 

排序效果
desc按降序方式进 行排列,ORDER BY 前面也可以使用 WHERE 子句对查询结果进一步过滤。
asc按照升序进行排序,是默认的排序方式,可以省略,未指定则以asc方式排序
结合where进行具体属性排列
按学生的住址进行分数的降序排列

首先按学生的兴趣进行降序排列,其次id也进行降序排列 

首先按学生的兴趣进行降序排列,其次id也进行升序排列 

注意:ORDER BY 语句也可以使用多个字段来进行排序,当排序的第一个字段相同的记录有多条的情况下,这些多条的记录再按照第二个字段进行排序,ORDER BY 后面跟多个字段时,字段之间使用英文逗号隔开,优先级是按先后顺序而定,但order by 之后的第一个参数只有在出现相同值时,第二个字段才有意义

二、区间判断 ——且/或

 命令格式:SELECT "字段" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"}+ ;

选项效果
and查询分数在70到90区间
or查询分数在70分以下或大于等于90的
and /or嵌套查询分数在70分和90之间的或者小于60的

三、 distinct 查询不重复记录

命令格式:SELECT DISTINCT "字段" FROM "表名"; 

 

四、对结果进行分组

通过 SQL 查询出来的结果,还可以对其进行分组,使用 GROUP BY 语句来实现 ,GROUP BY 通常都是结合聚合函数一起使用的,常用的聚合函数包括:计数(COUNT)、 求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN),GROUP BY 分组的时候可以按一个或多个字段对结果进行分组处理。

命令格式:SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator value GROUP BY column_name;

举例

按hobbid相同的分组,计算相同分数的学生个数(基于name个数进行计数)

按hobbid相同的分组(基于name个数进行计数)结合where语句,筛选分数大于等于80的分组,计算学生个数

按hobbid相同的分组(基于name个数进行计数)结合where语句,筛选分数大于等于80的分组,结合order by把计算出的学生个数按升序排列

 

五、限制结果条目——limit

在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录(行)。有时候仅需要返回第一行或者前几行,这时候就需要用到 LIMIT

命令格式:select 字段 from 表名 limit [offset,] number

如果不设定第一个参数,将会从表中的第一条记录开始显示。

第一条偏移量是0,第二条为1

offset 为索引下标

number 为索引下标后的几位

limit 的第一个参数是位置偏移量(可选参数),是设置 mysql 从哪一行开始

命令效果

查询所有信息显示前4行

从第四行开始,往后显示3行

结合order by语句,按id的大小升序排列显示前三行

输出前三行

结合order by语句,按id的大小升序排列输出最后三行

六、设置别名(alias ——>as)

使用场景:
1、对复杂的表进行查询的时候,别名可以缩短查询语句的长度

2、多表相连查询的时候(通俗易懂、减短sql语句)

命令格式:对于列的别名:SELECT column_name AS alias_name FROM table_name;

                  对于表的别名:SELECT column_name(s) FROM table_name AS alias_name;

在使用 AS 后,可以用 alias_name 代替 table_name,其中 AS 语句是可选的。AS 之后的别名,主要是为表内的列或者表提供临时的名称,在查询过程中使用,库内实际的表名 或字段名是不会被改变的

举例 
select name as 姓名,score as 成绩 from info;   
select i.name as 姓名,i.score as 成绩 from info as i;

查询info表的字段数量,以number显示

AS 还可以作为连接语句的操作符,创建t1表,将info表的查询记录全部插入t1表

 

注意:

此处AS起到的作用:

1、创建了一个新表t1 并定义表结构,插入表数据(与info表相同)

2、但是”约束“没有被完全”复制“过来 #但是如果原表设置了主键,那么附表的:default字段会默认设置一个0

3、与克隆、复制表结构相似——create table t1 (select * from info);也可以加入where 语句判断——create table test1 as select * from info where score >=60;

 4、在为表设置别名时,要保证别名不能与数据库中的其他表的名称冲突。
列的别名是在结果中有显示的,而表的别名在结果中没有显示,只在执行查询时使用。

七、通配符

通配符主要用于替换字符串中的部分字符,通过部分字符的匹配将相关结果查询出来。

通常通配符都是跟like一起使用,并协同where子句共同来完成查询任务。

%:百分号表示零个、一个或多个字符

_:下划线表示单个字符

查询以什么开头的记录

查询名字里是h和i中间有一个字符的记录

查询名字中间有g的记录

查询li后面的三个字段

查询名字以h开头的记录

八、子查询

子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一 步的查询过滤。

多表查询,查询info表中的id,name,score ,其中的id来源于na表

IN 用来判断某个值是否在给定的结果集中,通常结合子查询来使用

<表达式> [NOT] IN <子查询>

同表查询info表中name,score,id,其中分数大于80的记录

在t1里的记录里插入info表的记录

UPDATE 语句也可以使用子查询。UPDATE 内的子查询,在 set 更新内容时,可以是单独的一列,也可以是多列

将wangwu的分数改为50

 

 

除去na表中所有的id且大于1的其余id分数修改为100

删除分数大于80的记录——delete

删除分数不是大于等于80的记录

在 IN 前面还可以添加 NOT,其作用与IN相反,表示否定(即不在子查询的结果集里面)

EXISTS 这个关键字在子查询时,主要用于判断子查询的结果集是否为空。如果不为空, 则返回 TRUE;反之,则返回 FALSE

查询如果存在分数等于80的记录则计算info的字段数

查询如果存在分数小于50的记录则计算info的字段数,info表没有小于50的,所以返回0

 注意:子语句可以与主语句所查询的表相同,也可以是不同表

子查询不仅可以在 SELECT 语句中使用,在 INERT、UPDATE、DELETE 中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套。

当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE。 若启用了 NOT 关键字,则返回值相反。需要注意的是,子查询只能返回一列数据,如果需 求比较复杂,一列解决不了问题,可以使用多层嵌套的方式来应对。 多数情况下,子查询都是与 SELECT 语句一起使用的

子查询还可以用在 INSERT 语句中。子查询的结果集可以通过 INSERT 语句插入到其 他的表中 

 

相关文章:

  • 基于Transformer的医学图像分类研究
  • Dubbo启动流程
  • centos7 安装后不能联网怎么解决
  • 星光/宝骏/缤果/长安 车机CarPlay盒子权限破解原理普及----码农版本
  • PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十六)
  • 函数模板详解
  • 如何一步一步地优化LVGL的丝滑度
  • LiveGBS流媒体平台GB/T28181功能-查看国标设备下通道会话列表直播|回放|对讲|播放|录像|级联UDP|TCP|H264|H265会话
  • GO学习记录
  • 数据结构(算法竞赛、蓝桥杯)--线段树+懒标记
  • ChatGPT 国内快速上手指南
  • textbox跨线程写入
  • [附源码]Python计算机毕业设计Django勤工俭学管理小程序
  • 0115 查找算法Day4
  • HTML5期末大作业:基于HTML+CSS+JavaScript实现中国风文化传媒企业官网源码
  • 计算机导论第十一周课后作业
  • [附源码]计算机毕业设计线上社区管理系统Springboot程序
  • GIT分布式版本控制系统 | 命令讲解入门
  • CentOS下将 /home 目录合并到 / 目录
  • 「Redis数据结构」RedisObject
  • 微服务框架 SpringCloud微服务架构 10 使用Docker 10.7 数据卷命令
  • Web中的Bias(更新中)
  • 计算机毕业设计Java的自助旅游导航系统(源码+系统+mysql数据库+lw文档)
  • 【LIN总线测试】——LIN主节点物理层测试
  • 安卓属性动画
  • JS 的 apply 方法
  • 【前沿技术RPA】 一文了解UiPath Orchestrator的触发器和监听器
  • Java基于springboot+vue的游戏物品销售购物商城系统 前后端分离
  • HTML5期末大作业:美妆网页主题网站设计——清新的手工肥皂网站展示(4页)HTML+CSS+JavaScript
  • [附源码]Python计算机毕业设计Django三星小区车辆登记系统
  • 《MySQL实战45讲》学习笔记
  • 【网关路由测试】——网关状态转换测试