Postgresql入门
一:创建一个数据库
create database name -- 查看数据库版本 select version();
二:创建一个新表
create table users ( id bigserial not null, username varchar, password varchar, created_at timestamp, status integer, ext json );
可以在SQL命令中自由使用空白(空格、制表符、换行符)。
(“--”)注释,任何跟在后面直到行尾的东西都会被忽略。SQL是对关键字和标识符大小写不敏感的语言,只有在标识符用双引号包围时,才保留它们的大小写。
varchar(80)指定了一个可以存储最长80个字符的任意字符串的数据类型。
int 是普通的类型
real是一种用于存储单精度浮点的类型
date类型可以自解释(类型date的列名也是date)
PostgreSQL支持标准SQL类型int,small,real,double precision、char(N)、varchar(N)、date、time、timestamp和interval。还支持其他的通用类型和丰富的几何类型。可以定制任意数量的用户自定义数据类型,因此类型名并不是语法关键字,除了SQL标准要求支持的例外。
三、在表中增加行
INSERT 语句向表中添加行:
insert into users(username, password, created_at, status, ext) VALUES ('u001', 'p001', now(), 1, '{"a": "1"}'::json)
四、查询一个表
从一个表中检索数据,SQL中的select语句就是这个用途。语句分为选择列表(列出要返回的列)、表列表(列出从中检索数据的表)以及可选的条件(指定任意的限制)。
-- 检索所有的列的数据 select * from users; -- 检索指定的列 select ext from users; -- 按照指定的列倒序检索指定的列 select ext from users order by created_at desc ;
五、表之间的连接
1. 内连接
-- 内连接 select * from users inner join account a on users.id = a.user_id;
2. 外连接
-- 左外连接 select * from users left join account a on users.id = a.user_id; -- 右外连接 select * from users right join account a on users.id = a.user_id;
六、聚集函数
PostgreSQL支持聚集函数。 一个聚集函数从多个输入行中计算出一个结果。 比如,我们有在一个行集合上计算count
(计数)、sum
(和)、avg
(均值)、max
(最大值)和min
(最小值)的函数。
-- count select count(ext ->> 'a') from users; -- sum select sum(status) from users; -- avg select avg(status) from users; -- max select max(ext ->> 'a') from users; -- min select min(ext ->> 'a') from users;
注意:
WHERE
和HAVING
的基本区别如下:WHERE
在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而HAVING
在分组和聚集之后选取分组行。因此,WHERE
子句不能包含聚集函数; 因为试图用聚集函数判断哪些行应输入给聚集运算是没有意义的。相反,HAVING
子句总是包含聚集函数(严格说来,你可以写不使用聚集的HAVING
子句, 但这样做很少有用。同样的条件用在WHERE
阶段会更有效)。
七、更新
使用update对现有的行进行更新。
update users set status = 2 where id = 3; update users set status = status + 1 where id = 3;
八、删除
使用delete对表记录进行删除
delete from users where id = 3; -- 如果没有一个限制,DELETE将从指定表中删除所有行,把它清空。做这些之前系统不会请求你确认! delete from users;