数据库中的左连接和右连接的区别

今天,别人问我一个问题:数据库中的左连接和右连接有什么区别?如果有A,B两张表,A表有3条数据,B表有4条数据,通过左连接和右连接,查询出的数据条数最少是多少条?最多是多少条?

  我被这个问题问住了,后来我去问了数据库开发人员,结果结果各种各样:

  a 最大12  最小0

  b 最大12  最小未知

  c 最大未知 最小为3

  d 最大12   最小为3

  e 不清楚

  1、说明

  (1)左连接:只要左边表中有记录,数据就能检索出来,而右边有

  的记录必要在左边表中有的记录才能被检索出来

  (2)右连接:右连接是只要右边表中有记录,数据就能检索出来

  2、举例说明

  新建两张表,分别为t_left_tab和t_right_tab

  将t_left_tab作为左边表,t_right_tab作为右边

  左连接:SELECT * FROM t_left_tab a LEFT JOIN t_right_tab b ON a.`id` = b.`id`;

  查询结果:

  右连接:SELECT * FROM t_right_tab a LEFT JOIN t_left_tab b ON a.`id` = b.`id`;

  查询结果:

  查询最大条数:SELECT * FROM t_left_tab a LEFT JOIN t_right_tab b ON 1=1;

  查询结果:

  3、总结

  A 数据库左连接和右连接的区别:主表不一样

  B 通过左连接和右连接,最小条数为3(记录条数较小的记录数),最大条数为12(3×4)

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-07-28 15:55:28

数据库中的左连接和右连接的区别的相关文章

数据库中的左连接(left join)和右连接(right join)区别_数据库其它

Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接 where只影向右表,右连接where只影响左表. Left Join select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID 左连接后的检索结果是显示tbl1的所有数据和tbl2 中满足where 条件的数据. 简言之 Left Join影响到的是右边的表 Right Join select * from tbl1 R

数据库中的左连接(left join)和右连接(right join)区别

Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID 左连接后的检索结果是显示tbl1的所有数据和tbl2中满足where 条件的数据. 简言之 Left Join影响到的是右边的表 Right Join select * from tbl1 Rig

深入浅出SQL之左连接、右连接和全连接

內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来. 为更好的理解这个概念,我们介绍两个表作演示.苏格兰议会中的政党表(party)和议员表(msp). party(Code,Name,Leader)Code: 政党代码Name: 政党名称Leader: 政党领袖 msp(Name,Party,Constituency)Name: 议员名Party: 议员所在政党代码Constituency: 选区 在介绍左连接.右连接和全连接前,有一个数据库中重要的概念要介绍一下

MySQL左连接、右连接和内连接详解

本文向您简单介绍MySQL的ySQL左连接.右连接和内连接,并对具体的操作情况给出简单示例. 以MySql为例.在MySQL数据库中建立两张数据表,并分别插入一些数据. 示例脚本如下: drop table table1; CREATE TABLE `andrew`.`table1 ( `name` VARCHAR(32) NOT NULL, `city` VARCHAR(32) NOT NULL ) ENGINE = MyISAM; insert into TABLE1(name, city)

Oracle的左连接和右连接

oracle 在Oracle PL-SQL中,左连接和右连接以如下方式来实现 查看如下语句:SELECT emp_name, dept_name FORM Employee, DepartmentWHERE Employee.emp_deptid(+) = Department.deptid此SQL文使用了右连接,即"(+)"所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的

mysql 左连接、右连接和内连接_Mysql

脚本如下: drop table table1; CREATE TABLE `andrew`.`table1` ( `name` VARCHAR(32) NOT NULL, `city` VARCHAR(32) NOT NULL ) ENGINE = MyISAM; insert into TABLE1(name, city) values ('Person A', 'BJ'); insert into TABLE1(name, city) values ('Person B', 'BJ');

mysql左连接,右连接,内连接应用

/* 左连接:语法 假设a表在左不动,b表在a表的右边上下滑动 a表与b表通过一个关系来筛选b表的行 a left join b on 条件 ,条件为真,则b表对应的行取出 a left join b on 条件 这一块形成的也是一个结果集 可以看成一张表 设为c表 这时,可以对c表做查询 ,where ,group ,having,order by ,limit 照常使用 问 c表的可以查询的列有哪些列? 答: a b 的列都可以查 */ goods left join category on

C++中关于左值和右值的讨论

左值性(lvalueness)在C/C++中是表达式的一个重要属性.只有通过一个左值表达式才能来引用及更改一个对象(object)的值.(某些情况下,右值表达式也能引用(refer)到某一个对象,并且可能间接修改该对象的值,后述). 何谓对象?如果没有明确说明,这里说的对象,和狭义的类/对象(class/object)相比,更为广泛.在C/C++中,所谓的对象指的是执行环境中一块存储区域(a region of storage),该存储区域中的内容则代表(represent)了该对象的值(val

C++中的左值和右值

在C/C++中,左值(lvalue)和右值(rvalue)是用于规定表达式(expression)的性质.C++中表达式要不然是左值,要不然是右值. 这两个概念在C语言中比较容易理解:左值能放在赋值语句的左边,右值不能.但是当来到C++时,二者的理解就比较复杂了(PS:有对象真是麻烦) 简单的归纳: 当一个对象被用作右值的时候,用的是对象的值(内容):当对象被用作左值的时候,用的是对象的身份即在内存中的地址. 左值是代表一个内存地址值,并且通过这个内存地址,就可以对内存进行读并且写(主要是能写)