PostgreSQL的特色sql语法

进阶数据库系列(五):PostgreSQL 语法详解 前面介绍了 PostgreSQL 基础概念及安装部署、目录结构与配置文件 postgresql.conf、常用管理命令、访问控制与认证 相关的知识点,今天我将详细的为大家介绍 PostgreSQL 语法 相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!默认情况下 PostgreSQL 安装完成后,自带了一个命令行工具。Mac OS我们直接搜索就可以了找到:更多关于大数据 PostgreSQL 系列的学习文章,请参阅:PostgreSQL 数据库,本系列持续更新中。 阅读详情

1、视图

简言之,视图就是持久化存储在数据库中的一个查询语句。

1.1、单表视图

创建单表的视图:

CREATE or REPLACE VIEW census.vw_facts_2019 as SELECT fact_type_id,val,yr FROM census.facts WHERE yr=2011;

下面的删除命令将仅删除yr=2011的记录:

delete from census.vw_facts_2019 where val=0;

以下update操作更新不了任何记录:

update census.vw_facts_2019 set val=1 where val=0 and yr=2012;

2、postgresql专有sql语法

2.1、distinct on

其功能类似distinct但且可以精确到更细的粒度。distinct会将结果集中完全重复的记录剔除,但distinct on 可以将结果集中指定字段值的重复记录剔除。

示例:

SELECT DISTINCT ON (left(tract_id, 5)) left(tract_id, 5) AS county, tract_id, tract_name from census.lu_tracts ORDER BY county, tract_id;

同时查询语句中order by子句的排序字段列表的最左侧必须是distinct on指定的字段列表,既保证整个结果集是按照这几个字段排序的,这样最终去重后得到的结果才是你想要的。

2.2、limit和offset关键字

limit关键字指定了查询时仅返回指定数量的记录,offset关键字指定了从第几条记录开始返回。一般这两个关键字和order by联用。

示例:要求查询结果集仅返回从第3条开始的3条记录

SELECT DISTINCT ON (left(tract_id, 5)) left(tract_id, 5) AS county, tract_id, tract_name from census.lu_tracts ORDER BY county, tract_id LIMIT 3 OFFSET 2;

2.3、简化的类型转换语法

ANSI SQL标准中定义了一个名为CAST的类型转换函数,可以实现数据类型之间的互相转换。例如CAST('2011-1-11' as date)可以将文本转换为一个日期类型。而postgresql支持一种简写语法,该语法使用了两个冒号来表示转换关系,具体格式为:'2011-1-11'::date。还可以级联执行多个类型转换动作,例如:someXML::text::integer。

2.4、delete using语法

using子句可以将需要借助的一个或者多个中间表(或者子查询)纳入同一个delete语句中。在下列示例中我们借助一个关联查询实现了删除census.facts表中符合short_name='s01'这个条件的记录

DELETE from census.facts USING census.lu_fact_types as ft WHERE fact.fact_type_id = ft.fact_type_id AND ft.short_name='s01';

2.5、在查询中使用复合数据类型

联用array_agg和array_to_json这两个函数来将语句的查询结果转换为一个json对象后输出,示例:

SELECT array_to_json(array_agg(f)) AS cat FROM (select name,ggstart_time,href,min(ctid) from gg group by name,ggstart_time,href having count(href) >1 order by ggstart_time desc) as f;

postgresql 9.3版提供了一名为json_agg的函数,该函数的效果相当于上面示例中array_agg和array_to_json联用的效果,但json_agg执行速度更快,示例:

SELECT json_agg(f) AS cats FROM (SELECT MAX(fact_type_id) AS max_type,category FROM census.lu_fact_types
GROUP BY category) AS f;

2.6、适用于聚合操作的FILTER子句

SELECT student,AVG(score) FILTER (WHERE subject='algebra') AS algebra,  AVG(score) FILTER (WHERE subject='physics') AS physics from test_scores GROUP BY student;

对于求平均值、求合计值以及其他很多聚合函数来说,case和FILTER子句是等价的,即二者可以起到相同的作用。FILTER子句的优势在于写法比较清晰简洁并且操作大数据量时速度比较快。

示例:FILTER子句与array_agg函数的配合使用

SELECT student,array_agg(score) FILTER (WHERE subject='algebra') AS algebra,  array_agg(score) FILTER (WHERE subject='physics') AS physics from test_scores GROUP BY student;

这样的输出是不会出现null值。

