Postgresql入门(一)

284 阅读3分钟

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;

注意:

WHEREHAVING的基本区别如下: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;