ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

005.PGSQL-in、not in、exists、not exists、 using 的select查询、delete删除 使用及其效率对比

2020-07-27 16:01:14  阅读:573  来源: 互联网

标签:test0002 exists PGSQL second 005 dw rid ioc


1. select  查询 

in、not in、exists、not exists  的区别 

exists 效率远远大于 in

CREATE SEQUENCE "ioc_dw_second"."test0002_seq" 
INCREMENT 1
MINVALUE  1
MAXVALUE 9223372036854775807
START 1
CACHE 1
CYCLE ;

CREATE TABLE "ioc_dw_second"."test0002" (
  "rid" int4 NOT NULL DEFAULT nextval('"ioc_dw_second".test0002_seq'::regclass),
  "name" varchar(20) COLLATE "pg_catalog"."default",
  "update_time" timestamp(6) DEFAULT pg_systimestamp(),
  CONSTRAINT "test0002_pkey" PRIMARY KEY ("rid")
)
;

 

 表  a   表 b 

 

 

 

exists 

SELECT   *   FROM   ioc_dw_second.test0001  a  
WHERE   exists    (SELECT   *   FROM ioc_dw_second.test0002  b    WHERE   a.rid =b.rid )

 

 

in  

SELECT   *   FROM   ioc_dw_second.test0001  a  
WHERE  rid  in     (SELECT   rid  FROM ioc_dw_second.test0002  b    )

 

 

 

 

 

not exists

 

SELECT   *   FROM   ioc_dw_second.test0001  a  
WHERE  not  exists    (SELECT   *   FROM ioc_dw_second.test0002  b    WHERE   a.rid =b.rid )

 

 

2.  delete 删除

 in  和 using   的区别

 

delete from ioc_dw_second.test0001 a
using ioc_dw_second.test0002 b
where a.rid = b.rid
;

 

 

使用using删除重复数据

使用using对name去重,只保留id最大的
using 有点类似子查询,可以关联包含在where子语句中的字段的表。
本例子中的a.id<b.id就是筛选出a表中id小于b表中id的记录。

delete from test a using test b where a.id<b.id and a.name=b.name;

 

标签:test0002,exists,PGSQL,second,005,dw,rid,ioc
来源: https://www.cnblogs.com/star521/p/13385705.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有