最新要闻
- 【世界新要闻】七彩虹进军元宇宙!推出首款免费NFT、神秘实体权益
- 每日简讯:14.5英寸杜比视界大屏!联想拯救者Y900屏幕参数公布
- 张颂文回应沙漠捡垃圾被剧组丢下:临时租车司机行为
- 【独家焦点】三星Galaxy Tab S9系列平板曝光:Ultra机型首上IP67防尘防水
- 天天通讯!女足U20国青6-0横扫菲律宾,一场大胜,往往只需要简单的战术
- 世界即时看!匈牙利舞曲第五号_匈牙利舞曲
- 2月汽车销量前8名油车仅剩2个 比亚迪宋力压特斯拉Model Y
- 每日速递:1100万元的捐赠没给 中国矿业大学起诉90后校友
- 东北大熊猫着急下班 哐哐敲铁门:网友心酸想起在美丫丫 蜂花将认养?
- 世界观点:民族品牌蜂花将认养大熊猫丫丫 官方回应属实:加快与美国办理手续
- Android 14首个公测版要来!Google I/O 2023定档5月10日
- 环球要闻:AMD狂堆缓存!锐龙9 7950X3D游戏性能遥遥领先
- 天天最新:核聚变之后 美国团队宣布突破常温超导技术:颠覆物理学
- 天天快看点丨国内手游一哥出海!腾讯《王者荣耀》正式于巴西上线
- 【环球热闻】日本双胞胎姐妹身高相差75厘米 获吉尼斯纪录认证
- 提升国民平均寿命25岁?创维汽车:让每位车主实现基本百岁人生
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
通用表表达式
通用表表达式
通用表表达式(Common Table Expression、CTE)是一个临时的查询结果或者临时表,可以 在其他 SELECT、INSERT、UPDATE 以及 DELETE 语句中使用。通用表表达式只在当前语句中 有效,类似于子查询。
(资料图)
使用 CTE 的主要好处包括:
提高复杂查询的可读性。CTE 可以将复杂查询模块化,组织成容易理解的结构。
支持递归查询。CTE 通过引用自身实现递归,可以方便地处理层次结构数据和图数据。
--临时表t 一个字段为n 括号里是表的内容with t(n) as(select 1)select * from t;
-- 也可以定义多个with t(n) as(select 1),t2(m) as(select 1)select * from t cross join t2;
相当于一个变量,可以重复使用, 后面的临时表可以应用前面临时表的变量
with t(n) as(select 1),t2(m) as(select n+1 from t)select * from t cross join t2;
with子句
--查询每个部门的平均薪资select d.department_name ,ds.avg_salfrom departments d join (select department_id,avg(salary) avg_sal from employees group by department_id) ds on d.department_id =ds.department_idwith department_avg(department_id,avg_sal) as (select department_id,avg(salary) avg_sal from employees group by department_id)select d.department_name ,department_avg.avg_salfrom departments djoin department_avgon d.department_id =department_avg.department_id;
递归
递归 CTE 允许在它的定义中进行自引用,理论上来说可以实现任何复杂的计算功能,最常 用的场景就是遍历层次结构的数据和图结构数据。
WITH RECURSIVE cte_name AS( cte_query_initial -- 初始化部分 UNION [ALL] cte_query_iterative -- 递归部分) SELECT * FROM cte_name;
- RECURSIVE 表示递归;
- cte_query_initial 是初始化查询,用于创建初始结果集;
- cte_query_iterative 是递归部分,可以引用 cte_name;
- 如果递归查询无法从上一次迭代中返回更多的数据,将会终止递归并返回结果。
一个经典的递归 CTE 案例就是生成数字序列:
with recursive t(n) as (select 1 -- 初始化union all select n+1 from t where n<10 -- 递归)select * from t
-- 组织递归举例select * from employees;with recursive emp_path(employee_id,emp_name,path_name) as (select employee_id ,first_name||last_name ,first_name||last_name from employees where manager_id isnull union all select e.employee_id ,e.first_name||e.last_name ,path_name||"-->"||e.first_name||e.last_name from employees e join emp_path p on (e.manager_id=p.employee_id))select * from emp_path
PL/pgSQL 存储过程
除了标准 SQL 语句之外,PostgreSQL 还支持使用各种过程语言(例如 PL/pgSQL、C、PL/Tcl、 PL/Python、PL/Perl、PL/Java 等 )创建复杂的过程和函数,称为存储过程(Stored Procedure) 和自定义函数(User-Defined Function)。存储过程支持许多过程元素,例如控制结构、循环和 复杂的计算。
代码块结构
[ <
其中,label 是一个可选的代码块标签,可以用于 EXIT 语句退出指定的代码块,或者限定 变量的名称;DECLARE 是一个可选的声明部分,用于定义变量;BEGIN 和 END 之间是代码主 体,也就是主要的功能代码;所有的语句都使用分号(;)结束,END 之后的分号表示代码块结 束。
-- $$ 避免引号拼接 $$用于替换单引号("),因为 PL/pgSQL 代码主体必须是字符串文本,意味着代码中所有的单引号都必须转义(重复写两次)。DO $$ DECLARE name text;BEGIN name := "PL/pgSQL"; RAISE NOTICE "Hello %!", name;END $$;
代码子块
DO $$ <>DECLARE name text;BEGIN name := "outer_block"; RAISE NOTICE "This is %", name; DECLARE name text := "sub_block"; BEGIN RAISE NOTICE "This is %", name; RAISE NOTICE "The name FROM the outer block is %", outer_block.name; END; RAISE NOTICE "This is %", name; END outer_block $$;
声明与赋值
1.变量
在使用变量之前,需要在代码的声明部分进行声明:
variable_name data_type [ NOT NULL ] [ { DEFAULT | := | = } expression ];user_id integer;quantity numeric(5) DEFAULT 0;url varchar := "http://mysite.com";
do $$declare id integer;price numeric(5,2) default 0.6;name text;beginid :=1;name :="Postgresql";raise notice "id : %" ,id;raise notice "price : %" ,price;raise notice "name : %" ,name;end;$$
除了基本的 SQL 数据类型之外,PL/pgSQL 还支持基于表的字段或行或者其他变量定义变量:
myrow tablename%ROWTYPE;myfield tablename.columnname%TYPE;
常量
DO $$ DECLARE PI CONSTANT NUMERIC := 3.14159265; radius NUMERIC;BEGIN radius := 1.0; RAISE NOTICE "The area is %", PI * radius * radius;END $$;NOTICE: The area is 3.1415926500
if语句
IF 语句可以基于条件选择性执行操作, PL/pgSQL 提供了三种形式的 IF 语句。
- IF … THEN … END IF
- IF … THEN … ELSE … END IF
- IF … THEN … ELSIF … THEN … ELSE … END IF
DO $$BEGIN IF 2 > 3 THEN RAISE NOTICE "2 大于 3"; END IF; IF 2 < 3 THEN RAISE NOTICE "2 小于 3"; END IF;END $$;NOTICE: 2 小于 3DO $$BEGIN IF 2 > 3 THEN RAISE NOTICE "2 大于 3"; ELSE RAISE NOTICE "2 小于 3"; END IF;END $$;NOTICE: 2 小于 3DO $$DECLARE i integer := 3; j integer := 3;BEGIN IF i > j THEN RAISE NOTICE "i 大于 j"; ELSIF i < j THEN RAISE NOTICE "i 小于 j"; ELSE RAISE NOTICE "i 等于 j"; END IF;END $$;NOTICE: i 等于 jDO
case语句
DO $$DECLARE i integer := 3;BEGIN CASE i WHEN 1, 2 THEN RAISE NOTICE "one or two"; WHEN 3, 4 THEN RAISE NOTICE "three or four"; ELSE RAISE NOTICE "other value"; END CASE;END $$;DO $$DECLARE i integer := 3;BEGIN CASE WHEN i BETWEEN 0 AND 10 THEN RAISE NOTICE "value is between zero and ten"; WHEN i BETWEEN 11 AND 20 THEN RAISE NOTICE "value is between eleven and twenty"; ELSE RAISE NOTICE "other value"; END CASE;END $$;
循环语句
PostgreSQL 提供 4 种循环执行命令的语句:LOOP、WHILE、FOR 和 FOREACH 循环,以 及循环控制的 EXIT 和 CONTINUE 语句。
loop
EXIT 语句用于退出循环。
CONTINUE 表示忽略后面的语句
DO $$DECLARE i integer := 0;BEGIN LOOP EXIT WHEN i = 5; i := i + 1; RAISE NOTICE "Loop: %", i; END LOOP;END $$;
while
DO $$DECLARE i integer := 0;BEGIN WHILE i < 5 LOOP i := i + 1; RAISE NOTICE "Loop: %", i; END LOOP;END $$;
FOR 循环
DO $$BEGIN FOR i IN 1..5 BY 2 LOOP RAISE NOTICE "Loop: %", i; END LOOP;END $$;NOTICE: Loop: 1NOTICE: Loop: 3NOTICE: Loop: 5FOR 循环默认从小到大进行遍历REVERSE 表示从大到小遍历;BY 用于指定每次的增量,默认为 1。
遍历查询结果集的 FOR 循环如下
[ <
DO $$DECLARE emp record;BEGIN FOR emp IN (SELECT * FROM employees LIMIT 5) LOOP RAISE NOTICE "Loop: %,%", emp.first_name, emp.last_name; END LOOP;END $$;NOTICE: Loop: Steven,KingNOTICE: Loop: Neena,KochharNOTICE: Loop: Lex,De HaanNOTICE: Loop: Alexander,HunoldNOTICE: Loop: Bruce,Ernst
FOREACH 循环 ( 数组 )
DO $$DECLARE x int;BEGIN FOREACH x IN ARRAY (ARRAY[[1,2,3],[4,5,6]]) LOOP RAISE NOTICE "x = %", x; END LOOP;END $$;NOTICE: x = 1NOTICE: x = 2NOTICE: x = 3NOTICE: x = 4NOTICE: x = 5NOTICE: x = 6DO $$DECLARE x int[];BEGIN FOREACH x SLICE 1 IN ARRAY (ARRAY[[1,2,3],[4,5,6]]) LOOP RAISE NOTICE "row = %", x; END LOOP;END $$;NOTICE: row = {1,2,3}NOTICE: row = {4,5,6}
关键词:
-
【全球独家】关于docker镜像IMAGE的备份和还原操作
关于docker中,我们可以使用dockerimage列出所有镜像,也可以加上-a其中-a,--allShowallimages(defaulthidesintermediate
来源: 通用表表达式
【全球独家】关于docker镜像IMAGE的备份和还原操作
【世界新要闻】七彩虹进军元宇宙!推出首款免费NFT、神秘实体权益
每日简讯:14.5英寸杜比视界大屏!联想拯救者Y900屏幕参数公布
张颂文回应沙漠捡垃圾被剧组丢下:临时租车司机行为
【独家焦点】三星Galaxy Tab S9系列平板曝光:Ultra机型首上IP67防尘防水
天天通讯!女足U20国青6-0横扫菲律宾,一场大胜,往往只需要简单的战术
世界即时看!匈牙利舞曲第五号_匈牙利舞曲
2月汽车销量前8名油车仅剩2个 比亚迪宋力压特斯拉Model Y
每日速递:1100万元的捐赠没给 中国矿业大学起诉90后校友
东北大熊猫着急下班 哐哐敲铁门:网友心酸想起在美丫丫 蜂花将认养?
世界观点:民族品牌蜂花将认养大熊猫丫丫 官方回应属实:加快与美国办理手续
Android 14首个公测版要来!Google I/O 2023定档5月10日
全球速讯:内网穿透的高性能的反向代理应用FRP-自定义404错误页【实践可行版】
明解Redis(一)概述
环球要闻:AMD狂堆缓存!锐龙9 7950X3D游戏性能遥遥领先
天天最新:核聚变之后 美国团队宣布突破常温超导技术:颠覆物理学
天天快看点丨国内手游一哥出海!腾讯《王者荣耀》正式于巴西上线
【环球热闻】日本双胞胎姐妹身高相差75厘米 获吉尼斯纪录认证
提升国民平均寿命25岁?创维汽车:让每位车主实现基本百岁人生
全球微速讯:Node 非服务脚本调试
分享一个可以早点下班的开发小技巧
【环球报资讯】SpringBoot启动控制台的banner是怎么回事
环球新资讯:AppUploader教程:如何注册账号并激活AppUploader
全球快看点丨Android工程接入UnityLibrary工程
【聚看点】存储一哥扛不住了!三星在售最旗舰SSD 990 PRO降至史低价
天天速看:15万买特斯拉 那得多“毛坯”?成本降50%是文字游戏
原生PCIe 5.0更安全!酷冷至尊GX1250 GOLD电源评测:满载电压偏移<0.1%
环球今热点:不再烧主板!ROG 2023系列内置环境光传感器:见光自动断电
索尼PS中国发文祝4位游戏女角节日快乐:蒂法、希里等出镜
全球微头条丨潍坊市寒亭区举行庆“三八”专场招聘会
k8s-安全机制
Docker全家桶入门到进阶教程,Docker快速上手
焦点滚动:Docker入门到高级教程(一)Docker 的用途
当前热议!卡车
前沿热点:小心上当 国外免费软件被不良人士玩坏:收费299
环球消息!比亚迪开通苹果NFC数字车钥匙功能 两款车型已支持
魅族换新Logo了!魅族20系列官宣定档3月30日
每日速讯:未获版号就擅自出版网络游戏 重庆一公司被罚45万元
在鸡面前画条直线为何它呆住不动 科普:只是在装死
每日报道:qiankun 的使用
当前热议!Linux常用的20个命令(下)
【天天播资讯】Linux网卡驱动程序
讯息:(数据库系统概论|王珊)第十一章并发控制-第一节:并发控制概述
【环球速看料】如何轻松学习网页设计和网页编程?
当猛男遇上脱毛仪:用前抗拒、用后真香
终身质保成笑话?女车主购入威马新车三年维保无配件
Win11不支持拖动任务栏 强行修改注册表后:画面尴尬了
快播:爱吃辣的人不容易得糖尿病?是真的吗?
天天观焦点:你的护照又升值了!我国与马尔代夫互免签生效 浏览量暴增200%
环球时讯:凌云B股(900957)3月8日主力资金净卖出558.00元
全球观察:跨境电商卖家如何应对拒付、盗卡
热推荐:前端设计模式——观察者模式
热消息:代码审计之旅之百家CMS
环球头条:Paxos算法理解与java实现
环球消息!5、Redis慢日志和key有效期
今日聚焦!锐龙7000无缘单条48GB DDR5内存!点亮后却无法启动
每日热门:卖断货!湖北最强汽车补贴火了 有人“从业十年没见过”
每日热门:4.5级后广东河源再次发生3.4级地震:官方科普地震来了怎么办
全球观察:全年出货量仅2.6亿 PC电脑透心凉:复苏要等Win12
全球通讯!ChatGPT版佛祖爆火出圈:施主、说出你的烦恼
GO语言学习笔记-数据篇 Study for Go ! Chapter four - Data
全球速读:Go 数据结构
精彩看点:如何搞定MySQL锁(全局锁、表级锁、行级锁)?这篇文章告诉你答案!太TMD详细了!!!
最新资讯:vue组件更新引起组件更新的原因,如何引发组件的更新
播报:【JavaScript UI库和框架】上海道宁与Webix为您提供用于跨平台Web应用程序开发的JS框架及UI小部件
全球速看:平板电脑怎么连接wifi
8元保号没了!中国移动广东出手:最便宜4G套餐撤掉 同步下架5G全家享套餐
319元 小米米家智能直流变频塔扇2上市:吹一夏天电费仅0.65元
快看点丨燃油、纯电、混动:买轻卡你会选择谁?
柳宗元最著名的十首诗是什么?柳宗元在柳州的故事
天天通讯!基德谈欧文末节独砍17分:这就是他 他喜欢帮助他的球队赢球
天天微速讯:3张思维导图读懂 《钢铁是怎样炼成的》
VUE定时器任务(每天12点执行)
信息:mysql invalid conn排查
全球观速讯丨CNStack 多集群服务:基于 OCM 打造完善的集群管理能力
即时看!关于docker中-容器的管理操作-删除
韩国西江大学留学条件和费用是什么?韩国西江大学怎么样?
代课老师的养老保险什么时候启动?代课教师养老保险政策有哪些?
焦点热门:可抵抖音干半年!TVB淘宝直播间首播销售额达2350万
全球看点:一年脱轨1000次!美国俄亥俄州再发生铁路事故 卡车撞上火车
满满正能量!小学生拾得价值16万黄金后续:物归原主、获助学礼包
向残疾熊猫福菀泼水3游客身份未确定:初步断定为3女娃
一键开盖 耐热抗摔:哈尔斯Tritan材质单手开盖水杯15.9元发车
光棍节的由来和含义是什么?光棍节活动策划书
办公室副主任是什么级别?办公室副主任年度述职报告
手机厂商钟情的黄色配色 原来诺基亚十年前就有了
大小仅3.7GB:大佬基于Win10魔改经典WinXP系统
每日快报!为眼睛降低ISO感光度!万新偏光太阳镜大促:39.4到手 原价139元
焦点速递!跑车底盘+大电池!开了两天哪吒S 想把我的油车卖了
行走的27寸超大平板!小度推出添添闺蜜机 首发4999元
win7电脑怎么开启telnet命令?telnet命令的作用是什么?
暖暖环游世界怎么看收集度?暖暖环游世界兑换码2023
Win10系统怎么安装杜比音效驱动?杜比音效和普通音效有什么区别
中兴天机7哪个版本音质最好?中兴天机7手机参数
iphone怎么设置勿扰模式?iphone灵动岛怎么养宠物?
Liunx Vim常用命令
天天看点:C++笔记--控制语句
Windows 11提示“无法枚举容器中的对象。”
环球速读:A股异动 | 上海电影涨7% 拟收购上影元文化51%股权 拓展IP运营业务