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;

 

postgreSQL中的内连接和外连接实现操作

1select * from person;

postgreSQL中的内连接和外连接实现操作

一:内连接:

1.inner join

inner join(等值连接) 只返回两个表中联结字段相等的行

sql语句:

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

也可以写成:

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

结果如下:

postgreSQL中的内连接和外连接实现操作

从结果可以看出,表格中显示出了city.id=person.id的记录,它显示出了符合这个条件的记录。

二:外连接:

1.full outer join

full outer join(全外连接)返回参与连接的两个数据集合中的全部数据

sql语句:

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

也可以写成:

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

结果如下:

postgreSQL中的内连接和外连接实现操作

从结果可以看出,全外连接得到了city和person表中的全部数据

2.left outer join

left outer join(左连接) 返回包括左表中的所有记录和右表中连接字段相等的记录

sql语句:

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

也可以写成:

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

结果如下:

postgreSQL中的内连接和外连接实现操作

从结果可以看出,左外连接和全外连接的结果一模一样?

我们在给person中添加一行数据:

1insert into person values(9,’Kiki’);

postgreSQL中的内连接和外连接实现操作

在重新执行:

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

结果如下:

postgreSQL中的内连接和外连接实现操作

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

结果如下:

postgreSQL中的内连接和外连接实现操作

两个结果对照着看,left join显示出了city中的所有记录和person连接字段相等的记录

3.right outer join

right outer join(右连接) 返回包括右表中的所有记录和左表中连接字段相等的记录

sql语句:

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

也可以写成

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

结果如下:

postgreSQL中的内连接和外连接实现操作

从结果可以看出,person中的记录被全部显示出来,而city中的显示的数据是根据连接字段相等的记录

补充:PostgreSQL表连接:内连接,外连接,自连接,交叉连接

搜了搜,基本上都是写内连接、外连接、交叉连接这三种类型,但我发现PostgreSQL还有自连接。不妨一并写来做个记录。

先说概念:

内连接,就是两个表逐行匹配,匹配上的内容都显示,没有匹配的都不显示。

外连接有三种,左外连接,右外连接,全外连接。

左外连接是以左表为基础,左表内容全部显示,右表有匹配到左表的则显示,否则不显示。

右外连接是以右表为基础,右表内容全部显示,左表有匹配到右表的则显示,否则不显示。

全外连接是以两表为基础,显示三部分内容,一部分是内连接的内容,即两表匹配的内容,一部分是左表有而右表无的,一部分是左表无右表有的。

自连接是逐行,用当前这行数据和这个表中其他行进行匹配。

交叉连接最省事,笛卡尔积,左表m行右表n行,则结果是m*n行。

下面展示具体例子来帮助理解。

下面是两个表的内容。

mydb=# select * from weather;
   city   | temp_lo | temp_hi | prcp |  date
—————+———+———+——+————
 San Francisco |   46 |   50 | 0.25 | 1994-11-27
 San Francisco |   43 |   57 |  0 | 1994-11-29
 Hayward    |   37 |   54 |   | 1994-11-29
(3 行记录)
 
mydb=# select * from cities;
   name   | location
—————+———–
 San Francisco | (-194,53)
 London    | (0,51)
(2 行记录)

 

内连接有两种写法:

mydb=# SELECT *
mydb-#   FROM weather, cities
mydb-#   WHERE city = name;
   city   | temp_lo | temp_hi | prcp |  date  |   name   | location
—————+———+———+——+————+—————+———–
 San Francisco |   46 |   50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
 San Francisco |   43 |   57 |  0 | 1994-11-29 | San Francisco | (-194,53)
(2 行记录)
 
mydb=# SELECT *
mydb-#   FROM weather INNER JOIN cities ON (weather.city = cities.name);
   city   | temp_lo | temp_hi | prcp |  date  |   name   | location
—————+———+———+——+————+—————+———–
 San Francisco |   46 |   50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
 San Francisco |   43 |   57 |  0 | 1994-11-29 | San Francisco | (-194,53)
(2 行记录)

 

外连接有三种:左外连接,右外连接,全外连接。

mydb=# SELECT *
mydb-#   FROM weather LEFT OUTER JOIN cities ON (weather.city = cities.name);
   city   | temp_lo | temp_hi | prcp |  date  |   name   | location
—————+———+———+——+————+—————+———–
 San Francisco |   46 |   50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
 San Francisco |   43 |   57 |  0 | 1994-11-29 | San Francisco | (-194,53)
 Hayward    |   37 |   54 |   | 1994-11-29 |        |
(3 行记录)
 
mydb=# select * from weather right outer join cities on(weather.city=cities.name);
   city   | temp_lo | temp_hi | prcp |  date  |   name   | location
—————+———+———+——+————+—————+———–
 San Francisco |   43 |   57 |  0 | 1994-11-29 | San Francisco | (-194,53)
 San Francisco |   46 |   50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
        |     |     |   |      | London    | (0,51)
(3 行记录)
 
