mysql高级语句的查询语句

一、排序语法,关键字排序

升序和降序

默认的排序方式就是升序

升序:ASC

降序:DESC

配合语法:order by 语法

1、升序

select * from info order by name; 根据名字升序排序,不需要加ASC

 select * from info order by id;根据id升序排序

2、 降序(指定列)

select * from info order by name desc;根据名字降序

select * from info order by id desc;  根据id降序

3、多个列排序

 以多个列作为排序关键字,只有第一个参数有相同的值第二个字段才有意义。

select * from info order by hobbid desc,id;

重复值对应的第二个字段按照指定的排序进行排序

select * from info order by id desc,score;#根据id降序,成绩升序

二、区间判断

1、and 且

两个条件都要满足

select * from info where score > 70 and score <=90; 成绩大于70且小于90

 

2、or 且 

 两个条件只要满足一个即可

select * from info where score > 70 OR score <=90;成绩大于70或者成绩小于90

符合条件的都展示出来

3、嵌套多条件

select * from info where score > 70 or ( score > 0 and score < 20 );
查找成绩大于70 或者 成绩大于0且成绩小于20

 三、分组查询

对sql查询的结果进行分组,使用group by 语句来实现

group by 语句配合聚合函数一起使用。

聚合函数的类型:统计 count,求和 sum,求平均数 avg,最大值max,最小值 min。

select  (指定列)count(name),hobbid(进行分组) from info group by hobbi;

最少两个列,group by 不能跟聚合函数后面的列  

 

 在聚合函数分组语句中,所有的非聚合函数列,都要在group by语句当中。

select count(name),hobbid,name from info group by hobbid,name;

select count(name),hobbid,name from info where score >=80 GROUP BY hobbid,name;
以爱好为分组,统计成绩大于80的名字

 

GROUP BY为一个整体,在其前面可以使用where,在其后面要使用having

select count(name),hobbid,score from info GROUP BY hobbid,score having score >=80;

select avg(score),hobbid from info group by hobbid having avg(score) >= 60;  

 

 统计姓名,以兴趣和分数作为分组,统计出成绩大于80的,然后按照降序对姓名的列进行排序

select count(name),hobbid,score from info group by hobbid,score having score > 80 order by count(name) desc;

四、偏移量 

limit 1,3 1是位置偏移量(可选参数)

如果不设定位置偏移量,默认就是从第一行开始(0+1),默认值是0

select * from info limit 3; 显示前三行

 

select * from info limit 1,3; 显示2-4行

 

使用limit 和降序,只显示最后最后三行

select * from info order by id desc limit 3;

五、别名as

 表和列的别名:因为在实际工作中,表的名字和列的名字可能会很长,书写起来不太方便,多次声明表和列时,完整的展示太复杂了,设置别名可以使书写简化了可读性增加了,简洁明了。

格式一:

select name as 姓名,score as 成绩 from info;

 格式二:

select name 姓名,score 成绩 from info;

 

格式三:

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

格式四:

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

六、 对表进行复制

create table test as select * from info;

只能复制表的数据,不能复制表的结构,主键的约束复制不了

desc info;查看区别

 desc test;查看复制的表

 用条件方式复制表

create table test1 as select * from info where score >=60;

 test表

七、通配符

 like :模糊查询

% :表示0个,1个 或者多个字符类似于*

_:表示单个字符。

select * from info where address like 's%';

八、子查询

子查询: 内查询,嵌套查询,select语句当中又嵌套了一个select。

嵌套的select才是子查询,先执行子查询的语句,外部的select在根据子条件的结果进行过滤查找。

子查询可以是多个表,也可以是同一张表

关联语句 in not in

select(select)

select id,name,score from info where id in(select id from info where score>=80);
先将子查询的表的内容查询出来

 

多张表查询

select id,name,score from info where id  in (select id from test where score>=80);

 

select id,name,score from info where id  not in (select id from test where score>=80);

 

