join七种连接
inner join内连接
两个表的相同部分,可以简单理解成交集
这里有两个表
表一:
表二:
使用inner join内连接后,数据集里面就有如下数据
left join左连接
左表的所有数据+两张表的公共部分
同样是这两张表
表一:
表二:
使用left join左连接后,数据集里面就有如下数据
right join右连接
左表的所有数据+两张表的公共部分
同样是这两张表
表一:
表二:
使用right join左连接后,数据集里面就有如下数据
cross join交叉连接
CROSS JOIN生成来自多个表的行的笛卡尔乘积。假设您使用CROSS JOIN来连接t1和t2表,结果集将包括t1表中的行与t2表中的行的组合。
详细可看这位大佬的文章https://www.cnblogs.com/mafeng/p/10150013.html
自连接
自连接其实就是一种自己连接自己的一种技术
这里有张表
SQL
CREATE TABLE `category`(
`categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主题id',
`pid` INT(10) NOT NULL COMMENT '父id',
`categoryname` VARCHAR(50) NOT NULL COMMENT '主题名字',
PRIMARY KEY (`categoryid`)
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
INSERT INTO `category` (`categoryid`, `pid`, `categoryname`)
VALUES ('2','1','信息技术'),
('3','1','软件开发'),
('5','1','美术设计'),
('4','3','数据库'),
('8','2','办公信息'),
('6','3','web开发'),
我们可以通过别名来将一张表变成两张表
SELECT a.
categoryname
,b.categoryname
FROMcategory
AS a INNER JOINcategory
AS b WHERE a.categoryid
=b.pid
;
只要categoryid=pid,那么这个pid的技术就是属于categoryid技术的