PgSql基础练习

  • 基本语法
--分页offset 和limit 位置可以互换 不影响结果
select * from jinxudong.t_student offset 0 limit 2;
select * from jinxudong.t_student limit 2 offset 0;

--表明加别名 用as 不用as 都可以
select * from jinxudong.t_student as a  where a.id<23 limit 2 offset 0;
select * from jinxudong.t_student  a  where a.id<23 limit 2 offset 0;

--列明别名用as 和不用as 都可以 且都是小写
select a.id as D,a.address dizhi from jinxudong.t_student a where a.id<33
and address='beijing'
limit 10;

--查看执行计划
explain
select a.id as D,a.address dizhi from jinxudong.t_student a where
a.id>42
and address like '%张%'
limit 10 offset 0;
--创建索引
create index index_address on jinxudong.t_student(address);

-- 查看索引 直接表名 不用加schemas
select * from pg_indexes where tablename='t_student';

-- 删除索引 必须有schemas
drop index jinxudong.i_address;

pgsql可以在Btree索引上指定操作符:text_pattern_ops、varchar_pattern_ops和 bpchar_pattern_ops,它们分别对应字段类型text、varchar和 char,官方解释为“它们与默认操作符类的区别是值的比较是严格按照字符进行而不是根据区域相关的排序规则。这使得这些操作符类适合于当一个数据库没有使用标准“C”区域时,被使用在涉及模式匹配表达式(LIKE或POSIX正则表达式)的查询中

--创建索引
create index index_address on jinxudong.t_student(address varchar_pattern_ops);

--再查执行计划就会走索引
explain
select a.id as D,a.address dizhi from jinxudong.t_student a where
a.id>42
and address like '张%'
limit 10 offset 0;


-- 年
select to_char(to_timestamp(1608018517000 / 1000),'yyyy');
-- 年-月
select to_char(to_timestamp(1608018517000 / 1000),'yyyy-MM');
-- 年-月-日
select to_char(to_timestamp(1608018517000 / 1000),'yyyy-MM-dd');
-- 年-月-日 时
select to_char(to_timestamp(1608018517000 / 1000),'yyyy-MM-dd HH24'); 对应JAVA 的“yyyy-MM-dd HH”
-- 年-月-日 时:分
select to_char(to_timestamp(1608018517000 / 1000),'yyyy-MM-dd HH24:MI');对应JAVA 的“yyyy-MM-dd HH:mm”
-- 年-月-日 时:分:秒
select to_char(to_timestamp(1608018517000 / 1000),'yyyy-MM-dd HH24:MI:SS');对应JAVA 的“yyyy-MM-dd HH:mm:ss”

--查询某一天日期 不走索引(字段带函数)
explain
select * from jinxudong.t_student where
to_char(create_time,'yyyy-MM-dd')='2022-08-22';
--当前时间加一天
SELECT now()::timestamp + '1 day';
--某天字符串加一天
SELECT to_timestamp('20220823','yyyyMMdd') + '1 day';
--查询某一天走索引,小于明天大于今天

--查询某一天走索引,小于明天大于等于今天
explain
select * from jinxudong.t_student where
create_time <(to_timestamp('20220822','yyyyMMdd') + '1 day') and
create_time >=to_timestamp('20220822','yyyyMMdd');


--批量写入
INSERT INTO jinxudong.movie(
name)
VALUES ('杨戬'),('沉香'),('西游记');

--do update set 插入更新
-- upsert on conflict(id) 主键或者唯一索引相同 存在则执行update
--excluded 为虚拟表 接受传过来的新值
INSERT INTO jinxudong.movie(id,
name)
VALUES (7,'悟空1'),(8,'白龙马2'),(9,'郭靖')
on conflict(id)
do update set
name=excluded.name;

-- do nothing 不做任何事情
INSERT INTO jinxudong.movie(id,
name)
VALUES (7,'悟空1'),(8,'白龙马2'),(9,'郭靖')
on conflict(id)
do nothing;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知命巅峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值