update info set score=80 where id in (select id from test where id =2);
根据test表中的id=2,然后更新info表中id=2的分数

 info表修改前

 

info表修改后

在子查询当中多表查询(不要超过三张)和别名:

info表

test表

 

info表和test表,这两张表id部分相同,然后根据id相同的部分来查询info表的id的值

 

select a.id from info a where id in (select b.id from test b where a.id = b.id );

查询出info表成绩大于80的数据

select a.name from info a where a.score>80 and  a.id in (select b.id from test b where a.id = b.id );

求出平均数

select avg(a.score) from info a where   a.id in (select b.id from test b where a.id = b.id );

 九、exists

exists 判断子查询的结果是否为空,不为空返回true,空返回false

select count(*)from info where exists (select id from test where score>80);

这里不是in和not in会传给主表。

这里只是判断条件,存在才执行,不存在,结果为空则不执行。

这里的值不是计数的作用

 查询分数,如果分数小于50的则统计info的字段数

select count(*) from info where exists (select id from info where score<50);

select id from info where score<50查询这个条件存不存在,仅仅是一个判断的条件,并不是将结果传到下一个命令中,结果存在执行此条命令select count(*) from info,若不存在则不执行。

十、视图

视图是一个虚拟表,表的数据是基于查询的结果生成的,视图可以简化复杂的查询,隐藏复杂的细节,访问数据更安全。

视图是多表数据的集合体。

1、视图和表之间的区别

  • 存储方式,表是实际的数据行,视图不存储数据,仅仅是查询结果的虚拟表
  • 数据更新,更新表可以直接更新视图表的数据
  • 占用空间,表实际占用空间,视图表不占用空间,只是一个动态结果的展示。

视图表的数据可能是一张表的部分查询数据,也可能是多个表的一部分查询数据。

2、查看当前数据库中的视图表

show full tables in xy102 where table_type like 'VIEW';

 

create view test2 as select * from info where score >=80;

 

查询select * from test2;实际上等于执行select * from info where score >=80

 

 当修改表中id=1的分数修改为79,视图表执行执行select * from test2;

结果 

 

当修改视图id=2的分数修改为90时,查看原表也被修改

5.5之前视图只读,5.5之后双向的,修改视图表的信息,原表是数据也会发生更改

视图表:  

原表:

 

 创建一张视图表,视图表包含id name address,从info和test当中的name值相同的部分创建

create view test4 as select a.id,a.name,a.address from info a where a.name in 
(select b.name from test b where a.name = b.name );

 

1、视图就是查询语句的别名,有了视图表可以简化查询的语句

2、表的权限不一样,库的权限是有控制的,所以查询视图表的权限相对低

3、既可以保证原表的数据安全,也简化了查询的过程

删除视图表

drop view test4;

十一、 连接查询

把两张表或者多个表的记录结合起来,基于这些表,共同的字段,进行数据的拼接。

前提:要确定一个主表作为结果集,然后把其他表的行,有选择性的选定到结果上。

test1表

 

test2表

 

连接的类型:

1、内连接inner join

取两张表或者多张表之间符合条件的数据记录的集合。

取两个表或者多个表之间的交集

select a.a_id,a.a_name from test1 a INNER JOIN test2  b on a.a_name=b.b_name;

select * from test1 a INNER JOIN test2  b on a.a_name=b.b_name;

 

2、左连接

左外连接,left jion .......on 或者left outer join

以左边的表为基础,接收左表的所有行,以左表的记录和右表的记录进行匹配

匹配左表的所有,以及右表中符合条件的行,不符合显示null,不展示。

select * from test1 a left join test2 b on a.a_name=b.b_name;

写在left左边的为左表,在左边中选择name作为一个筛选的条件,只有结果相同的其显示的都能显示出来,否则是null。

以比较条件为标准,两个表相同的展示出来,并作拼接,不同的结果显示null

 3、右连接

右外连接,right jion .......on 或者right outer join

