您的位置:首页 > 健康 > 美食 > 东莞网络公司哪个网站好_建站公司用的开源系统_百度一下你就知道手机版官网_seo导航站

东莞网络公司哪个网站好_建站公司用的开源系统_百度一下你就知道手机版官网_seo导航站

2024/12/28 2:41:42 来源:https://blog.csdn.net/yangfeipancc/article/details/144745436  浏览:    关键词:东莞网络公司哪个网站好_建站公司用的开源系统_百度一下你就知道手机版官网_seo导航站
东莞网络公司哪个网站好_建站公司用的开源系统_百度一下你就知道手机版官网_seo导航站

mysql高阶语句

mysql高阶语句对复杂条件的查询

1、使用select语句时,如何按照顺序对结果进行排序

select  name from info order by score desc;
#我们查询的是name,按照成绩实现升序的操作select  id,name from info order by score desc;
#从大到小排序select name, score from info where address='天津北路' order by id;
#查询 info 表中 address 列值为 '天津北路' 的记录,返回 name 和 score 列,并按照 id 列的升序进行排序。#第一个字段必须要有相同的值,第二个字段才会有意义
select name,scort,hobbid id from info order by hobbid ,id;
#升序
select name,scort,hobbid id from info order by hobbid ,id desc;
#从大到小

练习

查询id,姓名,成绩,根据爱好都是10,按照id的进行降序排序
select id,name,score from info where hobbid=10 order by id desc;

2、区间判断

根据where的条件,来对数据进行逻辑的区分
and or
and:表示逻辑且,and的所有条件都要为真
or:表示逻辑或,只要有一个条件满足即为真

select * from info where score >80 and score <=90;
select * from info where score <80 or score >90;区间嵌套
select * from info where score >80 and (score >90 and score <95);

3、对结果进行分组查询

group by 语句
group by 都是和聚合函数一起使用的
count ()统计行数
sun()求和
ayg()求平均值
max()最大值
min()最小值

select count(name),hobbid from info group by hobbid;
#统计name这列,查询hobbid,根据hobbid进行分组查询
按照爱好来进行分组,求出这些爱好的分数的平均值
select avg(score),hobbid from info group by hobbid;
根据平均值大于85的,进行查询

注意事项:
1、不要使用聚合函数的字段来进行分组
2、要有多个字段,按照非统计的字段来进行分组
3、对聚合函数的结果进行判断,要使用hvaing

练习

1、先根据where条件过滤出成绩大于等于80分,然后查询姓名,性别,按照性别来进行分组,统计姓名
select count(name),sex from info where score >=80  group by sex;2、求出男生组和女生组平均成绩
select avg(score),sex from info group by sex;3、分别求出男生组和女生组的最大值和最小值
select max(score),min(score),sex from info group by sex;4、根据地址进行分组,统计平均成绩大于85分的地址
select avg(score),address from info group by address having avg(score) >85;

4、limit限制和distinct去重**

select * from info order by score desc limit 3

5、设置别名

select name as 姓名, score as 成绩 from info;
as也可以不加
select name  姓名, score 成绩 from info;

as就是用来起别名的命令,当表名和列名过长的适合可以使用别名进行代替,尤其是在多表联查时,可以不用申明表名

select a.hobbid,a.address,a.sex from info a,info1 b where a.name=b.name;

创建表时,根据另一张表的结果,直接创建,主键的约束无法继承

create table info1 as select * from info where score >90;

6、通配符

%:表示0个,1个多个字符
_:下划线表示的单个字符
通配符一般是和like一起使用,并且时配合where条件进行过滤

select id,name,score from info where name like "徐%";

7、子查询

内查询或者时嵌套查询,就是在查询语句当中又嵌套者另外一个select
先查询子语句,然后把子语句的结果传给主语句进行执行
子查询的表可以是一张表,也可以是不同的表

select name,score from info where id  in (select id from info where score > 85);
#前后的条件要一致,多张表联查不要超过3张!!!

练习

更新info表,设置成绩的值是65,根据子查询语句,只修改地址是有南京的记录的值
update info set score=65 where address in (select address from info1 where address like "%南京%");
不能查自己,改自己

8、exists语句

exists语句,判断子查询的结果集是否为空

select count(*)  from info where exists (select id from info where score >90);
count(*):不指定字段名称时,可以不使用group by
判断返回的结果是真还是假:
select count(*) from info :

9、视图表

视图表:视图是一个虚拟表,数据基于检索的查询结果,复杂的查询语句,简单化的呈现给用户,查询视图就可以获取数据,避免找到真正的表,提高了数据安全

create view test1 as select * from info where score >65;drop view test1
删除视图表

区别

view和table之间的区别:

1、存储方式,表都是实际数据,保存在硬盘,视图存储的不是数据行,而是结果的集合

2、数据更新,更新表可以更新视图,更新视图也可以更新表,一般情况下,视图仅仅用于展示数据

3、占用空间,表是实际空间,视图不占用数据库的空间,就是一个的结果

10、连接查询

连接查询:把两个或者三个表的记录行结合起来,基于这些表之间共同字段,进行数据的拼接,首先确定一个主表的结果集(主表的列),然后把其他表的行进行选择性的连接到主表的结果上

内连接

结合来个那个表之间基于一个字段或者多个字段之间,将两个表中结果进行组合

语法;inner join
select a.a_id,a.a_name from test1 a inner join test2 b on a.a_id=b.b_id;

左连接

左外连接,在from之后使用left join 或者left outer join用关键字来匹配,左连接以左侧表为基础,接受左表所有的行,并用这些行,与右侧表一起参与,显示左表以及右表符合条件的行,不满足的显示为null

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

右连接

右外连接,在from之后使用right join 或者right outer join用关键字来匹配,右连接以右侧表为基础,接受右表所有的行,并用这些行,与左侧表一起参与,显示右表以及左表符合条件的行,不满足的显示为null

select * from test1 a left join test2 b on a.a_id=b.b_id;

总结

1、order by 降序 besc 升序

2、使用聚合函数,需要group by

3、别名

4、limit和distinct

5、子查询,先执行子查询,再把子查询的结果传给主查询

6、视图

7、连接查询

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com