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

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>;

猜你喜欢

转载自blog.csdn.net/twypx/article/details/86069641