以右边的表为基础,接收右表的所有行,以右表的记录和左表的记录进行匹配

匹配右表的所有,以及左表中符合条件的行,不符合显示null,不展示。

select * from test1 a right join test2 b on a.a_name=b.b_name;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/389485.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChinaJoy 2024,VERYCLOUD睿鸿股份与你相聚

&#x1f3ae;2024 ChinaJoy于26日正式开幕 &#x1f557;7月26-28日 &#x1f310;VERYCLOUD睿鸿股份在BTOB商务洽谈馆 &#x1f31f;W4-B785展位 &#x1f387;展台交流好礼相送 与多行业好友现场相聚、畅谈&#x1f9d0; 现场游戏企业云集 专业观众、玩家纷至沓来 与游戏/短…

配置frp实现内网穿透(.toml配置文件)

简介 frp 是一款高性能的反向代理应用&#xff0c;专注于内网穿透。它支持多种协议&#xff0c;包括 TCP、UDP、HTTP、HTTPS 等&#xff0c;并且具备 P2P 通信功能。使用 frp&#xff0c;您可以安全、便捷地将内网服务暴露到公网&#xff0c;通过拥有公网 IP 的节点进行中转。…

APACHE安装与应用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

乱弹篇(40)人类追求长寿

不要认为只有中国的老龄化才严重&#xff0c;实际上全球都面临老龄化&#xff0c;其中日本最为严重。 这是随着人类生活和医学水平的不断提高&#xff0c;寿命才会比过去数十年有了大幅度的提升。据资料显示&#xff0c;目前全球平均预期寿命估计为73岁。与百年之前相比&#…

上半年手游出海吸金超624亿,混合变现帮助游戏提升收益

2024年上半年&#xff0c;海外游戏市场总收入达到惊人的325亿美元&#xff0c;App Store平台收入同比增长11%。这一数据反映了手游市场的巨大潜力和活力&#xff0c;不论是在App Store还是Google Play&#xff0c;玩家们对手游的热情有增无减&#xff0c;支撑了开发者们收益的不…

5行代码快速Git配置ssh

0 流程步骤 检查本地主机是否已经存在ssh key生成ssh key获取ssh key公钥内容&#xff08;id_rsa.pub&#xff09;复制该内容&#xff0c;到Github账号上添加公钥&#xff0c;进入Settings设置验证是否设置成功 1 代码 # 1.检查本地主机是否已经存在ssh key cd ~/.ssh ls # …

WEB前端15-Router路由

Vue2-router路由 在使用Vue.js构建现代单页面应用程序&#xff08;SPA&#xff09;时&#xff0c;路由管理是至关重要的一部分。Vue Router 是 Vue.js 官方的路由管理器&#xff0c;它允许你在应用程序中实现基于组件的页面导航。本文将介绍Vue Router的基本概念和用法&#x…

LSTM与GNN强强结合!全新架构带来10倍推理速度提升

今天来推荐一个深度学习领域很有创新性的研究方向&#xff1a;LSTM结合GNN。 GNN擅长处理图数据关系和特征&#xff0c;而LSTM擅长处理时间序列数据及长期依赖关系。通过将两者结合&#xff0c;我们可以有效提升时间序列预测的准确性和效率&#xff0c;尤其是在处理空间和时间…

vue配置多个环境变量ENV【收藏版】

vue配置多个环境变量 1. 创建环境变量文件 在你的Vue项目根目录下&#xff0c;你可以创建以下环境变量文件&#xff1a; .env&#xff1a;所有环境都会加载的通用变量。 .env.local&#xff1a;本地覆盖&#xff0c;不会被git跟踪。 .env.[mode]&#xff1a;只有指定模式才会…

光伏气象仿真系统有什么优势?

光伏气象仿真系统作为这一领域的核心工具&#xff0c;凭借其独特的优势&#xff0c;正逐步成为行业标配。本文将围绕数据可靠性、功能齐全性、海外布局支持、系统开放性以及合作方式灵活性五个方面&#xff0c;深入探讨光伏气象仿真系统的显著优势。 1.数据可靠&#xff1a;权威…

