MySQL连接查询

本文记录MySQL学习过程中遇到的MySQL连接查询~

交叉连接

交叉连接放回的结果是被连接的两个表中所有数据行的笛卡尔积,也就是返回第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

交叉连接的语法格式如下:

select * from table1 cross join table2;
select * from table1, table2;

从上述描述情况可以看出,交叉连接的结果就是两个表中所有数据的组合。需要注意的是,在实际开发中这种业务需求是很少见的,一般不会使用交叉连接,而是使用具体的条件对数据进行有目的的查询。

内连接

内连接又称简单连接或自然连接,是一种常见的连接查询。内连接使用比较运算符对两个表中的数据进行比较,并列出与连接条件匹配的数据行,组合成新的记录,也就是说在内连接查询中,只有满足条件的记录才能出现在查询结果中。内连接查询的语法格式如下:

select ... from table1 [inner] join table2 on table1.column1 = table2.column2;

在上述语法格式中,inner join用于连接两个表,on用于指定连接条件,其中inner可以省略。内连接其实还可以分为两类:

1.隐式内连接:顾名思义隐式的就是看不到inner join关键字,而使用where关键字替代;

select * from table1, table2 where table1.colume1 = table2.column2;

2.显示内连接:就是在语句中明显的调用了inner join关键字。

select * from table1 inner join table2 on table1.column1 = table2.column2;
select * from table1 join table2 on table1.column1 = table2.column2;

外连接

前门讲解的内连接查询中,返回的结果只包含符合查询条件和连接条件的数据,然而有时还需要包含没有关联的数据,即返回查询结果中不仅包含符合条件的数据,而且还包括左表(左连接或左外连接)、右表(右连接或右外连接)或两个表(全外连接)中的所有数据,此时就需要使用外连接查询,外连接分为左连接和右连接。

外连接的语法格式如下:

select ... from table1 left|right [outer] join table2 on table1.column1 = table2.column2 where ...;

外连接的语法格式和内连接类似,只不过使用的是left join和right join关键字,其中关键字左边的表被称为左表,关键字右边的表被称为右表。

左右连接查询的结果是不一致的,具体如下:

  • left join:返回包括左表中的所有记录和右表中符合连接条件的记录。
select * from table1 left outer join table2 on table1.column1 = table2.column2;
select * from table1 left join table2 on table1.column1 = table2.column2;
  • right join:返回包括右表中的所有记录和左表中符合连接条件的记录。
select * from table1 right outer join table2 on table1.column1 = table2.column2;
select * from table1 right join table2 on table1.column1 = table2.column2;

标签: none