MySQL的JOIN连接
MySQL的JOIN
join的含义跟英文单词"join"一样,连接连接两张表。分为
内连接:inner join
外连接
(1)左外连接(左边的表不加限制):left join
(2)右外连接(右边的表不加限制):right join
(3)全外连接(左右表都不加限制):full join(MySQL不支持)
自连接(同一张表内的连接,可以理解为自己连接自己)
on字句用于指定连接条件
如下图:
表结构:
(
id int primary key auto_increment,
title varchar (50),
typeid int
);
(
id int primary key auto_increment,
name varchar (20)
);
要理解各种JOIN首先要理解笛卡尔积。笛卡尔积就是将A表的每一条记录与B表的每一条记录强行拼在一起。所以,如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录。上面的例子,t_blog有10条记录,t_type有5条记录,所以笛卡尔积有50条记录。
内连接(inner join)
内连接inner join是最常用的连接操作。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录。有inner join、join(省略inner)、where(等值连接)、straight_join四种写法。
select * from t_blog a inner join t_type b on a.typeid=b.id
select * from t_blog a join t_type b on a.typeid=b.id
select * from t_blog a, t_type b where a.typeid=b.id
select * from t_blog a STRAIGHT_JOIN t_type b on a.typeid=b.id
左连接:LEFT JOIN
左连接left join的含义从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录。
右连接:RIGHT JOIN
同理右连接right join的含义从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录。
外连接:OUTER JOIN
外连接就的含义从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录。另外MySQL不支持OUTER JOIN,但是我们可以对左连接和右连接的结果做UNION操作来实现。
USING子句
MySQL中连接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name。当模式设计对联接表的列采用了相同的命名样式时,就可以使用 USING 语法来简化 ON 语法,格式为:USING(column_name)。所以,USING的功能相当于ON,区别在于USING指定一个属性名用于连接两个表,而ON指定一个条件。另外,SELECT *时,USING会去除USING指定的列,而ON不会。