Java中的Heap(堆)(如果想知道Java中有关堆的知识点,那么只看这一篇就足够了!)

前言&#xff1a;&#xff08;Heap&#xff09;是一种特殊的完全二叉树&#xff0c;它在诸多算法中有着广泛的应用&#xff0c;本文将详细介绍Java中的堆。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下本文大…

微信小程序-获取手机号:HttpClientErrorException: 412 Precondition Failed: [no body]

问题&#xff1a; 412 异常就是你的请求参数获取请求头与服务器的不符&#xff0c;缺少请求体&#xff01; 我的问题&#xff1a; 我这里获取微信手机号的时候突然给我报错142&#xff0c;但是代码用的是原来的代码&#xff0c;换了一个框架就噶了&#xff01; 排查问题&am…

Springboot手工艺品交易平台—计算机毕业设计源码11541

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对手工艺品交易平台等问题&#xff0c;对手工…

【MySQL进阶】事务隔离级别 MVCC

目录 MySQL事务隔离级别 1. 读未提交&#xff08;Read Uncommitted&#xff09; 2. 读已提交&#xff08;Read Committed&#xff09; 3. 可重复读&#xff08;Repeatable Read&#xff09;(默认隔离级别) 4. 串行化&#xff08;Serializable&#xff09; 表格总结 MVCC …

抖音爬虫-批量下载主页作品

使用说明 config.ini是配置文件&#xff0c;可配置文件名规则、下载视频图文音乐等。 DownloadList.txt是批量下载清单&#xff0c;可配置批量下载类型和地址。 打开软件&#xff0c;选择对应的功能&#xff0c;第一次扫码登录&#xff08;后续可自动加载cookie登录&#xff…

揭秘循环购模式:消费即收益

大家好&#xff0c;我是你们的电商策略顾问吴军。今天&#xff0c;我将带大家深入探索一种别开生面的商业模式——循环购模式。这种模式究竟有何魅力&#xff0c;能让消费者在享受购物乐趣的同时&#xff0c;还能获得额外的收益&#xff1f;更有趣的是&#xff0c;一些商家通过…

区块链软硬件协同,做产业数字化转型的“安全官” |《超话区块链》直播预告

今年的两会政府工作报告提出&#xff1a;“产业的数字化&#xff08;行业数字化转型&#xff09;是发展新质生产力的核心&#xff0c;是推动产业升级实现高质量发展的关键。”全面推进产业数字化&#xff0c;需要技术创新与产业应用深入协同&#xff1b;立足可持续发展的长远目…

Java面试八股之简述spring boot的目录结构

简述spring boot的目录结构 Spring Boot 项目遵循标准的 Maven 或 Gradle 项目布局&#xff0c;并且有一些约定的目录用于组织不同的项目组件。下面是一个典型的 Spring Boot 项目目录结构&#xff1a; src/main/java&#xff1a;包含所有的 Java 源代码&#xff0c;通常按包组…

OpenCV仿射变换实现图像扭曲与旋转

目录 1. 仿射变换 2. 仿射变换的求解 3. 代码实现 3.1 图像扭曲 3.2 图像旋转 参考内容 1. 仿射变换 仿射变换是一种可以表达为乘以一个矩阵&#xff08;线性变换&#xff09;再加上一个向量&#xff08;平移&#xff09;的变换。在几何中&#xff0c;就是将一个向量空间…

Hive环境搭建(Mysql数据库)

【实验目的】 1) 了解hive的作用 2) 熟练hive的配置过程&#xff08;Mysql数据库&#xff09; 【实验原理】 Hive工具中默认使用的是derby数据库&#xff0c;该数据库使用简单&#xff0c;操作灵活&#xff0c;但是存在一定的局限性&#xff0c;hive支持使用第三方数据库&…