sql的嵌套查询_sql子查询嵌套优化

sql的嵌套查询_sql子查询嵌套优化最近在做各类小应用,用到了MYSQL,有时候会用到一些比较复杂的嵌套查询,在研究怎么通过SQL实现这些。假设下面这张表(stu)描述学生的基本信息:idnamegrade1Jim72Tom83Cake9………另外一张表(sco)描述学生的成绩信息:stu_idsubjectscore1

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

最近在做各类小应用,用到了MYSQL,有时候会用到一些比较复杂的嵌套查询,在研究怎么通过SQL实现这些。
假设下面这张表(stu)描述学生的基本信息:

id name grade
1 Jim 7
2 Tom 8
3 Cake 9
… … …

另外一张表(sco)描述学生的成绩信息:

stu_id subject score
1 math 78
2 math 83
3 physics 90
… … …

现在想查询七年级学生的数学成绩,那么sql语句应该这么写:

select * from stu left join sco on stu.id = sco.stu_id where stu.grade = 7 and sco.subject = "math";

两个表都有过滤条件,博主在实际应用场景下,两个表要复杂得多,而且过滤条件也多,于是在想有没有办法先select出两张表,然后再join。从性能上说,先过滤也有利于后续join的过程。当然,数据库对这些肯定有相应优化。我们还是回归到一个基本问题, 两个子查询怎么样进行join呢?

select * from (select * from stu where grade = 7) s left join (select * from sco where subject = "math") t on s.id = t.stu_id;

注意在上面的例子当中,两个子查询的写法,查询语句括起来,紧跟一个表的临时命名。
再写个复杂的例子,我们知道mysql不支持全外连接,如果要对上面的表进行全外连接,怎么办呢?
思路也简单,先左外连接,再右外连接,最后求并。

select * from (select * from stu where grade = 7) s left join (select * from sco where subject = "math") t on s.id = t.stu_id union select * from (select * from stu where grade = 7) s right join (select * from sco where subject = "math") t on s.id = t.stu_id

单从语句上看起来,有点复杂。事实上,sql功能强大,可以实现许多复杂业务的查询。在实际场景,其实很容易遇到这样的情形。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169409.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C#设计模式系列:命令模式(Command)

    C#设计模式系列:命令模式(Command)

    2021年8月29日
  • array.sort排序_javascript数组排序

    array.sort排序_javascript数组排序数组sort排序方法Array数组对象中的sort方法是根据数组中数组元素的字符编码进行排序的,所以对数字的排序,会跟想要的升序结果不一样通过设置sort()方法的参数可以按照自定义的排序方式对数组进行排序,sort()方法的参数是一个函数,需要自定义该函数,sort()方法会根据函数的返回结果对数组进行排序functioncompare(a,b){returna-b;}…

    2022年8月12日
  • hdu 4063 Aircraft 计算几何+最短路

    hdu 4063 Aircraft 计算几何+最短路

    2022年1月19日
  • visifire 控件

    visifire 控件引言Silverlight对于图形图像处理方面,从1.0时代起就给予了很强大的支持,所以我们可以在Silverlight中实现非常棒的各种统计图表,然而现在有了一些开源的项目,使得这项工作更加的简单。本文我将介绍一个开源的项目visifire,使用它可以在Silverlight2中实现超酷的图表。简单图表首先我们需要下载Visifire项目Silverlight开发包,在建立完项…

    2022年7月21日
  • c语言函数指针的用法_函数指针作为形参

    c语言函数指针的用法_函数指针作为形参前言函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言的童鞋,估计碰到这些东西就已经要崩溃了,然后好不容易死记硬背下来应付考试或者面试,然后过了几天发现,又是根本不会用,也不知道该在哪些地方用,这就尴尬了。今天这里只讲两…

    2022年8月18日
  • html转word java_word转excel排版不变

    html转word java_word转excel排版不变页面:无标题页页面后置文件:usingSystem;usingSystem.Collections;usingSystem.Configuration;usingSystem.Data;usingSystem.Linq;usingSystem.Web;usingSystem.

    2022年8月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号