postgreSQL常用语法

1、CRUD增删改查

创建用户角色

create  user ldc  with password 'ldc-';

创建数据库

create DATABASE school_info
ENCODING  ='utf-8'  --指定字符集
TABLESPACE = pg_default
owner ldc; --设置数据库所有者
grant all privileges on database school_info  to ldc;  --将 school_info 数据库的所有权限赋予 ldc

创建表

-- 创建班级表
create table class_info
(id                    serial not nullconstraint class_info_pkprimary key,name                  varchar,write_date            timestamp
);comment on table class_info is '班级表';
comment on column class_info.name is '班级名称';
comment on column class_info.write_date is '修改时间';
alter table class_info  owner to ldc;   -- 修改表拥有者为ldc--创建表
-- 创建学生表,id自增
-- id      serial not null  表示id自增
-- id      integer not null  表示id不自增
create table student
(id                    serial not nullconstraint student_pkprimary key,name                  varchar,class_id             integer  references "class_info"("id"),height                numeric,weight                numeric,write_date            timestamp
);comment on table student is '学生表';
comment on column student.name is '名称';
comment on column student.class_id is '班级ID';
comment on column student.height is '身高';
comment on column student.weight is '体重';
comment on column student.write_date is '修改时间';
alter table student  owner to ldc;   -- 修改表拥有者为ldc

增加记录

insert into "class_info" (name,write_date) values('高一八班', '2010-09-09 11:33:00');insert into "student" (name,class_id, height, weight, write_date) values ('小梁',1,160,50, '2010-09-09 12:33:00'),('小刘',1,155,50, '2010-10-08 13:33:00'),('小强',1,175,60, '2010-11-12 13:33:00');

删除表

-- 如果表存在就先删除
drop table if exists student;

删除记录

delete from student where name='小梁'

删除字段

alter table 表名 drop column 列名 ;
比如
alter table student drop column sex ;

更新记录

update student set name='大梁' where id=3

新增或更新

--如果id冲突就更新
insert into student(id, name,class_id) values(1,'小兰',1)on conflict(id) do update set name ='小芳';--如果id冲突就什么也不做
insert into  student(id, name,class_id)values(3,'小明',1)on conflict(id) do nothing;

联合子集更新


# 联合子集更新,把sale_order_line的name连接换行符,然后按id更新到表a_test中对应的name
update a_test set name=array_to_string(array(select name from sale_order_line where order_id=a_test.id),'<br/>');

把一个表中的数据插入到另一个表中

--把一个表中的数据插入到另一个表中
insert into 目标表名 (column1,column2,columnn) select value1,value2,valuen from  源表名
比如:
insert into student (name, classs_name,create_date) select  student_name as name, class_name, now() from class_table;

增加字段

alter table student add column sex bool;

查看用户角色

select * from pg_roles;

查看当前时间

now()
select now()

查看表所有字段

select * from information_schema.columns where table_schema='public' and table_name='student';

查看数据库所有表名

select tablename from pg_tables where schemaname='public'

2、按条件查询

升降序

-- 对查询结果按id降序显示
select * from student order by id desc-- 对查询结果按id升序显示
select * from student order by id asc

转义字符

-- 转义字符, 查找name中包含单引号的记录
select * from student where name like  E'%\'%'

查看表记录总数

方式一:

select relname as TABLE_NAME, reltuples as rowCounts from pg_class where relkind = 'r' and relnamespace = (select oid from pg_namespace where nspname='public') order by rowCounts desc;

方式二:

select count(*) from student;

3、常用函数

array:将结果转换为数组

SELECT array(SELECT "name" FROM student);

结果:{小芳,小刘,大梁}

array_to_string:将数组合并为字符串

select array_to_string(array[1,2,3], ',');

结果:1,2,3

cast:类型转换

select cast(id as varchar) from student;  --把id 从integer转成varchar

concat:字符串拼接

select
concat('学生:id=', cast(s.id as varchar), '姓名:',s.name, '班级:',ci.name)
from student as s
left join class_info as ci on ci.id=s.class_id

结果:学生:id=1姓名:小芳班级:高一八班

concat_ws:多字符串拼接(不用转换类型)