mydb=# select * from weather full outer join cities on(weather.city=cities.name);
   city   | temp_lo | temp_hi | prcp |  date  |   name   | location
—————+———+———+——+————+—————+———–
 San Francisco |   46 |   50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
 San Francisco |   43 |   57 |  0 | 1994-11-29 | San Francisco | (-194,53)
 Hayward    |   37 |   54 |   | 1994-11-29 |        |
        |     |     |   |      | London    | (0,51)
(4 行记录)

 

表交叉连接:

mydb=# SELECT *
mydb-#   FROM weather, cities;
   city   | temp_lo | temp_hi | prcp |  date  |   name   | location
—————+———+———+——+————+—————+———–
 San Francisco |   46 |   50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
 San Francisco |   46 |   50 | 0.25 | 1994-11-27 | London    | (0,51)
 San Francisco |   43 |   57 |  0 | 1994-11-29 | San Francisco | (-194,53)
 San Francisco |   43 |   57 |  0 | 1994-11-29 | London    | (0,51)
 Hayward    |   37 |   54 |   | 1994-11-29 | San Francisco | (-194,53)
 Hayward    |   37 |   54 |   | 1994-11-29 | London    | (0,51)
(6 行记录)

 

表自连接:

mydb=# SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high,
mydb-#   W2.city, W2.temp_lo AS low, W2.temp_hi AS high
mydb-#   FROM weather W1, weather W2
mydb-#   WHERE W1.temp_lo < W2.temp_lo
mydb-#   AND W1.temp_hi > W2.temp_hi;
   city   | low | high |   city   | low | high
—————+—–+——+—————+—–+——
 San Francisco | 43 |  57 | San Francisco | 46 |  50
 Hayward    | 37 |  54 | San Francisco | 46 |  50
(2 行记录)

文章来源:脚本之家

来源地址:https://www.jb51.net/article/204854.htm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:SEO优化专员,转转请注明出处:https://www.chuangxiangniao.com/p/892541.html

(0)
上一篇 2025年1月3日 23:40:19
下一篇 2025年1月3日 23:40:51

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • SQLite 中文指南之FAQ第1/6页

    sqllite使用过程中碰到的一些问题解决,中文版 1. 如何创建自增字段? 2. SQLite 支持哪些数据类型? 3. 为什么能向 SQLite 数据库的整型字段中插入字符串? 4. 为什么 SQLite 认为表达式 ‘0&…

    数据库 2025年1月4日
    100
  • Access创建一个简单MIS管理系统

    所谓MIS管理系统,是一个由人、计算机及其他外围设备等组成的能进行信息的收集、传递、存贮、加工、维护和使用的系统。MIS管理系统是一种新兴的技术,那么下文中就给大家介绍Access这个有历史的数据库系统如何创建一个简单的MIS管理系统。 M…

    数据库 2025年1月4日
    100
  • 读取注册表根据Office版本获取数据库连接字段

    本节主要介绍了如何根据Office版本获取数据库连接字段,以读取注册表获取Office版本,实现代码如下,感兴趣的朋友不要错过 /// /// 读取注册表,根据Office版本获取数据库连接字段 /// /// 数据库连接字段 privat…

    数据库 2025年1月4日
    100
  • PostgreSQL操作符实践技巧分享

    这篇文章主要给大家介绍了关于PostgreSQL基础知识之SQL操作符实践的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用PostgreSQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 前言 操作符是数据库具有的…

    2025年1月4日
    100
  • SQL Server如何通过创建临时表遍历更新数据详解

    这篇文章主要给大家介绍了关于SQL Server如何通过创建临时表遍历更新数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 前言: 前段时间新项目上线为了赶…

    2025年1月4日
    100
  • Mac系统重置PostgreSQL密码技巧及代码展示

    PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。这篇文章主要介绍了Mac系统重置PostgreSQL密码的方法示例代码,需要的朋友可以参考下 PostgreSQL是一种特性非常齐全的自由…

    数据库 2025年1月4日
    100
  • PostgreSQL技巧分享:图(graph)的递归查询实例

    这篇文章主要给大家介绍了关于PostgreSQL图(graph)的递归查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用PostgreSQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 背景 在树形递归查询这篇文…

    2025年1月4日
    100
  • PostgreSQL技巧 如何获取当前日期时间

    这篇文章主要介绍了PostgreSQL 如何获取当前日期时间及注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 在开发数据库应用或者调试代码时,经常需要获取系统的…

    数据库 2025年1月4日
    100
  • postgresql中的ltree类型使用技巧

    这篇文章主要给大家介绍了关于postgresql中ltree类型使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用postgresql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 postgresql有很多比较妖…

    2025年1月4日
    100
  • MongoDB通配符索引的用法实例

    这篇文章主要给大家介绍了关于MongoDB通配符索引的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 指南 MongoDB在4.2 版本推出了Wildcard …

    数据库 2025年1月4日
    100

发表回复

登录后才能评论

联系我们

156-6553-5169

在线咨询: QQ交谈

邮件:253000106@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

联系微信