您的位置:首页 > 科技 > IT业 > mysql的高阶语句

mysql的高阶语句

2024/12/24 10:04:21 来源:https://blog.csdn.net/Hai990218/article/details/140600118  浏览:    关键词:mysql的高阶语句

目录

排序语法(关键字排序)

where条件的筛选功能(比较符号)

嵌套多条件

分组查询group by

聚合函数的类型

limit

表和列的别名

给列起别名

给表和列起别名

对表进行复制

通配符

子查询(内查询)

子查询当中多表查询和别名

mysql的视图

查询当前数据库中的视图表

创建视图表

删除视图表

连接查询

内连接

左连接

右连接


排序语法(关键字排序)

升序 asc和降序 desc    配合order by语法使用

默认的排序方式就是升序

select * from info order by name; name升序排列

select * from info order by id desc;  id降序排列

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

where条件的筛选功能(比较符号)

区间判断

and     or

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

嵌套多条件

selec * from info where score < 70 or ( socre >75 and socre < 90);

分组查询group by

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

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

聚合函数的类型

count  统计

sum  求和

avg  求平均数

max  最大值

min  最小值

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

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

select count(name),hobbid,name from info where score>=80 group by hobbid,name;

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

limit

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

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

select * from info limit 3;

表和列的别名

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

给列起别名

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

给表和列起别名

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

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

对表进行复制

create table test as select * from info;

复制之后的表主键没有了

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

通配符

like 模糊查询

%:表示零个,或者一个或者多个字符       相当于*

_ :表示单个字符

子查询(内查询)

嵌套查询,select语句当中又嵌套了一个select,嵌套的select才是子查询,先执行子查询的语句,外部的select再根据子条件的结果进行过滤查找

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

关联语句 in  和  not in

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

update info set score=80 where id in ( select id from test where id = 2); 

就是 update info set score=80 where id=2;

子查询的结果只能是一列

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

select count(*) from info where exists(select id from test where score=90);

这里不是in和not in,这里是判断条件,存在才执行,不存在,结果为空则不执行

子查询当中多表查询和别名

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

查询info表的平均成绩

mysql的视图

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

视图和表之间的区别:

1.存储方式,表是实际的数据行,视图不存储数据,仅仅是查询结果的虚拟表

2.数据更新,更新表可以直接更新视图表的数据

3.占用空间,表实际占用空间,视图表不占用空间,只是一个动态结果的展示

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

查询当前数据库中的视图表

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

删除视图表

drop view test2;

视图表就是查询语句的别名。有了视图表可以简化查询的语句。表的权限不是一样的,库的权限是有控制的,所以查询视图表的权限相对低。既可以保证原表的数据安全,也简化了查询的过程

连接查询

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

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

连接的类型

内连接

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

inner join

左连接

又叫左外连接 left  join  或者 left outer join

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

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

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

右连接

又叫右外连接 right  join  或者 right outer join

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

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

版权声明:

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

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