select
concat_ws('学生:id=', s.id, '姓名:',s.name, '班级:',ci.name)
from student as s
left join class_info as ci on ci.id=s.class_id

substring:字符截取

select substring('abcd',1,2); -- 表示下标从1开始,截取2个字符

结果:ab

row_number():定义行编号

--对行记录定义行编号,使用函数ROW_NUMBER()
select           ROW_NUMBER() OVER (ORDER BY id desc) AS sequence_number,id,name
fromstudent

array_agg:把表达式变成一个数组

-- 名称降序然后组合成数组
select array_agg(name order by name asc) from student

结果:{大梁,小芳,小刘}

unnest:一行变多行

select unnest(array_agg(name order by name asc)) from student

结果:{大梁,小芳,小刘} ->

大梁

小芳

小刘

array:把结果变成数组类型

select ARRAY(select unnest(array_agg(name order by name asc))) from student

结果:{大梁,小芳,小刘}

合并查询同一列的多条记录

# PostgreSQL合并查询同一列的多条记录,针对一对多,多对多字段
比如表:id   name
1    小明
1    小红                     id   name
1    小亮        -->          1    小明,小亮,小红
2    小强                     2    小强,小王
2    小王SELECT id, array_to_string(ARRAY(SELECT unnest(array_agg(name order by name desc))),',') AS all_name
FROM  student
GROUP BY id;

to_char:类型转换

select to_char(write_date, 'yyyy-MM-dd hh24:MI:ss') from student

case:枚举

--case语句
select
case when score > 80 and score < 90 then '良'when score > 90 then '优秀'
else '中'
end as result
from student;

with :临时表

--临时表、字符串合并、类型转换、时间格式转换、当前时间
WITH TEMP AS ( SELECT CAST (concat (write_date, '-01' ) AS TIMESTAMP ) AS account_period_time FROM student AS s )
SELECTaccount_period_time,to_char(CURRENT_DATE,'yyyy-MM-dd hh24:MI:ss') as current_date,to_char( account_period_time, 'yyyy' ) as year,to_char( account_period_time, 'MM' ) as month,to_char( account_period_time, 'dd' ) as day
FROM TEMP

结果:

account_period_time  current_date        year    month   day
2019-06-01 0:00:00  2020-06-24 00:00:00 2019     06      01
2019-06-01 0:00:00  2020-06-24 00:00:00 2019     06      01

多个临时表

# 多个临时表
WITH temp_student AS ( SELECT ID, NAME, sex FROM student WHERE sex = TRUE ),
temp_class AS (SELECTID,NAME,student_id,teacher_idFROMthe_class ),temp_teacher AS (SELECT ID,NAME,age FROMteacher ) SELECTts.NAME AS student_name,tc.NAME AS class_name,te.NAME AS teacher_namefrom temp_student as tsLEFT JOIN temp_class AS tc ON tc.student_id = ts.ID  LEFT JOIN teacher AS te ON te.id = tc.teacher_id

coalesce:返回参数中的第一个非null的值

-- null转成有意义的值
select coalesce(name, '') as name from student;  --name为null,就转为空字符串

4、其它

# 保留重复记录中的最小id的SQL语句
select min(id) as id,co1,co2 from test group by co1,co2# 使用 interval 时间相加减(+/-)
当前时间 + 10秒,
select to_char(now() + interval '10 second', 'yyyy-mm-dd hh24:mi:ss')  as reqDate from account_period;
当前时间 - 10秒
select to_char(now() + interval '-10 second', 'yyyy-mm-dd hh24:mi:ss')  as reqDate from account_period;当前时间 + 10分,
select to_char(now() + interval '10 minute', 'yyyy-mm-dd hh24:mi:ss')  as reqDate  from account_period;当前时间 + 10时,
select to_char(now() + interval '10 hour', 'yyyy-mm-dd hh24:mi:ss')  as reqDate from account_period;当前时间 + 10天,
select to_char(now() + interval '10 day', 'yyyy-mm-dd hh24:mi:ss')  as reqDate from account_period;当前时间 + 10年,
select to_char(now() + interval '10 year', 'yyyy-mm-dd hh24:mi:ss')  as reqDate from account_period;# 判断字段是否全为数字
select '1234' ~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$'
select '1234a' ~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$'
select * from student where score  ~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$'

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

