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不同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值