首页 > 数据库 >MySQL--子查询与联合查询

MySQL--子查询与联合查询

时间:2023-10-25 12:07:22浏览次数:29  
标签:sub stu -- 别名 查询 studentNo subjectNo MySQL select

十二、子查询

子查询就是一个查询中包含某一个查询

select 列名 from 表名 where 条件

12.1 出现在列的位置上

select studentName from student s where s.studentNo=r.studentNo

这类子查询适合放在列的位置上,适合放在条件的位置上,因为查询结果返回的是多行单列的值

select (select studentName from student s where s.studentNo=r.studentNo) as studentName, (select subjectName from subject sub where sub.subjectNo=r.subjectNo) as subjectName ,examDate,studentResult from result r.....

12.2 出现在表的位置上

select s.*,sub.subjectNo,sub.subjectName,sub.classHour,r.examDate,r.studentResult from student s , result r , subject sub where s.studentNo=r.studentNo and sub.subjectNo=r.subjectNo

这种多行多列的子查询适合放在表的位置上,因为查询结果会返回的是多行多列的值

select studentName,subjectName,examDate,studentResult from ( select s.*,sub.subjectNo,sub.subjectName,sub.classHour,r.examDate,r.studentResult from student s , result r , subject sub where s.studentNo=r.studentNo and sub.subjectNo=r.subjectNo) newstu

12.3 出现在条件的位置上

##查询出比熊大的mysql成绩还低的信息

select * from result where studentResult<( select studentResult from result where studentNo = (select studentNo from student where studentName='熊大') and subjectNo=(select subjectNo from subject where subjectName='mysql'))

案例:

##为每个学生制作在校期间各门课程的成绩单,要求每个学生参加每门课程的最后一次考试成绩作为该生本课程的最终成绩,按年级顺序输出各门课程的成绩 #成绩单,学生姓名,课程所属性的年级名称,课程名称,考试日期,考试成绩

select 
(select studentName from student s where s.studentNo=newr.studentNo) as  姓名,
(select subjectName from subject sub where sub.subjectNo=newr.subjectNo) as 课程,
(select gradeName from grade g where g.gradeId=newr.subgradeid) as 年级,
newr.examDate as 考试时间,
newr.studentResult as  考试成绩
from
(
select r.*,(select gradeId from subject sub where sub.subjectNo=r.subjectNo) as subgradeid from result r,(select subjectNo, max(examDate) as maxdate from result group by subjectNo) maxr
where
r.subjectNo=maxr.subjectNo  and r.examDate= maxr.maxdate) newr order by subgradeid desc

十三、联合查询

一个查询结果中包含有多张表中的字段数据

内连接:

两张表中关联字段相等的数据记录查询出来

语法:from 表1 别名1 inner join 表2 别名2 on 别名1.关联字段=别名2.关联字段 内连接要两边同时都满足时才显示

select 
            stu.studentName , sub.subjectName,r.examDate,r.studentResult 
from 
        result r 
        inner join student stu on r.studentNo=stu.studentNo
        inner join subject sub on r.subjectNo=sub.subjectNo

另一种写法

select 
    stu.studentName , sub.subjectName,r.examDate,r.studentResult 
from 
    result r,student stu,subject sub
where 
    r.studentNo=stu.studentNo and r.subjectNo=sub.subjectNo

左连接:

以左边的表为基准数据全部显示,右边的表中的数据只有满足了on后面的条件的数据才显示

语法: from 表1 别名1 left join 表2 别名2 on 别名1.关联字段=别名2.关联字段

select * from 
    student stu left join result r
    on
    stu.studentNo=r.studentNo

MySQL--子查询与联合查询_子查询

左边表中的数据全部显示,右边对应得上的显示,如果左边对应不上右边的数据用null来补充。

右连接:

以右边的表为基准数据全部显示,左边的表中的数据只有满足了on后面的条件的数据才显示

from 表1 别名1 right join 表2 别名2 on 别名1.关联字段=别名2.关联字段

select * from 
    student stu right join result r
    on
    stu.studentNo=r.studentNo

MySQL--子查询与联合查询_子查询_02

完全连接:

左的表的数据全部显示,右边表没有的用null填充,右边表的数据全部显示,左边表没有的用null填充,就是左连接与右连接的结合

from 表1 别名1 left join 表2 别名2 on 别名1.关联字段=别名2.关联字段 union from 表1 别名1 right join 表2 别名2 on 别名1.关联字段=别名2.关联字段

