友情提示:不同的SQL支持的连接方式是不同的,就像SQL server 和MySQL支持的部分就是不同的。
但连接的原理都是一样的,大家可以根据自己使用的来理解需要的部分,以下是博主根据各种SQL的连接原理的解释以及个人作图,供参考~
………………………………………………………………………………
内部连接–join/inner join
只取A&B连接表中共同的部分,结果表中删除了连接表没有匹配行的所有行
SELECT fieldlist
FROM table1 [INNER] JOIN table2
ON table1.column=table2.column
左连接–left join
保留A&B连接表左表中的所有行,如果左表的某一行在右表中没有匹配的行,则关联的结果表中,来自右表的所有列表均为NULL
SELECT fieldlist
FROM table1 left JOIN table2
ON table1.column=table2.column
右连接–right join
保留A&B连接表右表中的所有行,如果右表的某一行在左表中没有匹配的行,则关联的结果表中,来自左表的所有列表均为NULL
SELECT fieldlist
FROM table1 right JOIN table2
ON table1.column=table2.column
完整/全连接–fulljoin
保留A&B连接表中的所有行,当某一行在另一个表中没有匹配行,则按照NULL值填充返回
SELECT fieldlist
FROM table1 full JOIN table2
ON table1.column=table2.column
交叉连接–cross join
在没有WHERE子句的交叉连接将产生连接所涉及的表的笛卡尔积。
第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。
交叉连接中的列=原表中列数量的总和(相加)
交叉连接表中的行=原表中的行数的积(相乘)
SELECT fieldlist
FROM table1 cross JOIN table2
连接多表
where 子句连接
SELECT fieldlist
FROM table1,table2,table3……
where table1.column=table2.column
and table2.column=table3.column and……
from子句连接
SELECT fieldlist
FROM table1
join table2
join table3……
on table1.column=table2.column
and table2.column=table3.column