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

Mysql高阶语句

1.使用select语句,用order by来进行排序

asc:升序排列 默认就是升序,可以不加

desc:降序排列,需要添加

select id,name from info order by id; #升序

select id,name from info order by id desc; #降序

1.1 order by 结合where条件进行过滤

select name,score from info where address='南京西路' order by score desc;

查id 姓名 成绩 根据性别=v 按照id进行降序排序

select id,name,score from info where sex='女' order by id desc;

select id,name,score from info where sex='女' order by score desc,id desc;

只有第一个参数出现相同值时,第二个参数才会按照要求排序

2. 区间判断查询和去重查询

and /or

且 或

select * from info;

select * from info where score > 70 and score <=90;

SELECT * from info where score > 80 or score < 90;

2.1 嵌套条件

select * from info where score > 70 and ( score > 75 and score < 90 );

嵌套条件,满足性别是男,然后进行筛选成绩 70 -90

select * from info where sex='男' and (score > 70 and score < 90);

2.2 去重查询

select distinct address from info;

根据address去重,然后过滤出成绩=90且性别是男

select distinct address,name,score,sex from info where score=90 and sex='男';

3.分组查询 group by 语句

一般是结合聚合函数一块使用。

count() 统计有多少行

sum()列的值相加,求和

avg()列的值求平均值

max()过滤出列的最大值

min()过滤出列的最大值

分组的时候可以按照一个字段,也可以按照多个字段对结果进行分组处理

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

根据where条件筛选,score>=80

select count(name),sex,score from info where score >=80 GROUP BY sex;

根据地址来分组,来求和

SELECT sum(score),address from info GROUP BY address;

算出男生女生的平均成绩

select avg(score),sex from info GROUP BY sex;

3.1 group by 实现条件过滤 having

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

根据按照地址分组,求成绩的平均值,然后>50 按照id的降序排列。

select avg(score),address,id from info group by address having avg(score) >50 order by id desc;

统计name的行数,计算出学生的个数,把成绩也查出来,然后安装统计出来的学生个数,升序排序,按照地址分组,

学生的成绩>=70

select count(name),address,score from info group by address having score >=70 ORDER BY count(name);

按照性别分组,求出男生和女生的最大成绩,最大成绩是否超过75分,

select max(score),sex from info GROUP BY sex having max(score) > 75;

使用聚合函数必须要加group by 分组的条件,要选用有多个重复值的列,过滤条件要用having

4. limit 限制输出的结果记录,查看表中的指定行

elect * from info limit 3; 只看前三行

select * from info limit 1,4; 2-5行

select * from info limit 5,3; 6-8行

select * from info order by id desc limit 3; 快速的查看后几行

5.通配符

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

通配符和like一起使用,使用where语句一起来完成查询

%:表示0个,1个,或者多个

_:表示单个字符

select * from info where address like '山%' 已山为开头

select * from info where address like '%路' 已路为结尾

select * from info where address like '%西%' 包含西

以山开头,匹配后面两个字符

select * from info where address like '山%__';

6.别名

查询时,表的名字或者字段名太长,可以使用别名来进行替代,方便书写,增加可读性

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

SELECT name 姓名,score 成绩 from info;

create table test as select * from info; 使用as复制表,约束不会被复制过来

select * from test;

可以给表起别名,但是要注意别名不能和数据库中其他的表明冲突。

列的别名在结果中可以显示,但是表的别名在结果中没有显示,只能用于查询。

7.子查询:内查询,嵌套查询

括号里面的查询语句会于主查询语句执行。然后再把子查询的结果作为条件返回给主查询条件进行过滤

子查询返回的结果只能是1列

where 条件 in 什么 子查询的列就是什么

SELECT id,name,score from info where id in (SELECT id from ky32);

SELECT id,name,score from info where name in (SELECT name from ky32);

多表联查,不要超过三张表

子查询语句还可以用在insert update delete

insert into test SELECT * from info where id in (select id from info where sex='女');

插入数据,要求按地址,包含南京插入到test;

insert into test select * from info where address in (select address from info where address like '%南京%')

update info set score=50 where id in (select id from ky32 where id =2);

修改info表score =100 根据子查询语句 not in 子查询的语句 id>1

update info set score =100 where id not in (select id from ky32 where id > 1 )

delete from info where id in (select id where score > 80 )

8.EXISTS关键字

