首页 > 其他分享 >多表查询的分类new

多表查询的分类new

时间:2023-01-23 15:13:51浏览次数:32  
标签:多表 join ret 查询 select new 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,new,id,rili,left
From: https://www.cnblogs.com/rili/p/17065206.html

相关文章

  • 多表查询的分类
    角度1:等值连接与非等值连接角度2:自连接与 非自连接角度3:内连接与外连接等值连接(使用=号连接)非等值连接(不使用=号连接(如<,>,<=,>=,!=))​ selec......
  • 在尝试加载程序集 ID 65536 时 Microsoft .NET Framework 出错。服务器可能资源不足,或
    SqlServer 函数中执行的程序集但用户的权限不够,后DBA使用sa 账号设置了就对了网上找到的解决方法:这数据库是从其他数据库还原到本地数据库的,不少网友说在还原数据库之后,......
  • 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')......
  • 从零开始学SQL:where条件查询与连接
    文章目录​​Python进阶篇-系列文章全篇​​​​1.练习强化​​​​2.where之比较运算​​​​3.where之逻辑运算​​​​4.where之模糊查询​​​​5.where之范围查......
  • C++内存分配方法new与placement new使用方法详解
    tags:C++写在前面总结一下C++内存分配中的​​new​​​/​​delete​​​方法,以及一个很有意思的工具:​​placementnew​​.参考:cppprimer5ed,pp409,pp726(19.1).......
  • MYSQL分页查询时没有用ORDER BY出现数据重复的问题
    背景产品反馈,用户在使用分页列表时,出现数据重复的问题,查看代码后发现对应的分页SQL并没有使用orderby进行排序,但是印象中Mysql的InnoDB引擎会默认按照主键id进行排序,本地......
  • happy new year
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <title>Fireworks</title><style>body{ background:black; overflow:hidden; margin:0;}......
  • Creation station扫码检查的递归查询
    withrecursivenomentree(refse,refcomp,depth)as(select et_refakf_se,et_refakf_comp,1asdepthfromt_nomeninnerjoint_simoont_simo.et_nomen=t_nomen.id_......
  • 多表查询与7种JOINS的实现
    多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也......
  • 03对数组使用索引查询
    importnumpyasnp#基础索引x1=np.arange(10)x2=np.arange(20).reshape(4,5)print(x1)print('-----')print(x1[0],x1[9],x1[-1])print('-----')print(x1[2:......