2.7、CTE表达式

2.7.1、基本CTE用法介绍

基本CTE的用法如下示例。with关键字后跟着的就是CTE表达式。

with cte AS (SELECT name, substring(name,1,5) as county_code, COUNT(*) OVER(PARTITION BY substring(name,1,5)) as cnt_tracts from gg)   SELECT max(name) as last_tract,county_code,cnt_tracts FROM cte WHERE cnt_tracts > 10 GROUP BY county_code,cnt_tracts;

CTE表达式的名称是cte,其本体是由一个select语句定义出来的,查询字段列表中包含name,county_code,cnt_tracts三个列。外围SQL语句会将CTE作为一个临时表来使用。

2.7.2、可写CTE用法介绍

它扩展了CTE的功能范畴,从只读扩展为可写。下面示例来演示此功能,首先创建一个子表:

CREATE TABLE logs_2011_01_02(PRIMARY KEY (log_id), CONSTRAINT chk CHECK (log_ts >= '2011-01-01' AND log_ts < '2011-03-01')) INHERITS (logs_2011);

要指定命名约束,使用关键字CONSTRAINT,后跟标识符以及check约束定义。

使用可写CTE将数据从一个分支移动到另一个分支

WITH t as (DELETE FROM ONLY logs_2011 WHERE log_ts < '2011-03-01' RETURNING *) INSERT INTO logs_2011_01_02 SELECT * from t;

2.8、lateral横向关联语法

示例:

select * from census.facts L inner join LATERAL (select * from census.lu_fact_types where category=CASE WHEN L.yr=2011 THEN 'Housing' ELSE category END) R ON L.fact_type_id=R.fact_type_id;

通过使用LATERAL语法可以在一个from子句中跨两个表共享多列中的数据。但有个限制就是仅支持单向共享,即右侧的表可以提取左侧表中的数据,但反过来不行。

 

 

 

 

postgresql实现多表关联删除性能分析 目录 使用delete using的写法 delete using多表关联删除性能分析 exists多表关联删除性能分析 总结 导读:最近在进行sql编写时,发现delete +using性能并不高,这篇文章主要通过执行计划对多表关联删除操作进行性能分析,并给出另一种高性能exists关联删除的方法,具有很好的参考价值,希望对大家有所帮助。 postgresql特有一种多表关联删除的写法,使用delete using语法。本人公司所使用的是Gauss DB分布式数据库,其基于p... 阅读详情

相关推荐

postgreSQL数据库常用语法

postgreSQL常用语法 1、CRUD增删改查 创建用户角色 create user ldc with password 'ldc-root'; 创建数据库 create DATABASE school_info ENCODING ='utf-8' --指定字符集 TABLESPACE = pg_default owner ldc; --设置数据库所有者 grant all privileges on database school_info to ldc; --将 schoo

LDC,公众号【轻松学编程】 5187

PostgreSQL 删除重复数据

本文介绍几种方法删除PostgreSQL表中的重复数据记录。 准备数据 创建 basket 表: CREATE TABLE basket( id SERIAL PRIMARY KEY, fruit VARCHAR(50) NOT NULL ); 插入示例数据: INSERT INTO basket(fruit) values('apple'); INSERT INTO basket(fruit) values('apple'); INSERT INTO basket(fruit) v.

neweastsun的专栏 9552

Synopys 验证系列-EDA 总结

VC Formal 解决方案包括一整套正式应用程序 (App),包括属性验证 (FPV)、自动提取属性 (AEP)、覆盖分析器 (FCA)、连接性检查 (CC)、时序等效性检查 (SEQ)、寄存器验证 (FRV)、测试平台分析仪 (FTA)、形式导航器 (NAV) 以及用于验证标准总线协议的一组断言 IP (AIP)。

qq_41289491的博客 1427

postgresql 基本语法

postgresql 基本语法 postgresql数据库创建/修改/删除等写入类代码语法总结: 1,创建库 2,创建/删除表   2.1 创建表  create table myTableName   2.2 如果表不存在则创建表 create table if not exists myTableName   2.3 删除表 drop table if exists m...

大牛在路上的博客 1万+

骁龙X Elite笔记本重装Windows 11 Arm64系统完整指南与避坑手册

