当前位置: 首页 > news >正文

PostgreSQL之高级数据选择

1、聚合函数:

聚集函数          描述
count(*)      提供行的计数
count(列名)   提供指定字段中值不是 NULL 的行的计数
min(列名)     返回指定列中的最小值
max(列名)     返回指定列中的最大值
sum(列名)     返回指定列的值的合计总数
avg(列名)     返回指定列的值的平均数

2、存在子查询(Existence Subqueries) 

在 WHERE 中使用 EXISTS 关键字来检查是否存在,而不需要知道数据的内容。在我们需要执行查询但不需要返回结果集的地方,我们只要简单地在列名所在的位置使用 1 代替。这意味着如果找到任何数据,将返回 1,这是一种简单有效的表达真值的方法。

bpsimple=# SELECT 1 FROM customer WHERE town = 'Bingham';
?column?
147
----------
 1
 1
 1
(3 rows)
bpsimple=#
bpsimple=# SELECT fname, lname FROM customer c
bpsimple-# WHERE EXISTS (SELECT 1 FROM orderinfo oi 
bpsimple(# WHERE oi.customer_id = c.customer_id);
fname | lname
-------+---------
Alex | Matthew
Ann | Stones
Laura | Hardy
David | Hudson
(4 rows) 
bpsimple=#

EXISTS 从句通常比其他类型的关联或者 IN 条件更高效。因此,在你选择怎么写一个子查询的时候,通常值得优先
使用它而不是其他类型的连接。

3、使用 UNION 连接

PostgreSQL 从两个表中获取城镇的列表并结合它们到一个单独的列表。但是请注意,它消除了所有重复数据。如果我们想得到所有的城镇的列表,包括重复的,我们需要使用 UNION ALL,而不是 UNION。UNION 连接的使用有一些限制。你要连接的两个从两个表中查找列表的列必须有相同列数,而且选择的每个列必须都有相兼容的类型。

bpsimple=# SELECT title FROM customer
bpsimple-# UNION
bpsimple-# SELECT town FROM tcust;
 title
----------
Keynes
Lincoln
Miss
Mr
Mrs
Welltown
(6 rows)

4、外连接

一个复杂点的例子:

bpsimple=# SELECT i.item_id, i.cost_price, s.quantity FROM item i
bpsimple-# LEFT OUTER JOIN stock s
bpsimple-# ON i.item_id = s.item_id AND s.quantity > 2
bpsimple-# WHERE i.cost_price > cast(5.0 AS numeric(7,2));
item_id | cost_price | quantity
---------+------------+----------
 1 | 15.23 | 12
 2 | 7.45 |
 5 | 7.54 | 3
 6 | 9.23 |
 7 | 13.36 | 8
 11 | 19.73 |
(6 rows)

PostgreSQL中left join中的on关键字后面是可以有多个条件的,比如例子中就有2个条件,这一点和Oracle不同

相关文章:

  • PostgreSQL 的数据定义
  • iOS - TouchID 指纹识别
  • PostgreSQL 事务和锁
  • PostgreSQL的函数、存储过程和触发器
  • PostgreSQL实战(1)允许远程连接
  • Phoenix官方教程 (五) 控制器
  • PostgreSQL实战(12)高级特性
  • base64图上上传保存到服务器
  • ajax报错302重定向错误
  • ArcGIS Engine开发之旅03--ArcGIS Engine中的控件
  • kafka消费过程中失败,kafka重试补偿
  • 从0到1搭建属于自己的服务器
  • PostgreSQL实战(2)数据结构
  • 金蝶kis记账王初始化过程中如何设置科目
  • SpringBoot项目的jar包在启动时选择的多环境配置以及加载顺序
  • 2017-08-04 前端日报
  • angular学习第一篇-----环境搭建
  • CSS盒模型深入
  • HashMap ConcurrentHashMap
  • javascript数组去重/查找/插入/删除
  • Java的Interrupt与线程中断
  • Linux CTF 逆向入门
  • Meteor的表单提交:Form
  • Rancher-k8s加速安装文档
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 前端攻城师
  • 前端面试之CSS3新特性
  • 十年未变!安全,谁之责?(下)
  • 阿里云移动端播放器高级功能介绍
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (4)(4.6) Triducer
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .Net Redis的秒杀Dome和异步执行
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET单元测试
  • .net开发时的诡异问题,button的onclick事件无效
  • @JsonFormat与@DateTimeFormat注解的使用
  • @private @protected @public
  • [ linux ] linux 命令英文全称及解释
  • [20161101]rman备份与数据文件变化7.txt
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [AIGC 大数据基础]hive浅谈
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [Bada开发]初步入口函数介绍
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [Codeforces] combinatorics (R1600) Part.2