MySQL的JOIN连接

MySQL的JOIN

join的含义跟英文单词"join"一样,连接连接两张表。分为

  内连接:inner join

  外连接

    (1)左外连接(左边的表不加限制):left join

    (2)右外连接(右边的表不加限制):right join

    (3)全外连接(左右表都不加限制):full join(MySQL不支持)

  自连接(同一张表内的连接,可以理解为自己连接自己)

on字句用于指定连接条件

如下图:

 

表结构:

create table t_blog
(
 id int primary key auto_increment,
 title varchar (50),
 typeid int
);
 
 
create table t_type
(
 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不会。

 

posted @ 2019-09-06 11:35  黑夜的宠儿  阅读(763)  评论(0编辑  收藏  举报