UEFI安全启动和Arm64架构是理解现代计算设备系统部署的基础。UEFI取代传统BIOS,提供了更安全的启动环境和模块化固件接口,而Arm64架构则以其高能效特性,在移动和新兴PC领域日益重要。其技术价值在于为设备带来更快的启动速度、更强的安全防护以及更优的功耗表现。在应用场景上,这直接关系到搭载高通骁龙X Elite等Arm处理器的笔记本电脑的系统安装与维护。对于这类设备,重装系统远非插入通用安装盘那么简单,核心挑战在于必须使用专为Arm64编译的Windows镜像,并需提前集成芯片组、网络等硬件的专属

weixin_33428613的博客 478

从零开始用STM32驱动RGB屏:配置PCLK、DE同步信号的避坑指南

本文详细介绍了如何使用STM32驱动RGB接口LCD屏幕,重点解析了PCLK配置、同步信号极性和DE使能等关键参数的设置方法。通过实战代码示例和常见问题排查指南,帮助开发者避免常见配置错误,实现稳定的显示效果。特别针对800x480 IPS屏提供了优化建议和调试技巧。

sky77的博客 539

第7章 PostgreSQL的特色SQL语法

第7章 PostgreSQL的特色SQL语法 7.1 视图 如果你的应用场景需要反复执行这种关联查询语句,可以考虑创建一个视图。 简单来说,视图就是持久化存储在数据库中的一个查询语句。优点是在表的本体之上增加了一个访问层,简化了权限管理且使得业务逻辑抽象更容易,缺点就是太麻烦。 如果你的视图是基于单表的,并且视图字段中包含了基础表的主键字段,那么就可以直接对此视图执行 UPDATE 操作,视图的基础表数据将随之更新。 物化视图将视图逻辑映射后的数据记录实际存储下来,这样访问物化视图时就省略了视图底层 SQL

qq_42226855的博客 1531

Windows 11下用Ollama一键部署DeepSeek-R1大模型(附8B/14B版本选择建议)

本文详细介绍了在Windows 11环境下使用Ollama工具一键部署DeepSeek-R1大模型的完整指南,包括8B和14B版本的选择建议。通过硬件评估、安装配置、性能优化等步骤,帮助开发者高效实现本地部署,提升AI应用体验。

weixin_29079643的博客 272

【PostgreSQL从零到精通】第32篇:postgresql特色功能拾遗——数组、并行查询与fdw

PostgreSQL数组操作与并行查询功能详解 PostgreSQL作为功能丰富的数据库系统,提供了强大的数组类型支持和高效的并行查询能力。在数组操作方面,PostgreSQL原生支持多种数组类型(整型、文本等),提供了完整的数组创建、查询、修改和函数操作方案,包括元素访问、数组拼接、去重等实用功能,还能利用GIN索引优化数组查询性能。在查询性能方面,PostgreSQL从9.6版本开始引入并行查询机制,通过多CPU核心协同工作显著提升大查询效率,支持包括顺序扫描、聚合、JOIN等多种操作的并行执行,并提供

xyghehehehe的专栏 52

保姆级教程:从OrthoFinder到CAFE5,手把手搞定基因家族收缩扩张分析(附完整代码与避坑指南)

本文提供从OrthoFinder到CAFE5的基因家族收缩扩张分析全流程教程,涵盖数据预处理、系统发育树准备、CAFE5运行与参数优化等关键步骤。通过详细代码示例和避坑指南,帮助研究者高效完成基因家族进化分析,特别适合生物信息学初学者。

dianshu1593的博客 390

乐鑫科技 EchoEar 喵伴修改自定义唤醒词的方法 EchoEar喵伴、唤醒词修改、ESP32、AI萌宠、智能音箱、开发者指南

标签:乐鑫科技、EchoEar喵伴、唤醒词修改、ESP32、AI萌宠、智能音箱、开发者指南大家好,我是一名前端开发工程师,最近在玩乐鑫科技推出的时,发现它不仅萌趣十足,还能进行全双工语音交互、多模态识别,甚至能识别你的情绪和与你互动。EchoEar 喵伴是由乐鑫科技和火山引擎扣子大模型团队合作开发的,它使用乐鑫的芯片方案(ESP32 系列)+ 火山引擎扣子大模型,支持 WiFi 连接和本地处理,长记忆能力可以让它记住用户的偏好与习惯。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1880

PostgreSQL与MySQL语法差异详解:从基础到高级的实战对比

