欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【Mysql】mysql数据库的查询语句

程序员文章站 2022-07-23 11:21:16
单表查询1、普通查询(1)命令:select * from <表名>;//通匹(2)命令:select <要查询的字段> from <表名>;2、去重查询(distinct)命令:select distinct <要查询的字段> from <表名>3、排序查询(order by)升序:asc降序:desc降序排列命令:select <要查询的字段名> from <表名> order by <要查询的字...

单表查询

1、普通查询
(1)命令:select * from <表名>;//通匹
(2)命令:select <要查询的字段> from <表名>;
2、去重查询(distinct)
命令:select distinct <要查询的字段> from <表名>
3、排序查询(order by)
升序:asc
降序:desc
降序排列命令:select <要查询的字段名> from <表名> order by <要查询的字段名> desc
不加desc一般默认为升序排列
4、分组查询(group by)
命令:select <按什么分的组>, Sum(score) from <表名> group by <按什么分的组>
假设现在又有一个学生成绩表(result)。要求查询一个学生的总成绩。我们根据学号将他们分为了不同的组。
命令:mysql>select id, Sum(score) from result group by id;

多表查询

一、等值查询
现在有两个表:
【Mysql】mysql数据库的查询语句
【Mysql】mysql数据库的查询语句
现在要查询年龄小于20岁学生的不及格成绩
语句:select stu.id,score from stu,result where stu.id = result.id and age < 20 and score < 60;
它的查询如下图所示:
【Mysql】mysql数据库的查询语句

可见等值查询效率太低
二、连接查询
1、外连接查询
(1)左外连接查询
假设我们依旧使用的是上面的两个表,任然查询年龄小于20岁学生的不及格成绩
我们利用左外连接查询,先将学生表中所有年龄小于20岁的学生取出来,再在成绩表中将所有成绩小于60的学生取出来,然后再进行配对,我们会发现效率大大得提高,只用匹配四次就可以找到。
如下图所示:
【Mysql】mysql数据库的查询语句
语句为:
select a.id,score
from
(select id,age from stu where age < 20) a (过滤左表信息)
left join
(select id, score from result where score < 60) b (过滤右表信息)
on a.id = b.id;
左外连接就是左表过滤的结果必须全部存在。如果存在左表中过滤出来的数据,右表没有匹配上,这样的话右表就会出现NULL;
(2)右外连接查询
select a.id,score
from
(select id,age from stu where age < 20) a (过滤左表信息)
right join
(select id, score from result where score < 60) b (过滤右表信息)
on a.id = b.id;
左外连接就是左表过滤的结果必须全部存在
如图:
【Mysql】mysql数据库的查询语句
我们发现过滤出来的表进行的匹配只有两条满足条件(红色代表条件满足),但最后的结果却是:
【Mysql】mysql数据库的查询语句
左表不匹配的数据改为空,右表过滤出来的数据都要存在。
(3)全外连接查询
结合了左外连接和右外连接,使得左表和右表的数据都存在。
2、内连接查询
只筛选匹配结果
比如过滤的结果如下:
【Mysql】mysql数据库的查询语句
最后的结果为:
【Mysql】mysql数据库的查询语句
只匹配我们需要的结果
语句为:
select a.id,score
from
(select id,age from stu where age < 20) a (过滤左表信息)
inner join
(select id, score from result where score < 60) b (过滤右表信息)
on a.id = b.id;

本文地址:https://blog.csdn.net/qq_43411563/article/details/107664851

相关标签: 数据库