PostgreSQL学习笔记(五):数据操作

这篇博客详细介绍了PostgreSQL中的数据操作,包括插入、更新、删除和查询,特别是查询部分,涉及到集合函数、连接查询、子查询和正则表达式。同时,文章也深入讨论了索引的相关知识,如索引分类、设计原则和各种索引操作,为数据库性能优化提供了实用指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 数据操作

1.1 插入数据

insert into <tablename> values (a,b,c,d,...);
insert into <tablename>(columnname1,columnname2,...) values(a,b,...);
1.1.1 插入多条数据
insert into <tablename> values (a,b,c,d,...),(a1,b1,c1,d1,...),...;
1.1.2 将查询结果插入表
insert into <tablename>(columnname1,columnname2,...) select (columnname3,columnname4,...) from <atablename> where <condition>;

1.2 更新数据

update <tablename> set columnname1=xxx,columnname2=xxx,... where <condition>;

1.3 删除数据

delete from <tablename> [where <condition>];

1.4 查询数据

select * from <tablename>;
select columnname1,columnname2 from <tablename>;
select * from <tablename> where columname=xxx and columnname2=xxx;
1.4.1 集合函数查询
  • COUNT()

    select count(*) from <tablename> where <condition>;
    select columnname,count(*) from <tablename> where <condition> group by columnname;
    
  • AVG()

  • MAX()

  • MIN()

  • SUM()

1.4.2 连接查询
1.4.2.1 内连接
select * from batch_job_execution e,batch_job_instance i where e.job_instance_id=i.job_instance_id;
1.4.2.2 外连接
  • LEFT JOIN:返回左表全部数据以及右表中连接字段相等的数据。

    select tablename1.columnname...,tablename2.columnname... from tablename1 left outer join tablename2 on tablename1.columnname=tablename2.columnname;
    

    例如:

    select e.job_instance_id,e.job_execution_id,p.key_name,p.string_val from batch_job_execution e left outer join batch_job_execution_params p on e.job_execution_id=p.job_execution_id;
    
  • RIGHT JOIN:返回右表全部数据以及左表中连接字段相等的数据。

1.4.3 子查询
1.4.3.1 ANY

返回tablename1的columnname1中的字段>tablename2中columname2的字段中任意一个值的数据。

select * from tablename1 where columnname1> ANY (select columname2 from tablename2);
1.4.3.2 ALL

返回tablename1的columnname1中的字段>tablename2中columname2的字段中所有值的数据

1.4.3.3 IN
select * from tablename1 where columnname1 in (select columnname2 from tablename2);
1.4.3.4 EXISTS

EXISTS 后面跟子查询语句,如果子查询语句至少返回一行数据,则执行外层查询语句,否则不执行。

NOT EXISTS 后面跟子查询语句,如果子查询语句没有返回行,则执行外层查询语句,否则不执行。

select * from tablename1 where exists(select * from tablename2 where <condition>);
select * from tablename1 where not exists(select * from tablename2 where <condition>);
1.4.4 合并查询结果
select * from tablename1 union [all] select * from tablename2;
1.4.5 正则表达式查询
  • ~ :匹配正则表达式,区分大小写
  • ~*:匹配正则表达式,不区分大小写
  • !~:不匹配正则表达式,区分大小写
  • !~*:不匹配正则表达式,不区分大小写。
select * from <tablename> where columname [~/~*/!~/!~*] '正则表达式'

2 索引

2.1 索引分类

postgre的索引包括 b-treehashGiSTGIN。常用btree,hash只能用于=

2.2 索引设计原则

  • 不要在数据量少的表中建索引,有可能直接查询时间比遍历索引时间更短;
  • 不要建立过多的索引,只根据需要建索引,否则会影响插入、删除、修改速度,还会占用磁盘空间;
  • 不要对枚举类型的字段或者值类型少的字段建索引,否则不但不会提高查询效率,还会影响更新效率;
  • 在频繁进行排序或分组的列上建立索引时,如果待排序列有多个,可以创建联合索引。
  • 如果某一列的数据具有唯一性,可以创建唯一索引。

2.3 索引操作

create [unique|fulltext|spatial] INDEX <indexname> on <tablename> (colname[length],...) [ASC|DESC]
2.3.1 创建普通索引
create index <indexname> on <tablename>(columnname);
2.3.2 创建唯一索引
create unique index <indexname> on <tablename>(columnname);
2.3.3 创建联合索引
create index <indexname> on <tablename>(columnname1,columnname2,...);
2.3.4 修改索引名称
alter index <indexname> rename to <newindexname>;
2.3.5 删除索引
drop index <indexname>;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值