联表查询之交叉连接、内、外连接

目录

1、交叉连接(笛卡尔积)

2、内连接

2.1 显示内连接(inner join)

2.2 隐示内连接

 2.3 内连接的练习

 2.3.1 查询第一或者二学期中所有的学生

2.3.2 查询第一和第二期所有的学生

 2.3.3 查询每个班级下的学生总数,并且按照学生总数升序在(降序)排列

 2.3.4 查询班级总人数>2的班级,并且人数降序排列

 3、外连接

3.1 左外连接(left outer join,outer可以省略)

3.1.1 左外连接练习

3.1.2 所需表(学生表和班级表)

​编辑

3.1.3 查询结果与内连接对比 

​编辑

3.2 右外连接

​编辑 3.2.1 右外连接练习

​编辑 3.2.2 所需数据

​编辑

3.2.3 查询结果

3.2.4 如果删掉外键之后再插入一条数据(第八条)然后右连接的查询结果?

3.3 全外连接(union)

3.3.1 运行结果


1、交叉连接(笛卡尔积)


三条查询语句 :前两条是单表查询,然后就是交叉查询

  

 注:第一个是单表,后面是交叉表(显得有点冗余)

2、内连接


2.1 显示内连接(inner join)


 注:,如图所示这个INNER是可以不用写的,查询结果也是也一样的

2.2 隐示内连接


 2.3 内连接的练习


 2.3.1 查询第一或者二学期中所有的学生


 注:虽然输入中文也可以查询,但不推荐,因为这个名称有可能会发生变化  

2.3.2 查询第一和第二期所有的学生


注:这个是错误的查询写法,先and,在or,那么就会这样

 而显得数据冗余了 

========================================================================= 

注:加个括号一起统计,就不会先查and,在查or了 。(第一个是隐示,第二个是显示)

 2.3.3 查询每个班级下的学生总数,并且按照学生总数升序在(降序)排列


注:这是点击美化sql之后的格式

 2.3.4 查询班级总人数>2的班级,并且人数降序排列


注:先分组(group),在筛选(having) 

 3、外连接


3.1 左外连接(left outer join,outer可以省略)


3.1.1 左外连接练习


3.1.2 所需表(学生表和班级表)


 

3.1.3 查询结果与内连接对比 


1. 

 

2.

 

 

3.

 

注:查询结果1是左外连接,2是内连接 ,3.以左表为主的话,应该有四个学期,但是学生表只有第一和第二,所有返回kong

3.2 右外连接


 3.2.1 右外连接练习


 3.2.2 所需数据


注:需要多家一条数据并且class_id为空(第七条)

3.2.3 查询结果


 

注:为null,是因为没有找到对于的id,如果想查没有班级的学生,就在后面加个

and class-id = null即可

 

 

3.2.4 如果删掉外键之后再插入一条数据(第八条)然后右连接的查询结果?


 

 

 

注:查询结果以右边为主,所有可以看到class_id,但是坐标的内容为null,那么如果再次使用内连接,还是一样没有匹配就不显示

 

 

3.3 全外连接(union)


 

 

 注:mysql是无法实现全外连接,但是可以通过union进行 

3.3.1 运行结果


 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值