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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 浅谈手机杀毒软件及手机病毒管理_防手机病毒杀毒软件

    浅谈手机杀毒软件及手机病毒管理_防手机病毒杀毒软件十一国庆长假刚过,又传出爆发手机病毒.到底有没有手机病毒??是手机杀毒软件公司的忽悠,还是真有手机病毒?很多资深IT人士都曾暴料,手机病毒是吹出来的根本不存在,因为智能手机操作系统都不相同,智能手机塞班、苹果OS、WM等平台的内部程序都是不对外公开的.纵使国内的山寨iphone外壳模仿得再像,但其内部的操作界面是无论如何做不出类似OS那样华丽的效果的;再有,各大手机系统都互不兼容,想要做到病毒

    2022年9月24日
    2
  • 二、八、十、十六进制转换(图解篇)「建议收藏」

    二、八、十、十六进制转换(图解篇)「建议收藏」一.本文所涉及的内容(Contents)本文所涉及的内容(Contents)背景(Contexts)进制转换算法(Convert)(二、八、十六进制)→(十进制)二进制→十进制八进制→十

    2022年8月6日
    4
  • java生成pfx_JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式

    java生成pfx_JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.math.BigInteger;importjava.security.InvalidKeyException;im…

    2022年5月29日
    52
  • Matlab函数定义_matlab子函数

    Matlab函数定义_matlab子函数但凡经过编程熏陶的人,在学习其他一门陌生的编程语言时,往往会与已经学过的语言相比较。而语法的比较往往是情不自禁的。在matlab中,函数的概念或许没有其他语言那么广泛,特性没有那么丰富,但基本的功能都已具备。        在数学中,定义一个函数,我们需要明确定义域、值域、表达式。在matlab中,则对应为输入参数,输出参数,函数体。实际上,matlab支持多输入多输出,函数的返回值可以为一

    2025年6月24日
    3
  • 双重求和∑matlab_求和∑的性质

    双重求和∑matlab_求和∑的性质目录一、复习求和符号∑二、二重求和的定义三、双重求和∑∑交换求和顺序一、复习求和符号∑    自从约瑟夫·傅立叶于1820年引入求和符号∑(大写的希腊字母sigma)以来,求和∑以及双重求和∑∑在数学公式推导,命题证明中被经常使用,掌握它的定义和性质对于提高我们的数学能力是必不可少的。注意我们在此只讨论有限项的求和。结合律:∑i=1n(ai+b…

    2022年10月12日
    2
  • 图解MySQL 内连接、外连接、左连接、右连接、全连接……太多了

    图解MySQL 内连接、外连接、左连接、右连接、全连接……太多了用两个表(a_table、b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接、外连接(左(外)连接、右(外)连接、全(外)连接)。MySQL版本:Serverversion:5.6.31MySQLCommunityServer(GPL)数据库表:a_table、b_table主题:内连接、左连接(左外连

    2022年6月14日
    25

发表回复

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

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