1. 程式人生 > >postgreSQL中的內連線和外連線

postgreSQL中的內連線和外連線

測試資料:

city表:

create table city(id int,name text);
insert into city values(0,'北京'),(1,'西安'),(2,'天津'),(3,'上海'),(4,'哈爾濱'),(5,'西藏')

person表:

create table person(id int,lastname char(20));
insert into person values(0,'Tom'),(2,'Lily'),(3,'Mary'),(5,'Coco');
select * from city;

這裡寫圖片描述

select * from person;

這裡寫圖片描述

一:內連線:

1.inner join

inner join(等值連線) 只返回兩個表中聯結欄位相等的行
sql語句:

select * from city inner join person on city.id = person.id;

也可以寫成:

select * from city join person on city.id = person.id;

結果如下:
這裡寫圖片描述
從結果可以看出,表格中顯示出了city.id=person.id的記錄,它顯示出了符合這個條件的記錄。

二:外連線:

1.full outer join

full outer join(全外連線)返回參與連線的兩個資料集合中的全部資料


sql語句:

select * from city full outer join person on city.id = person.id;

也可以寫成:

select * from city full join person on city.id = person.id;

結果如下:
這裡寫圖片描述
從結果可以看出,全外連線得到了city和person表中的全部資料

2.left outer join

left outer join(左連線) 返回包括左表中的所有記錄和右表中連線欄位相等的記錄
sql語句:

select * from city left outer  join
person on city.id = person.id;

也可以寫成:

select * from city left  join person on city.id = person.id;

結果如下:
這裡寫圖片描述
從結果可以看出,左外連線和全外連線的結果一模一樣?
我們在給person中新增一行資料:

insert into person values(9,'Kiki');

這裡寫圖片描述
在重新執行:

select * from city full join person on city.id = person.id;

結果如下:
這裡寫圖片描述

select * from city left  join person on city.id = person.id;

結果如下:
這裡寫圖片描述

兩個結果對照著看,left join顯示出了city中的所有記錄和person連線欄位相等的記錄

3.right outer join

right outer join(右連線) 返回包括右表中的所有記錄和左表中連線欄位相等的記錄
sql語句:

select * from city right outer  join person on city.id = person.id;

也可以寫成

select * from city right join person on city.id = person.id;

結果如下:
這裡寫圖片描述
從結果可以看出,person中的記錄被全部顯示出來,而city中的顯示的資料是根據連線欄位相等的記錄