• inner join

SELECT column_name(s)
FROM table1
[INNER] JOIN table2 ON table1.column_name = table2.column_name;

结果为: table 1和table 2中都有的数据

  • left outer join

SELECT column_name(s)
FROM table_name1
LEFT [OUTER] JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

结果: table1 中的全部,table 2中没有的补null

  • right outer jion

SELECT column_name(s)
FROM table_name1
RIGHT [OUTER] JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

结果:table2 中的全部,table 1 补null

  • full outer join

SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

结果:left join 和 right join 的并 ,两边都有补null

  • cross join

SELECT *
FROM table1
CROSS JOIN table2

等价于

select * from table1,table2
  • cross join 和full join 的区别

cross join 返回talbe1的行数*table2的行数
full join 返回max(table1的行数,tabel2的行数)

  • 自然连接和内连接

自然连接是通过对参与表关系中所有同名的属性对取等(即相等比较)来完成的,故无须自己添加连接条件
内连接与自然连接基本相同,不同之处在于自然连接只能是同名属性的等值连接,而内连接可以使用using或on子句来指定连接条件,连接条件中指出某两字段相等(可以不同名)