简简单单 My SQL 学习笔记(3)——连接和嵌套查询

初始数据

学生表

create table Student(Sid varchar(6), Sname varchar(10), Sage datetime, Ssex varchar(10));
insert into Student values('01' , '小唐' , '2002-07-11' , '男');
insert into Student values('02' , '小喜' , '2002-05-21' , '男');
insert into Student values('03' , '小欢' , '2002-05-21' , '男');
insert into Student values('04' , '小黄' , '2002-02-14' , '女');

成绩表

create table SC(Sid varchar(10),  score decimal(18,1));
insert into SC values('01' , 80);
insert into SC values('02' , 70);
insert into SC values('04' , 50);

大概是这样
在这里插入图片描述
在这里插入图片描述


连接 表1.相同列=表2.相同列

一听连接这个东西就是把我们相同的列重合在一起,然后形成一个表,大概就是这样,数据结构还是和上一篇讲的一样三层结构
在这里插入图片描述
比如说在这里,我想把这两个表连起来,让我还可以看到每一个人的成绩

select Student.Sid,Sname,Sage,Ssex,score
from Student, SC
where Student.Sid= SC.Sid;

由于我们的sid是两个表都有的,所以说,我们还要去标明他们各自的所属关系,即student.sid和sc.sid。对于那一些我们单独没有重复的列名,我们就可以选择不标
在这里插入图片描述
这个时候我们发现一个问题,我们小欢同学的成绩不见了!!!,我们回到上面去看我们的成绩表,sid=3的根本没有学号和成绩,好吧,他根本没有成绩,但是这个时候我们想要他显示怎么办???


左右连接 表名 left/right outer join 表名 on(相同列名)

他和直接连接最大的不同就是,他会显示出没有的数据

右连接

select Student.Sid,Sname,Sage,Ssex,score
from Student right outer join sc on(Student.Sid= SC.Sid);

在这里插入图片描述
就有人问了,小唐,小唐怎么还是一样的呀,嘿嘿,我还没有说完呢,我们现在的是右连接,只会显示我们右边所有的元组,我们右边是什么,那个是成绩表!!!我们可以交换两边的次序,同时也可以在不改变次序的情况下,使用左连接!!!


左连接

select Student.Sid,Sname,Sage,Ssex,score
from Student left outer join sc on(Student.Sid= SC.Sid);

在这里插入图片描述


嵌套查询

这个东西,很多老师讲得很复杂,但是我的理解就真的很单纯,先举个例子吧
我们需要查找及格学生的名字!!!必须用嵌套


select  Sname
from Student
where sid in
 (
select sid
from sc
where score>=60
);

在这里插入图片描述
简单的来说,就是我们在where里面使用a in b(就是a表里面包含b的输出),用下面的式子来查找相应的学号,然后在返回上一级里面的sid查找
在这里插入图片描述
不难发现的是,他就是由两个查询的基本结构,组成的

在这里插入图片描述
他的最底层的嵌套都可以单独执行,我们看看这个部分

在这里插入图片描述
在这里插入图片描述
输出的就是我们的符合条件的学号,返回上一级他的逻辑就是这样子来写
在这里插入图片描述
是不是一下子就清楚了,就是子循环返回的结果,传递给上一级,然后上一级再去做出选择


上一篇: 简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
下一篇: 别催了,别催了,在写了

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东莞光年科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值