内连接与左外链接的区别

mysql 版本:5.5.13

理论部分

连接概述:

根据连接条件(on 子句),将两张表的相关内容组织成一个结果集

内连接与左外链接的区别描述:

使用内连接时,不符合连接条件的数据,(不管是左表中的还是右表中的)都不会被组织到结果集中

使用左外连接时,对于不符合连接条件的数据,左表中的内容依然会被组织到结果集中,结果集中该条数据对应的右表部分为 null

实例

工资表(salary_info)

create table salary_info(

name varchar(80) comment ‘员工姓名‘,

salary decimal(16,2) comment ‘工资‘

) 

内容

INSERT INTO `examination_questions_practice`.`salary_info` (`name`, `salary`) VALUES (‘张大胖‘, ‘10000‘);
INSERT INTO `examination_questions_practice`.`salary_info` (`name`, `salary`) VALUES (‘小李‘, ‘5000‘);
INSERT INTO `examination_questions_practice`.`salary_info` (`name`, `salary`) VALUES (‘王师傅‘, ‘20000‘);

name

salary
张大胖 10000
小李 5000
王师傅 20000

奖金表(bonus_info)

create table bonus_info(

name varchar(80)  comment ‘员工姓名‘,

bonus decimal(16,2) commetn ‘奖金‘

)

内容

INSERT INTO `bonus_info` (`name`, `bonus`) VALUES (‘张大胖‘, ‘2000‘);
INSERT INTO `bonus_info` (`name`, `bonus`) VALUES (‘王师傅‘, ‘3000‘);
name bonus
张大胖 2000
王师傅 3000

需求

发工资的日子到了,根据工资表和奖金表,统计所有员工的应发薪水

如果使用内连接,sql 语句如下:

select a.name as ‘员工姓名‘, (IFNULL(a.salary,0) + IFNULL(b.bonus,0)) as ‘应发薪水‘
from salary_info a
inner join bonus_info b
on a.name=b.name

运行结果:

员工姓名 应发薪水
张大胖 12000
王师傅 23000

于是,小李感觉很委屈,因为他的工资没到账

左外连接:,sql 语句如下:

select a.name as ‘员工姓名‘, (IFNULL(a.salary,0) + IFNULL(b.bonus,0)) as ‘应发薪水‘
from salary_info a
left join bonus_info b
on a.name=b.name

运行结果

员工姓名 应发薪水
张大胖 12000
小李 5000
王师傅 23000

小李也正常收到了工资

注:

当一个不为 null 的数值与一个为 null 的数值相加时,得到的结果为 null。

故用 IFNULL 函数,当参与计算的数值为 null 时,用数字 0 代替其参与计算。

如果不用,那么左外连接的结果就是小李对应的应发薪水为 null

辅助理解

内连接时,连接后的结果集为:

a.name a.salary b.name b.bonus
张大胖 10000 张大胖 2000
王师傅 20000 王师傅 3000

运行以下 sql,得到内连接的结果集

select *
from salary_info a
inner join bonus_info b
on a.name=b.name

左外连接时,连接后的结果集为:

a.name a.salary b.name b.bonus
张大胖 10000 张大胖 2000
小李 5000 null null
王师傅 20000 王师傅 3000

运行以下 sql,得到左外连接的结果集

select *
from salary_info a
left join bonus_info b
on a.name=b.name

原文地址:https://www.cnblogs.com/stone94/p/10224415.html

时间: 2024-10-06 23:04:53

内连接与左外链接的区别的相关文章

内连接、左外连接、右外连接、交叉连接区别

内连接.左外连接.右外连接.交叉连接区别 http://blog.csdn.net/cnham/archive/2008/06/25/2584936.aspx 在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚.这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下.希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助.(发这么菜的教程,各位大大们别笑话偶了,呵:D ) 有两个表A和表B.表A结构如下: Aid:int:标识种子,主键,自

Linq to EF 内连接和左外连接

Linq中连接主要有组连接.内连接.左外连接.交叉连接四种.本文主要讲解没连接和左外连接. 本次使用到的数据实体模型具体的创建方法不再累述.该实体模型中包括Student.Course两个表,他们之间是一对多的关系. 一.内连接 内连接与SqL中inner join一样,即找出两个序列的交集 Model1Container model = new Model1Container(); //内连接 var query = from s in model.Student join c in mode

SQL:内连接、左外连接、右外连接、全连接、交叉连接区别

有两个表A和表B.表A结构如下: Aid:int:标识种子,主键,自增ID Aname:varchar 数据情况,即用select * from A出来的记录情况如下图1所示: 图1:A表数据表B结构如下: Bid:int:标识种子,主键,自增ID Bnameid:int 数据情况,即用select * from B出来的记录情况如下图2所示: 图2:B表数据为 了把Bid和Aid加以区分,不让大家有误解,所以把Bid的起始种子设置为100.有SQL基本知识的人都知道,两个表要做连接,就必须有个

SQL 四种连接:内连接、左外连接、右外连接、全连接--转载

原文:http://zwdsmileface.iteye.com/blog/2191730 个人理解 内连接(INNER JOIN)(典型的连接运算,使用像   =   或   <>   之类的比较运算符).包括相等连接和自然连接. 内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行 左连接(LEFT   JOIN   或   LEFT   OUTER   JOIN)是右左边表中的数据为基准,若左表有数据右表没有数据,否则显示左表中的数据右表中的数据显示为空 右连接(RIGHT  JO

内连接association 左外连接collection

前提条件: 学生表 (多  子表) 年级表(一  主表) 1,第一种情况:先查子表所有 student.sql.xml文件如何配 由于有多表连接,无法把查询结果直接封装成一个实体对象-------->   结果转换规则:自己手动指定 内连接 返回单个association <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//D

SQL Server内连接、左外连接、右外连接、完全连接、交叉lianjie

数据准备: create table T1( A varchar(10) not null, B varchar(10) not null, C tinyint not null ); create table T2( B varchar(10) not null, E tinyint not null ); insert into T1 values ('a1', 'b1', 5), ('a1', 'b2', 6), ('a2', 'b3', 8), ('a2', 'b4', 12); ins

【转】mysql数据库中实现内连接、左连接、右连接

[转]mysql数据库中实现内连接.左连接.右连接 内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础把对应数据查出来 首先创建数据库中的表,数据库代码如下: /* Navicat MySQL Data Transfer Source Server : localhost_3306 Source Server Version : 50150 Source Host : localhost:3306 Source Database : store Target Server Type

内连接,左连接,右连接

http://www.cnblogs.com/Ewin/archive/2009/10/05/1578322.html 在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚.这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下.希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助.(发这么菜的教程,各位大大们别笑话偶了,呵:D ) 有两个表A和表B.表A结构如下: Aid:int:标识种子,主键,自增ID Aname:varchar 数据

C内联函数的内外链接的区别

1.内联函数的内链接如inline static void fn(void) {} 没有任何限制(建议使用) 2.内联函数的外链接如inline void fn(void) {} 则有诸多限制,最易被忽略的便是内联函数的外链接的定义(不仅需要.h文件的替换体,还需要单独的.c文件存放extern inline void fn(void)的外部定义):另外,一个非 static 的内联函数不能定义一个非 const 的函数局部 static 对象,并且不能使用文件作用域的 static 对象.例如