inner join 和 left join

/*表结构及数据*/

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` varchar(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `test` VALUES ('1', '张三', '18', '男');
INSERT INTO `test` VALUES ('2', '李四', '20', '女');
INSERT INTO `test` VALUES ('3', '王五', '32', '男');

/*--------------------------*/

CREATE TABLE `demo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` int(11) DEFAULT NULL,
  `change` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `demo` VALUES ('1', '2', '15');
INSERT INTO `demo` VALUES ('2', '3', '58');
INSERT INTO `demo` VALUES ('3', '2', '16');

情况1:on条件是1=1
sql

/*当on的条件是1=1的时候,inner join和left join的结果是一致的*/
select * from test left join demo on 1 = 1;
select * from test inner join demo on 1 = 1

结果:(条数是:3*3=9条)

inner join 和 left join_第1张图片
查询结果图

情况2:添加实际的on条件,一个on条件,left join方式

/**
在情况1的基础上,挨个判断是否满足on的条件,如果满足则保留
如果不满足,则左表保留一条记录,右表的记录为null
**/

select * from test left join demo on test.id = demo.uid;
inner join 和 left join_第2张图片
left join 一个on条件

情况3:添加实际的on条件,一个on条件,inner join方式

/**
在情况1的基础上,挨个判断是否满足on的条件,如果满足则保留,如果不满足,则丢弃
**/

select * from test inner join demo on test.id = demo.uid;
inner join 一个on条件

情况4:添加实际的on条件,两个on条件,left join方式

/**
在情况1的基础上,挨个判断是否同时满足on的所有条件,如果满足则保留
如果不满足,则左表保留一条记录,右表的记录为null
**/

select * from test left join demo on test.id = demo.uid and test.id > 2;
left join 两个on条件

情况5:添加实际的on条件,两个on条件,inner join方式

/**
在情况1的基础上,挨个判断是否同时满足on的所有条件,如果满足则保留
如果不满足,则丢弃
**/

select * from test inner join demo on test.id = demo.uid and test.id > 2;
inner join 两个on条件

你可能感兴趣的:(inner join 和 left join)