关系型数据库是数据存储与管理的核心组件,其SQL语法标准是数据操作的基础。不同数据库系统在遵循标准的同时,会发展出各自的语法特性与实现方式,这直接影响了查询的编写、性能优化和数据迁移。理解这些差异对于构建可移植、高性能的应用至关重要。PostgreSQL以其对SQL标准的严格遵循和丰富的高级功能(如窗口函数、JSONB类型)著称,而MySQL则在易用性和特定场景优化上积累了广泛实践。本文聚焦于两者在数据定义、查询操作、函数调用等核心语法层面的关键区别,例如分页查询中LIMIT与FETCH的差异、类型转换的严

weixin_30698527的博客 284

一文搞定离线环境下的RAG引擎部署

在人工智能浪潮下,技术已成为构建智能问答、文档分析和代码助手等应用的核心。然而,在许多企业场景中,出于数据安全和性能的考虑,服务器往往部署在中,并要求极致的推理效率。这给依赖外部资源的应用部署带来了巨大挑战。如何在这种严苛的环境下,完整、可靠地部署一套包含向量数据库、**高性能推理服务(vLLM)**和Python后台的复杂RAG系统呢?本文将为你提供一个,手把手教你如何使用 Docker 技术,将一套基于 Weaviate 和的 Python RAG 应用完整打包,并在离线环境中一键部署。

木鱼时刻的专栏 1242

PostgreSQL 常用 SQL 命令集合

一份全面的 PostgreSQL 常用 SQL 命令集合,包含数据库管理、表操作、数据查询、性能优化等核心功能

TOOZOOY的博客 891

NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化

本文介绍了在项目开发中实现坐标转换的方法,重点解析了两个关键函数UF_MTX4_csys_to_csys和UF_MTX4_vec3_multiply的使用。通过4个变换矩阵(transform1-4)实现工作坐标系与绝对坐标系之间的相互转换,并以圆柱体为例详细说明了坐标转换的具体实现过程,包括原点、X/Y轴方向的转换处理。相比之前采用的if-else判断方法,这种矩阵转换方式在代码复杂度和运行效率上都更具优势。

weixin_47753171的博客 599

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

终极PostgreSQL SQL格式化神器:pgFormatter完整使用指南

PostgreSQL数据库开发者必备的SQL代码美化工具pgFormatter,能够将混乱的SQL语句自动格式化为标准、易读的代码结构。无论是简单的查询语句还是复杂的存储过程,pgFormatter都能帮你快速整理代码格式,提高开发效率和代码质量。🚀 ## 什么是pgFormatter? [![pgFormatter项目图标](https://raw.gitcode.com/gh_mirro

gitblog_00764的博客 852

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

*SQL Server,PostgreSQL ,MySQL 比较

摘要:本文从C#开发者视角对比SQLServer、PostgreSQL和MySQL三大数据库。SQLServer适合企业级.NET应用,与微软生态深度集成;PostgreSQL功能丰富,支持复杂查询和高级数据类型;MySQL则适合简单Web应用。文章详细比较了三者在数据类型、事务处理、JSON支持等方面的差异,并给出C#开发最佳实践,包括连接管理、参数化查询和异步编程。最后根据应用场景提出选择建议:企业应用选SQLServer,技术驱动项目选PostgreSQL,简单Web应用选MySQL,复杂系统可采用混

leohu0723的博客 875

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

PostgreSQL与MySQL语法差异详解:从建表到高级查询的实战对比

SQL作为关系型数据库的核心查询语言,其语法差异直接影响数据库应用的开发与迁移效率。在数据库选型与跨平台开发中,理解不同数据库管理系统对SQL标准的实现差异至关重要。PostgreSQL以其严格遵循SQL标准和强大的扩展性著称,支持窗口函数、CTE、JSONB等高级特性;而MySQL则以简单易用和对Web开发友好见长,但在语法上存在较多自有扩展。这种差异不仅体现在建表时的自增主键定义(AUTO_INCREMENT vs SERIAL/IDENTITY)、字符串类型选择(VARCHAR vs TEXT)等基础

cmff98425的博客 421

PostgreSQL 安装与操作指南

- PostgreSQL(支持指定编码与表空间)WITH-- 表空间(默认 pg_default)-- MySQL 对比维度PostgreSQLMySQL默认端口54323306自增字段事务隔离级别支持 Serializable(默认 Read Committed)支持 Repeatable Read(默认 Repeatable Read)数据类型支持 JSONB、数组、地理信息仅支持基础类型,JSON 性能弱查询能力支持 CTE、并行查询、窗口函数。