关键字是子查询时,主用用于判断子查询的结果集是否为空,不为空,返回true

为空 为flase

根据info 表 查询出大于80分的同学,然后统计有多少个

select count(*) from info a where exists(select id from info where score > 80 and info.id =a.id)

9.视图

mysql当中的视图view

视图在mysql当中是一个虚拟表。基于查询结果得出的一个虚拟表

在工作当中,我们查询的表未必是真表。 有可能就是视图表。有可能是基于真表查询结果的一个虚拟表

可以简化复杂的查询语句,隐藏表的细节提供安全的数据访问

创建视图表可以是一张表的结果集,也是多个表共同的查询的结果集

9.1 视图表和基本表的区别

1.存储方式不一样的,真表存储实际数据,真正写在磁盘当中的。视图不存储任何数据仅仅是一个查询的结果集的虚拟表间的

2.表可以增删改查,但是视图一般情况只能用于查,展示数据

3.占用空间,真表真实占用空间,视图不占用数据库空

查看视图表

show full tables in kgc where table_type like 'view'

删除

drop view 视图表

根据info表的id,name,score 在加上test01的age 创建

create view v_info(id,name,score,age) as

select a.id,a.name,a.score,b.age from info a ,test01 b

where a.name=b.name;

select * from v_info;

update info set score=90 where name='胡晋' #原表数据变化,视图表同步更新

update v_info set score=100 where name='王宇杭' #修改了视图表,源表的数据会发生变化,一般情况我们是不对视图进行改的操作。

真表占了80% 视图适用于安全性要求比较高的场景,对外访问,基本都是视图

10.连接查询

内连接:

是把两张表或者多张表(3张),同时符合特定条件的数据记录的组合

一个或者多个列相同值才会有查询的结果 inner join

select * from test01 a inner join info b on a.name=b.name#on 后面跟 条件语句

左连接

左外连接 在 left join关键字来表示,在左连接当中,左侧表是基础表,,接收左边的所有行,然后和右表(参考表)记录进行匹配。

匹配左表当中的所有行,以及右表中符合条件的行 匹配的记录,不匹配的记录null值

select * from test01 a left join info b on a.name=b.name

右连接

右外连接,right join 已右侧表为基础表 接收右侧表的所有记录。匹配的记录,不匹配的记录null值

select * from test01 a right join info b on a.name=b.name;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【软件逆向】如何逆向Unity3D+il2cpp开发的安卓app【IDA Pro+il2CppDumper+DnSpy+AndroidKiller】
  • 大数据毕业设计选题推荐-市天气预警实时监控平台-Hadoop-Spark-Hive
  • NetworkManager 图形化配置 bond
  • 用 Wireshark 在 Firefox 或 Google Chrome 上使用 SSLKEYLOGFILE 环境变量解密 SSL 流量
  • C语言面试
  • webpack的简单使用
  • python---类与对象
  • 2023 全栈工程师 Node.Js 服务器端 web 框架 Express.js 详细教程(更新中)
  • security实战
  • ActiveMQ、RabbitMQ、RocketMQ、Kafka介绍
  • java项目之个人健康信息管理(ssm+jsp)
  • kubernetes存储-volumes
  • 各种NoSQL数据库
  • CSAPP第4章:RISC和CISC指令集
  • [POI2006] OKR-Periods of Words——最大周期长度(扩展最小周期长度)
  • [nginx文档翻译系列] 控制nginx
  • E-HPC支持多队列管理和自动伸缩
  • ESLint简单操作
  • fetch 从初识到应用
  • gcc介绍及安装
  • Hibernate【inverse和cascade属性】知识要点
  • Javascript编码规范
  • opencv python Meanshift 和 Camshift
  • Promise初体验
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 基于web的全景—— Pannellum小试
  • 简单数学运算程序(不定期更新)
  • 跨域
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 事件委托的小应用
  • 树莓派 - 使用须知
  • 消息队列系列二(IOT中消息队列的应用)
  • 回归生活:清理微信公众号
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # 职场生活之道:善于团结
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)Hilt的基本概念和使用
  • (2)STM32单片机上位机
  • (20050108)又读《平凡的世界》
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (函数)颠倒字符串顺序(C语言)
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一) 初入MySQL 【认识和部署】
  • (一)80c52学习之旅-起始篇
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)SpringBoot3---尚硅谷总结
  • (转)linux 命令大全
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net 6.0--通用帮助类--FileHelper