首页 > 其他分享 >多表查询实现

多表查询实现

时间:2023-01-23 15:14:09浏览次数:33  
标签:join 实现 ret 查询 select 多表 id rili left

多表查询可以分为

image-20221210114615223

什么是join

​ join具有连接的作用,即当两个以上的表有关系时,需要用join来连接这些相关的表,来处理或分析数据。

join的作用:连接

这里有两张表,使用join将两个表连接,不会改变原来的表

image-20221210133144354

rili join ret 会生成一个新表

image-20221210133653129

select *from rili join ret; from先查找rili表,让后join 把 ret 添加上来 rili表+ret表

join后的列名是两个表列名加起来的,可能会出现相同的列名,如id和name

​ rili的每一行数据与ret中的所有数据不断拼接

​ 然后再用rili的第二行去和ret中的每一行数据拼接,以此类推

​ 表rili共3行,表ret共2行,所以2*3=6行

如果不想产生表1中的每一行都与表2中的所有数据不断拼接

​ 则需要在join 后加入 on

即join rili on 条件

on的用法:添加约束

​ select * from ret join rili on rili.id=ret.id;

当只有join时,其后面的on可以用where替换

​ select * from ret join stu where stu.id=ret.id;

image-20221210135809299

一般join 都是与on连用的

​ 即:join on

外连接

左外连接(left join)

​ left join 必须有on

left join 会检查左边表的数据是否都包含在新生成的表中

​ 若是:则和join一样

​ 若不是:则用NULL和不包含的行组成新的行加入到新的表中

image-20221210133144354

select * from rili left join ret on rili.id=ret.id;

image-20221210141626388

select *from ret left join ret on rili.id =ret.id;

image-20221210143243791

left join 左右两边的表是不能交换的,交换过后,意思会变

​ 但join左右两边的表可以交换,意思不变

右外连接(right join)

​ right join 也必须有on

right join会检查右边表的数据是否都包含在新生的表中

​ 若是:则和join没有区别

​ 若不是:则用NULL和不包含的行组成新的行加入到新表中

image-20221210133144354

select * from ret join rili on ret.id=rili.id;

image-20221210143114518

select *from rili join ret on ret.id=rili.id;

image-20221210143344405

总结:

​ 简单来说:就是看左表的行数是否与右边的行数相等,两边数据是否一样多,如果缺少则用NULL来补足

​ 如果是左外连接则左表为主表,右表为副表

​ 如果是右外连接则右表为主表,左表为副表

​ 根据主表来决定副表的多少,副表与主表一样多

可以根据以下来快速分析

​ A right join B:是以B为基准

​ B left join A:也是以B为基准的

join:将两个表按照条件连接起来

left join:以左表为基准,看左表的数据是否都包含在新生成的表中,

​ 若是:则和join一样

​ 若不是:则用NULL和不包含的行组成新的行加入到新表中;

right join:以右表为基准,看右边表的数据是否都包含在新生成的表中

​ 若是:则和join一样

​ 若不是:则用NULL和不包含的行组成新的行加入到新表中

标签:join,实现,ret,查询,select,多表,id,rili,left
From: https://www.cnblogs.com/rili/p/17065207.html

相关文章

  • 多表查询的分类new
    多表查询可以分为​ 什么是join​ join具有连接的作用,即当两个以上的表有关系时,需要用join来连接这些相关的表,来处理或分析数据。join的作用:连接这里有两张表,使用join......
  • 多表查询的分类
    角度1:等值连接与非等值连接角度2:自连接与 非自连接角度3:内连接与外连接等值连接(使用=号连接)非等值连接(不使用=号连接(如<,>,<=,>=,!=))​ selec......
  • 在尝试加载程序集 ID 65536 时 Microsoft .NET Framework 出错。服务器可能资源不足,或
    SqlServer 函数中执行的程序集但用户的权限不够,后DBA使用sa 账号设置了就对了网上找到的解决方法:这数据库是从其他数据库还原到本地数据库的,不少网友说在还原数据库之后,......
  • Blazor如何实现类似于微信的Tab切换?
    是否有小伙伴在使用tab的时候想进行滑动切换Tab?并且有滑动左出左进,右出右进的效果,本文将讲解怎么在Blazor中去通过滑动切换Tab本文中的UI组件使用的是MASABlazor,您也......
  • 【算法-链表】Go语言实现
    0、go语言自定义链表节点typeNodestruct{ Dataint Next*Node}typeDoubleNodestruct{ Dataint Next*DoubleNode Pre*DoubleNode}1、单链表反转......
  • node+express+ multer 实现文件上传入门
    文件上传文件上传需要借助一个中间件multer因此我们需要安装cnpminstallmulter--save前端界面在express创建的项目下的public/upload目录下创建indexfileupload.htm......
  • Oracle根据日期范围查询
    select*from表where时间字段>=to_date('2022-06-0800:00:00','yyyy-MM-ddHH24:MI:SS')AND时间字段<=to_date('2022-06-1100:00:00','yyyy-MM-ddHH24:MI:SS')......
  • Nginx+Keepalived实现web服务器高可用
    1、Nginx业务背景现公司需求快速搭建web服务器,对外提供给用户web服务。需求拆分需要基于http协议的软件,搭建服务实现介绍  常见用法:1)web服务器软件httpdhttp协议同类......
  • 7个流行的强化学习算法及代码实现
    目前流行的强化学习算法包括Q-learning、SARSA、DDPG、A2C、PPO、DQN和TRPO。这些算法已被用于在游戏、机器人和决策制定等各种应用中,并且这些流行的算法还在不断发展......
  • C# 简单实现 奇葩排序中的算盘排序(算珠排序)算法
    Console.WriteLine("HelloWorld!");int[]arr={1,3,4,0,22,4,0,6,3,10,8,6,7};Console.WriteLine(string.Join(",",arr.ToList(......