首页 > 其他分享 >Left Join,Right Join,Inner Join与where连接的区别

Left Join,Right Join,Inner Join与where连接的区别

时间:2023-11-15 11:35:02浏览次数:42  
标签:Right Join cid where Inner join tb 连接 select

概述

连表是SQL常用的操作,但是连表不一样,得到的结果也不一样(在数据量大的时候尤为明显),这里就是对关联表中一些筛选用的关键字的具体区别做了一个详细的梳理。

首先准备两张表,分别是tb_student和tb_class表

 tb_class表:

tb_student表:

一、内连接

1、隐式内连接:把连接条件放到where关键字后面。

语法:select 要查询的内容 from 表1,表2 where 连接条件 [and 筛选条件];

select * from tb_student s,tb_class c where s.cid = c.cid

结果如图:

如果不写连接条件,将查询出表1*表2,笛卡尔积

select * from tb_student,tb_class

结果如图:

2、显式内连接:使用inner join来连接,将连接条件放到on后面。

语法:select 要查询的内容 from 表1 inner join 表2 on 连接条件 [where 筛选条件];

select * from tb_class c inner join tb_student s on s.cid = c.cid

结果如图:

二、外连接

两张表中一张表作为基表,查询出该表所有的数据,另外一张表作为连接表,查询出该表与基表能够匹配的数据。如果基表数据匹配不上,就用null来填充。

1、左外连接:左边的表作为基表,右边的表作为连接表

语法:select 要查询的内容 from 表1,表2 where 连接条件 [and 筛选条件];

select * from tb_class c left join tb_student s on s.cid = c.cid

结果如图:

从图中可以看出,左外连接查出了左表的全部数据,on关键字是对left join的右表(tb_student表)进行了条件的的筛选,发现学生表中没有cid为5的学生,所以返回了null。

2、右外连接:右边的表作为基表,左边的表作为连接表

 语法:select 要查询的内容 from 连接表 right join 基表 on 连接条件 [where 筛选条件];

select * from tb_class c right join tb_student s on s.cid = c.cid

结果如图:

从图中可以看出,右外连接查出了右表的全部数据,on关键字是对right join的左表(tb_class表)进行了条件的的筛选,因为学生表中只有四条数据,没有cid为5的学生,所以查询的结果没有cid为5的班级数据。

注意:外连接中表的书写顺序将直接影响查询结果。

总结

1、一般来说,在进行多表联查时,都使用的是左连接,或者右连接,因为where是用来写条件的,一般不会用于连接表;再者where会把所有表中的数据都查询出来,再过滤,在性能问题上左连接和右连接,都要更优。

2、where连接:隐式内连接,主要是直接将两张表的数据,组合成一张临时表,然后通过where来筛选条件。通过两个表中相同的字段的值来对两个表进行连接。

3、inner join:显式内连接,则是与where连接比较相似,是将on中的条件放到where上,只返回满足条件的。

4、left join(right join)左外连接(或右外连接),它不管on中的条件是否为真,都会返回左表(或右表)中的所有数据,再对另一个表的连接字段进行匹配,如果匹配不上,就会用null填充。

标签:Right,Join,cid,where,Inner,join,tb,连接,select
From: https://www.cnblogs.com/echosada/p/17833438.html

相关文章

  • Python+PlayWright+ Pytest + Allure 自动化学习路线
    前言对于自己写过文章的总结,并不代表最好的学习路线还未完结,努力更新中ing建议把每节的实战演练做一下 PlayWrightPlayWright-环境安装PlayWright-如何使用playwrighPlayWrigh-同步和异步运行PlayWright-深入异步PlayWright-元素定位PlayWright-文本输......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-28-处理日历时间控件-上篇
    1.简介我们在实际工作中,有可能遇到有些web产品,网页上有一些时间选择,然后支持按照不同时间段范围去筛选数据,例如:我们预定火车票或者预定酒店,需要选择发车日期或者酒店的入住与退房时间。宏哥早在之前的12306选出发站就简单的提到过,只不过是一带而过,今天就展开详细介绍一下。网页上......
  • Python+PlayWright+ Pytest + Allure 自动化学习路线
    前言对于自己写过文章的总结,并不代表最好的学习路线还未完结,努力更新中ing建议把每节的实战演练做一下 PlayWrightPlayWright-环境安装PlayWright-如何使用playwrighPlayWrigh-同步和异步运行PlayWright-深入异步PlayWright-元素定位PlayWright-文本输......
  • AtCoder Beginner Contest 325
    A-Takahashisan#include<bits/stdc++.h>usingnamespacestd;#definelllonglongusingvi=vector<int>;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);strings,t;cin>>s>>t;cout<......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-27-处理单选和多选按钮-番外篇
    1.简介前边几篇文章是宏哥自己在本地弄了一个单选和多选的demo,然后又找了网上相关联的例子给小伙伴或童鞋们演示了一下如何使用playwright来处理单选按钮和多选按钮进行自动化测试,想必大家都已经掌握的八九不离十了吧。这一篇其实也很简单:就是宏哥在网上找了一个问卷调查例子......
  • selenium和playwright的区别和使用方法
    Selenium和Playwright都是自动化测试工具,可以用于模拟用户操作、执行测试脚本、验证网站功能和性能等。它们的主要区别在于实现方式和功能特性。1.实现方法Selenium是基于浏览器驱动的自动化测试工具,支持多种编程语言和多种浏览器。Selenium通过启动浏览器驱动程序(如Chrome......
  • Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328)
    ToyotaProgrammingContest2023#7(AtCoderBeginnerContest328)A.NotTooHard题意:将给定的数列\(a\)中数值小于\(x\)的数累加。解题思路:模拟。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;voidsolve(){ intn,x; cin>>n>>x;......
  • sql中left/right join on and where条件的使用
      有A和B两张表,使用leftjoin时, 左表属于主表知识点如下:多表左连接和右连接会生成一张临时表,where条件是针对最后的临时表进行过滤的on条件是针对非主表进行过滤的结论:1.对左表的条件要添加在where后面,不能放在on后面,因为左表属于主表2.对右表添加条件是放在ON......
  • AtCoder Beginner Contest 328
    A-NotTooHard(abc328A)题目大意给定\(n\)个数字和一个数\(x\)。问不大于\(x\)的数的和。解题思路按找要求累计符合条件的数的和即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdi......
  • AtCoder Beginner Contest 328
    A傻逼题。B傻逼题C傻逼题D不难发现,每次添加一个字符,如果可以当前的答案组成ABC就删。然后模拟即可。E两种方法。二进制枚举使用了哪些边。可以发现有用的状态只有\(\binom{m}{n-1}\),上限大概\(10^5\),剩余无用状态过了就行。复杂度\(O(m2^m)\),但是跑的特别不满。......