1、inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。
2、left join (左连接,左外连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
right join (右连接,右外连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
3、full join (全外连接):返回左右表中所有的记录和左右表中连接字段相等的记录。
4、交叉连接(CROSS JOIN):
交叉连接(笛卡尔积)返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
语法:
SELECT * FROM table1 CROSS JOIN table2;
SELECT * FROM table1 JOIN table2;
SELECT * FROM table1 , table2;
举例说明:
id | name |
1 | 小王 |
2 | 小李 |
3 | 小刘 |
id | A_id | job |
1 | 2 | 老师 |
2 | 4 | 程序员 |
1、内连接:(只有2张表匹配的行才能显示)
select a.name,b.job from A a inner join B b on a.id=b.A_id;
小李 老师
2、外连接
左连接:(左边的表不加限制)
select a.name,b.job from A a left join B b on a.id=b.A_id;
小王 null
小李 老师
小刘 null
右连接:(右边的表不加限制)
select a.name,b.job from A a right join B b on a.id=b.A_id;
小李 老师
null 程序员
3、全外连接:(左右2张表都不加限制)
select a.name,b.job from A a full join B b on a.id=b.A_id;
小王 null
小李 老师
小刘 null
null 程序员
4、交叉连接(纯粹连接查询)
select * from A,B;
id | name | id | A_id | job |
1 | 小王 | 1 | 2 | 老师 |
1 | 小王 | 2 | 4 | 程序员 |
2 | 小李 | 1 | 2 | 老师 |
2 | 小李 | 2 | 4 | 程序员 |
3 | 小刘 | 1 | 2 | 老师 |
3 | 小刘 | 2 | 4 | 程序员 |
#交叉连接加上条件WHERE语句:
select * from A,B
where A.id=B.A_id;
id | name | id | A_id | job |
2 | 小李 | 1 | 2 | 老师 |