mysql数据库中查询数据的语句怎么写_mysql数据库多表查询

2022-10-02 16:42:14 浏览数 (2)

大家好,又见面了,我是你们的朋友全栈君。

单表查询

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;

多表查询

一、等值查询 现在有两个表:

现在要查询年龄小于20岁学生的不及格成绩。 语句:select stu.id,score from stu,result where stu.id = result.id and age < 20 and score < 60; 它的查询如下图所示:

可见等值查询效率太低 二、连接查询 1、外连接查询 (1)左外连接查询 假设我们依旧使用的是上面的两个表,任然查询年龄小于20岁学生的不及格成绩 我们利用左外连接查询,先将学生表中所有年龄小于20岁的学生取出来,再在成绩表中将所有成绩小于60的学生取出来,然后再进行配对,我们会发现效率大大得提高,只用匹配四次就可以找到。 如下图所示:

语句为: 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; 左外连接就是左表过滤的结果必须全部存在 如图:

我们发现过滤出来的表进行的匹配只有两条满足条件(红色代表条件满足),但最后的结果却是:

左表不匹配的数据改为空,右表过滤出来的数据都要存在。 (3)全外连接查询 结合了左外连接和右外连接,使得左表和右表的数据都存在。 2、内连接查询 只筛选匹配结果 比如过滤的结果如下:

最后的结果为:

只匹配我们需要的结果 语句为: 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://javaforall.cn/197885.html原文链接:https://javaforall.cn

0 人点赞