postgreSQL数据库常用语法相关推荐

  1. PostgreSQL 数据库常用语法总结

    不同于Mysql,数据库Postgresql,在使用上语法还是有区别,以下记录常用的语法命令. 数据与字段类型 数据类型 分类 说明 基本数据类型 数据库内置数据类型,例如integer.char.v ...

  2. Oraclle数据库常用语法

    Oracle数据库常用语法 基本 --新建表: create table table1( id varchar(300) primary key, name varchar(200) not null ...

  3. MySQL和POSTGRESQL的常用语法区别

    不一样的地方用红色标记了出来,供大家参考. 转载于: MySQL和PostgreSQL的常用语法差异

  4. HANA数据库常用语法记录(不定期更新)

    HANA数据库常用语法记录(不定期更新) 增 -- 2021/06/24 -- Add column to a table ALTER TABLE TEPMLATE ADD (ID BIGINT); ...

  5. MySQL和PostgreSQL的常用语法差异

    背景 在去年的DBMS评比中,PostgreSQL夺冠,PostgreSQL一直保持上升姿态,越来越多的客户选择使用PostgreSQL,还有一部分客户从MySQL迁往PostgreSQL,那Post ...

  6. oracle数据库中常用语法,oracle数据库常用语法(中文注释版)

    -- 查看系统所有变量值 show all -- 显示当前连接用户 show user -- 显示表结构 desc 表名 -- 显示错误 show error -- 退出 exit; 表空间是数据库中 ...

  7. db2数据库常用语法及命令

    db2数据库 db2 导出表数据 db2 "export to t_user.del of del select * from t_user"; db2 导入数据 db2 &quo ...

  8. 数据库常用语法-查询和函数-附sql练习脚本

    致读者: 博主是一名数据科学与大数据专业大二的学生,真正的一个互联网萌新,写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样处于困惑的读者.由于水平有限,博客中难免会有一些错误 ...

  9. mysql数据库名语法_mysql数据库常用语法

    1)登录mysql数据库. mysql –uroot –poldboy123 mysql 2) 查看当前登录的用户. selectuser(); 3) 创建数据库oldboy,并查看已建库完整语句. ...

最新文章

  1. python学习札记20210123
  2. kafka消费者如何读同一生产者消息_Kafka消费者生产者实例
  3. spring 通过EsClientFactory注入elasticsearch
  4. Android之走手机流量让电脑能上网几种方法
  5. python读取文档中有很多指标的数据 写成矩阵_图像处理与特征提取 —— 从 MATLAB 到 Python(一)图像、矩阵与数据的读写...
  6. UVA12015 Google is Feeling Lucky【最值+排序】
  7. 未来五年的全球绿色数据中心市场的增长趋势和预测
  8. display:inline的用法
  9. 我笑了一天的签名。。。
  10. 普通IO口红外线接收(不用外部中断)
  11. 猪齿鱼2.0版本发布,解锁更多新特性,提升研发管理效率
  12. 网易面试题,小易沉迷游戏
  13. 小i聊天机器人自定义应用
  14. python的数据处理
  15. oracle 中的递归查询
  16. 从零开始的unity2017笔记【2D】(【二】角色动画)
  17. 操作系统中怎么预防死锁呢?简单列举几种方法!
  18. 大家都怎么评价自己的研究生导师?
  19. 在linux中播放mp3文件格式,如何在Ubuntu中播放MP3
  20. 使用WordPress插件自动实现百度收录查询

热门文章

  1. Visual Studio中使用开源二维码QR库libqr
  2. 微软面试题:利用天平砝码,三次将140克的盐 分成50、90克两份?
  3. 一文弄懂Python中的*args 和 **kwargs
  4. 月薪 3500 的程序员最终是如何实现月入百万的?
  5. 微信小程序多图片上传全栈实战
  6. 唐迟阅读真题2010
  7. 模电学习7. 三极管特性曲线与静态工作点
  8. word2007插入分节符(奇数页)后自动变成分节符(下一页)的解决办法
  9. vue的diff算法原理
  10. 再见,VLOOKUP!66个经典Excel数据分析、可视化神技汇总,付费搞来的,一会儿删...