/*表结构及数据*/
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条)
情况2:添加实际的on条件,一个on条件,left join方式
/**
在情况1的基础上,挨个判断是否满足on的条件,如果满足则保留
如果不满足,则左表保留一条记录,右表的记录为null
**/
select * from test left join demo on test.id = demo.uid;
情况3:添加实际的on条件,一个on条件,inner join方式
/**
在情况1的基础上,挨个判断是否满足on的条件,如果满足则保留,如果不满足,则丢弃
**/
select * from test inner join demo on test.id = demo.uid;
情况4:添加实际的on条件,两个on条件,left join方式
/**
在情况1的基础上,挨个判断是否同时满足on的所有条件,如果满足则保留
如果不满足,则左表保留一条记录,右表的记录为null
**/
select * from test left join demo on test.id = demo.uid and test.id > 2;
情况5:添加实际的on条件,两个on条件,inner join方式
/**
在情况1的基础上,挨个判断是否同时满足on的所有条件,如果满足则保留
如果不满足,则丢弃
**/
select * from test inner join demo on test.id = demo.uid and test.id > 2;