select * from 
    student stu left join result r
    on
    stu.studentNo=r.studentNo
union
select * from 
    student stu right join result r
    on
    stu.studentNo=r.studentNo


MySQL--子查询与联合查询_子查询_03

标签:sub,stu,--,别名,查询,studentNo,subjectNo,MySQL,select
From: https://blog.51cto.com/u_16261728/8016272

相关文章

  • 在fmx下动态生成的TText为什么不能调整大小及字体样式
    //为什么会这样呢?类似于下面这样的代码不能生效。MyLbl:=Ttext.Create(self);MyLbl.Parent:=VscrbMenuBtn;//MyLbl.Font.Size:=20;MyLbl.TextSettings.Font.Size:=20;MyLbl.Size.PlatformDefault:=false;......
  • RabbitMQ通讯方式
    RabbitMQ提供了七种通讯方式,可以去官方查看:https://rabbitmq.com/getstarted.html一、RabbitMQ提供的通讯方式其中通讯方式如下:HelloWorld!:为了入门操作提供的方式Workqueues:一个队列被多个消费者消费Publish/Subscribe:手动创建Exchange(FANOUT)Routing:手动创建Exchange(DIRECT)Topi......
  • Loadrunner发生请求的body中文实际是乱码的解决方法
    Loadrunner发生的json请求中,包含有中文。回放脚本,实际发送出去的body不是中文,而是乱码,这就导致请求不正确,影响测试的实际结果。要解决这个问题,先要把中文使用函数lr_convert_string_encoding转换一下,再在请求中引用该转换后的参数,回放的请求数据正常。示例如下:lr_convert_string_......
  • 获取共享网络的内网IP
     本人有一个iPad,上网用的是电脑共享的网络。  是通过USA连接的共享的方式,结果就不知道iPad的IP了, iPad也没有越狱。被这个问题居然犯难了。 想到用arp广播一下,肯定会有回复。从当前IP地址中寻找。 因为是USA共享,肯定是桥接方式,找 尾部是[bridge]的。......
  • WebStorm 快捷键插入注释时,注释从开头开始,中间有许多空格的解决办法
    前言有些配置被乱改了,导致写代码时非常难受,我遇到的事儿是在vue模板中添加注释,之前都是在光标处插入的注释块,今天突然发现注释从开头开始插入了,中间还有一堆空格解决办法我们在vue中出现的问题,那我们就找vue的template模板中出现了问题,因为vue的template适合HTML有关联的,所以我们打......
  • CC攻击原理是什么?网站被CC攻击如何防御?
    CC攻击英文全拼ChallengeCollapsar,属于DDoS攻击的一种,是目前常见的网络攻击方式之一,其危害性巨大。那么网站被CC攻击如何防御?以下是详细内容介绍。CC攻击的原理CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃......
  • ElementPlus里的类型别名声明及使用
    前言最近刚开始使用ts,定义的变量总是不知道类型,特别是第三方库中,更是不知道有哪些类型,笨人本办法,遇到一个就记录一下,方便我下次使用查询组件实例我们通过组件的ref属性获取组件实例时,定义的实例变量需要指定类型。下面是常见的一些组件实例类型el-scrollbar<template><el-scroll......
  • 派克斯电脑全局改IP如何辅助捉妖游戏
    捉妖游戏是一款非常受欢迎的手机游戏,玩家需要通过探索地图来捉到各种可爱的妖精。为了让游戏更具趣味性,玩家可以通过地图制作来设计自己的捉妖之旅。在这篇教程中,我们将向您展示如何使用电脑全局软件工具——派克斯,来制作捉妖游戏的地图。捉妖游戏的地图制作可以让玩家更好地探索游......
  • Apple开发_字符串后缀如果包含有数字,提取出字符串后缀全部的数字
    NSString分类@implementationNSString(GC)-(NSString*)suffix_Num{//匹配字符串末尾的数字NSString*pattern=@"\\d+$";NSError*error=nil;NSRegularExpression*regex=[NSRegularExpressionregularExpressionWithPattern:patternoptions......
  • Linux安全加固
    1、设置复杂密码  :服务器设置大写、小写、特殊字符、数字组成的12-16位的复杂密码2、设置密码策略   :修改文件/etc/login.defs     PASS_MAX_DAYS99999   密码的有效期:99999基本上表示永久有效    PASS_MIN_DAYS0     表示自上次修改密......