您的位置:首页 > 数据库

Postgresql join

2016-04-26 00:00 190 查看
摘要: Postgresql join

Postgresql join 操作

1. 建表&插入数据

2. inner join

3. full outer join

4. left outer join

5. 参考

1. 建表&插入数据

创建表 test_a, test_b

shop_5> CREATE TABLE test_a(id serial, name VARCHAR(32));
CREATE TABLE
Time: 0.019s

shop_5> \d test_a;
+----------+-----------------------+------------------------------------------------------+
| Column   | Type                  | Modifiers                                            |
|----------+-----------------------+------------------------------------------------------|
| id       | integer               |  not null default nextval('test_a_id_seq'::regclass) |
| name     | character varying(32) |                                                      |
+----------+-----------------------+------------------------------------------------------+
Time: 0.006s

shop_5> INSERT INTO test_a(name) VALUES ('a'),('b'),('c'),('d');
INSERT 0 4
Time: 0.011s

shop_5> SELECT * from test_a;
+------+--------+
|   id | name   |
|------+--------|
|    1 | a      |
|    2 | b      |
|    3 | c      |
|    4 | d      |
+------+--------+
SELECT 4
Time: 0.001s

shop_5> CREATE TABLE test_b(id serial, name VARCHAR(32));
CREATE TABLE
Time: 0.012s

shop_5> \d test_b;
+----------+-----------------------+------------------------------------------------------+
| Column   | Type                  | Modifiers                                            |
|----------+-----------------------+------------------------------------------------------|
| id       | integer               |  not null default nextval('test_b_id_seq'::regclass) |
| name     | character varying(32) |                                                      |
+----------+-----------------------+------------------------------------------------------+
Time: 0.003s

shop_5> INSERT INTO test_b(name) VALUES ('c'),('d'),('e'),('f');
INSERT 0 4
Time: 0.009s

shop_5> SELECT * from test_b;
+------+--------+
|   id | name   |
|------+--------|
|    1 | c      |
|    2 | d      |
|    3 | e      |
|    4 | f      |
+------+--------+
SELECT 4
Time: 0.002s


2. inner join

内联合(inner join)只生成同时匹配表A和表B的记录集。

shop_5> SELECT * from test_a a INNER JOIN test_b b on a.name = b.name;
+------+--------+------+--------+
|   id | name   |   id | name   |
|------+--------+------+--------|
|    3 | c      |    1 | c      |
|    4 | d      |    2 | d      |
+------+--------+------+--------+
SELECT 2
Time: 0.001s


3. full outer join

全外联合(full outer join)生成表A和表B里的记录全集,包括两边都匹配的记录。如果有一边没有匹配的,缺失的这一边为null。

shop_5> SELECT * from test_a a FULL OUTER JOIN test_b b on a.name = b.name;
+--------+--------+--------+--------+
|     id | name   |     id | name   |
|--------+--------+--------+--------|
|      1 | a      | <null> | <null> |
|      2 | b      | <null> | <null> |
|      3 | c      |      1 | c      |
|      4 | d      |      2 | d      |
| <null> | <null> |      3 | e      |
| <null> | <null> |      4 | f      |
+--------+--------+--------+--------+
SELECT 6
Time: 0.001s


4. left outer join

左外联合(left outer join)生成表A的所有记录,包括在表B里匹配的记录。如果没有匹配的,右边将是null。

shop_5> SELECT * from test_a a LEFT OUTER JOIN test_b b on a.name = b.name;
+------+--------+--------+--------+
|   id | name   |     id | name   |
|------+--------+--------+--------|
|    1 | a      | <null> | <null> |
|    2 | b      | <null> | <null> |
|    3 | c      |      1 | c      |
|    4 | d      |      2 | d      |
+------+--------+--------+--------+
SELECT 4
Time: 0.003s


5. 参考

http://francs3.blog.163.com/blog/static/405767272012101011193243/

http://www.yiibai.com/html/postgresql/2013/080569.html

http://blog.jobbole.com/40443/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  postgresql join