m0_46589218的博客 1543

PostgreSQL 与 MySQL 全面对比区别

基础类型:完全覆盖MySQL的所有基础类型,且对数值精度、字符串长度的限制更宽松(如varchar无长度上限,仅受内存限制)。特色类型(核心优势):数组类型:支持一维/多维数组(如int[]、varchar[]),可直接对数组元素进行查询、更新(如JSON/JSONB:原生支持JSON(文本存储)和JSONB(二进制存储),JSONB支持GIN索引,可高效查询嵌套JSON数据。

sinat_20277079的博客 2318

聚焦ANSI SQL2003——新版特色

前言 结构化查询语言(SQL)自20世纪70年代以来,一直与信息科技齐头并进,因此,在商业界与产业界中,它是最广泛使用的数据库操纵语言。许多软件公司与程序开发者(包括开放源码推动者,http://www.opensource.org)均各自开发了自己的SQL方言(dialect),以便适应特定的专业需求。同时,标准版还开发了越来越多的通用功能。《SQL技术手册(第三版)》描述了每条SQL命

2358

零基础到全栈:SQL+MySQL+NoSQL+PostgreSQL+SQL Server阶梯式精通

链接:https://pan.quark.cn/s/4f0c586ebc65。链接:https://pan.quark.cn/s/59b737c8f36e。链接:https://pan.quark.cn/s/b34c461e8f0c。链接:https://pan.quark.cn/s/a6af12000537。链接:https://pan.quark.cn/s/4c057efe0c71。• 微软企业级解决方案:SSIS/SSRS/SSAS集成。我用夸克网盘分享了「SQL-SQL Server」

2501_90713682的博客 832

PostgreSQL 语法

PostgreSQL 完全兼容 ANSI SQL 标准并提供了丰富的高级特性。本文全面解析 PostgreSQL 语法,从基础 CRUD 操作到高级功能:包括 JSON/JSONB 处理(支持索引与操作符)、数组操作、窗口函数、递归 CTE 查询、高效分页方案(Keyset Pagination)。还涵盖事务控制、PL/pgSQL 函数、物化视图以及多种索引类型(B树、GIN、GiST 等)的应用场景。教程附带实用示例代码和性能优化建议,帮助开发者掌握 PostgreSQL 的核心功能与最佳实践。

m0_57545130的博客 960

PostgreSQL中文手册完整指南:从入门到精通

PostgreSQL中文手册翻译项目是PostgreSQL中国用户会组织的重要开源项目,旨在为中文用户提供完整、准确的中文版PostgreSQL官方文档。这个项目通过社区协作方式,将PostgreSQL各个版本的官方手册翻译成中文,帮助开发者更好地学习和使用PostgreSQL数据库系统。 ## 📚 项目概述与核心价值 PostgreSQL中文手册翻译项目始于2013年12月,由Postgr

gitblog_00980的博客 1480

PostgreSQL入门指南:安装、基础操作与特色功能

关系型数据库是现代应用开发的核心组件,PostgreSQL作为功能最强大的开源关系数据库,以其标准兼容性和扩展性著称。其核心原理基于ACID事务和多版本并发控制(MVCC),支持JSON、GIS等高级数据类型。在技术价值方面,PostgreSQL提供了完整的SQL标准支持,允许自定义数据类型和函数,特别适合处理复杂查询场景。典型的应用场景包括金融系统、地理信息系统和内容管理平台。本文将重点介绍PostgreSQL的安装方法、基础SQL操作,以及JSON支持、全文搜索等特色功能,帮助开发者快速上手这一企业级数

weixin_29313239的博客 311

PostgreSQL兼容性深度解析:QuestDB的SQL扩展功能

QuestDB是一款专为时序数据设计的高性能开源数据库,它不仅提供了完整的PostgreSQL协议兼容性,还扩展了强大的时序SQL功能。作为时序数据库领域的佼佼者,QuestDB通过PostgreSQL Wire Protocol实现了与现有生态系统的无缝集成,同时提供了专为时序数据分析优化的SQL扩展功能。 ## 🚀 QuestDB的PostgreSQL协议兼容性 QuestDB完全支持P

gitblog_00063的博客 486
上一篇: 高可用方案之PostgreSQL的逻辑复制和物理复制(二)
下一篇: sql中的in与not in,exists与not exists的区别
Glyann
博客等级 码龄9年 592粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值