一般我們連接兩張表時,都是select xxx,xx from x1,x2 where x1.a=x2.a。其實數據庫還有4中join操作。
例如:表1:
s_id | name | sex |
1 | 張三 | 男 |
2 | 李四 | 女 |
4 | 王五 | 男 |
表2:
c_id | id | name |
1 | 1 | 11111 |
2 | 2 | 22222 |
3 | 3 | 33333 |
4 | 2 | 44444 |
1.連接查詢
select s.name s_name,s.sex s_sex,c.name c_name from student s,class c where s.s_id=c.s_id
結果:
s_name | s_sex | c_name |
張三 | 男 | 11111 |
李四 | 女 | 22222 |
李四 | 男 | 44444 |
2.inner join
select s.name s_name,s.sex s_sex,c.name c_name from student s inner join class c on s.s_id=c.s_id
結果:
s_name | s_sex | c_name |
張三 | 男 | 11111 |
李四 | 女 | 22222 |
李四 | 女 | 44444 |
可以看出inner join 和我們直接連接查詢沒什么差別!
3.left join
select s.name s_name,s.sex s_sex,c.name c_name from student s left join class c on s.s_id=c.s_id
結果:
s_name | s_sex | c_name |
張三 | 男 | 11111 |
李四 | 女 | 22222 |
李四 | 女 | 44444 |
王五 | 男 |
4.right join
select s.name s_name,s.sex s_sex,c.name c_name from student s right join class c on s.s_id=c.s_id
結果:
s_name | s_sex |
c_name |
張三 | 男 | 11111 |
李四 | 女 | 22222 |
33333 | ||
李四 | 女 | 44444 |
5.full join
select s.name s_name,s.sex s_sex,c.name c_name from student s full join class c on s.s_id=c.s_id
結果:
s_name | s_sex | c_name |
張三 | 男 | 11111 |
李四 | 女 | 22222 |
33333 | ||
王五 | 男 | |
李四 | 女 | 44444 |
綜上可以看出:
普通連接和 inner join連接沒什么差別!
left join:左表所有行都輸出,如果找不到右表對應字段,即該字段為null
right join:右表所有行都輸出,如果找不到左表對應字段,即該字段為null
full join:左右表行全部對應輸出,如果找不到對應字段,即為null