PostgreSQL

PostgreSQL数据库学习笔记

基本数据类型

在开始学语法之前,还是先要看一下他的基本数据类型都有哪些:

  • 数值数据类型
  • 字符串数据类型
  • 日期/时间数据类型

数值数据类型

名称 描述 存储大小 范围
smallint 存储整数,小范围 2字节 -32768 至 +32767
integer 存储整数。使用这个类型可存储典型的整数 4字节 -2147483648 至 +2147483647
bigint 存储整数,大范围。 8字节 -9223372036854775808 至 9223372036854775807
decimal 用户指定的精度,精确 变量 小数点前最多为131072个数字; 小数点后最多为16383个数字。
numeric 用户指定的精度,精确 变量 小数点前最多为131072个数字; 小数点后最多为16383个数字。
real 可变精度,不精确 4字节 6位数字精度
double 可变精度,不精确 8字节 15位数字精度
serial 自动递增整数 4字节 1 至 2147483647
bigserial 大的自动递增整数 8字节 1 至 9223372036854775807

字符串数据类型

数据类型 描述
char(size) 这里size是要存储的字符数。固定长度字符串,右边的空格填充到相等大小的字符。
character(size) 这里size是要存储的字符数。 固定长度字符串。 右边的空格填充到相等大小的字符。
varchar(size) 这里size是要存储的字符数。 可变长度字符串。
character varying(size) 这里size是要存储的字符数。 可变长度字符串。
text 可变长度字符串。

日期/时间数据类型

名称 描述 存储大小 最小值 最大值 解析度
timestamp [ (p) ] [不带时区 ] 日期和时间(无时区) 8字节 4713 bc 294276 ad 1微秒/14位数
timestamp [ (p) ]带时区 包括日期和时间,带时区 8字节 4713 bc 294276 ad
date 日期(没有时间) 4字节 4713 bc 5874897 ad 1微秒/14位数
time [ (p) ] [ 不带时区 ] 时间(无日期) 8字节 00:00:00 24:00:00 1微秒/14位数
time [ (p) ] 带时区 仅限时间,带时区 12字节 00:00:00+1459 24:00:00-1459 1微秒/14位数
interval [ fields ] [ (p) ] 时间间隔 12字节 -178000000年 178000000年 1微秒/14位数

一些其他数据类型

布尔类型:

名称 描述 存储大小
boolean 它指定truefalse的状态。 1字节

货币类型:

名称 描述 存储大小 范围
money 货币金额 8字节 -92233720368547758.08 至 +92233720368547758.07

几何类型:

几何数据类型表示二维空间对象。最根本的类型: - 形成所有其他类型的基础。

重点用在postgis上的数据。

名称 存储大小 表示 描述
point 16字节 在一个平面上的点 (x,y)
line 32字节 无限线(未完全实现) ((x1,y1),(x2,y2))
lseg 32字节 有限线段 ((x1,y1),(x2,y2))
box 32字节 矩形框 ((x1,y1),(x2,y2))
path 16+16n字节 封闭路径(类似于多边形) ((x1,y1),…)
polygon 40+16n字节 多边形(类似于封闭路径) ((x1,y1),…)
circle 24字节 <(x,y),r>(中心点和半径)

语法篇

创建数据库

CREATE DATABASE database_name;

删除数据库

DROP DATABASE database_name

创建表

CREATE TABLE table_name(
    column1 datatype,
    column2 datatype,
  ... ...
    columnN datatype,
  PRIMARY KEY(one or more columns)
)

-- eg:
CREATE TABLE public.student2
(
  id integer NOT NULL,
  name character(100),
  subjects character(1),
  CONSTRAINT student2_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.student2
  OWNER TO postgres;
COMMENT ON TABLE public.student2
  IS '这是一个学生信息表2';

删除表

DROP TABLE student2;

创建/删除模式. 表

模式(也叫架构)是指定的表集合。 它还可以包含视图,索引,序列,数据类型,运算符和函数。

CREATE SCHEMA schema_name;


CREATE SCHEMA myschema;

-- Table: myschema.tb_test
-- DROP TABLE myschema.tb_test;
CREATE TABLE myschema.tb_test
(
  id integer,
  name character(254)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE myschema.tb_test
  OWNER TO postgres;

执行语句

插入数据

INSERT INTO EMPLOYEES(  ID, NAME, AGE, ADDRESS, SALARY)  
VALUES
 (1, 'Maxsu', 25, '海口市人民大道2880号', 109990.00 ), 
(2, 'minsu', 25, '广州中山大道 ', 125000.00 ), 
(3, '李洋', 21, '北京市朝阳区', 185000.00),   
(4, 'Manisha', 24, 'Mumbai', 65000.00), 
(5, 'Larry', 21, 'Paris', 85000.00);

删除数据

DELETE FROM EMPLOYEES  
WHERE ID = 1;

修改数据

update employee
    set age=29, salary=1000000
    where id=1;

查询数据

select id, age from employee;

ORDER BY

-- ASC升序(默认为升序)  DESC为降序
SELECT *   
FROM EMPLOYEES 
ORDER BY name DESC;

GROUP BY

-- group by 除冗余 name相同时,sum(salary)为相同name的sum

SELECT NAME, SUM(SALARY)   
FROM EMPLOYEES   
GROUP BY NAME;

HAVING

一般与group by连用,用于选择函数结果满足某些条件的特定行

select name, count(name) from employees
group by name having count(name) > 1;

条件查询

  • and 条件

    SELECT *  
    FROM EMPLOYEES  
    WHERE SALARY > 120000  
    AND ID <= 4;
    
  • or条件

    SELECT *  
    FROM  EMPLOYEES 
    WHERE NAME = 'Minsu'  
    OR ADDRESS = 'Noida';
    
  • and & or条件

    SELECT *  
    FROM EMPLOYEES  
    WHERE (NAME = 'Minsu' AND ADDRESS = 'Delhi')  
    OR (ID>= 8);
    
  • not条件

    SELECT *  
    FROM EMPLOYEES  
    WHERE address IS NOT NULL;
    
  • like条件

    -- 查 name以Ma开头
    SELECT *   
    FROM EMPLOYEES   
    WHERE NAME LIKE 'Ma%';
    
    -- 查 name以su结尾
    select * 
    from employees
    where name like '%su';
    
    -- 查 address中有'大道'记录
    select * 
    from employees
    where addtress like '%大道%';
    
  • in条件

    -- 查询employee表中那些年龄 为19,21的员工信息,执行以下查询:
    select * 
    from employees
    where age in (19,21);
    
  • not in 条件

    -- 查询employee表中那些年龄 不是 19,21的员工信息,执行以下查询:
    select * 
    from employees
    where age not in (19,21);
    
  • between条件

    -- 查询employees表中年龄在24~27之间(含24,27)的数据信息,执行以下查询:
    select * 
    from employees
    where age between 24 and 27;
    

连接(画圈内外左右连接)

<span style="color:red">与mysql同理</span>

高级语法

视图

视图其实就是一张伪表,它不是物理表,而是可以用来普通表选择查询。

它可以包含一个或者多个表的所选行。

-- 我们把员工信息表中 name,id,salary抽出来,作为一个视图
create view current_employees as 
select name, id, salary 
from employees;

函数(存储过程)

PostgreSQL函数也称为PostgreSQL存储过程。PostgreSQL函数是存储在数据库服务器上并可以使用SQL界面调用的一组SQL和过程语句(声明、分配、循环、控制流程等)。有助于通常在数据库中单个函数中进行多次查询和往返操作的操作。

-- 语法
CREATE [OR REPLACE] FUNCTION function_name (arguments)   
RETURNS return_datatype AS $variable_name$  
  DECLARE  
    declaration;  
    [...]  
  BEGIN  
    < function_body >  
    [...]  
    RETURN { variable_name | value }  
  END; LANGUAGE plpgsql;
  
-- function_name:指定函数的名称。
-- [OR REPLACE]:是可选的,它允许您修改/替换现有函数。
-- RETURN:它指定要从函数返回的数据类型。它可以是基础,复合或域类型,或者也可以引用表列的类型。
-- function_body:function_body包含可执行部分。
-- plpgsql:它指定实现该函数的语言的名称。

eg:

-- 创建函数
create or replace function totalrecords () 
returns integer as $total$ 
declare 
    total integer;
begin
    select count(*) into from employees;
    return total;
end;
$total$ language plpgsql;

-- 执行函数
select totalrecords();

学习链接:https://www.yiibai.com/postgresql/postgresql-trigger.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、PostgreSQL简介 (1)什么是PostgreSQL ​ PostgreSQL是一个功能强大...
    奔跑De猪阅读 1,216评论 0 0
  • PostgreSQL中主要有三种类型的数据类型: 数值数据类型 字符串数据类型 日期/时间数据类型 数值数据类型 ...
    az1981cn阅读 1,132评论 0 0
  • 由于PostgreSQL中存在一些伪数据类型并且一些的客户端工具还存在别称所以写这篇文章记录。 PostgreSQ...
    晓阳emmm阅读 2,338评论 0 0
  • 1. MySQL的时间类型 MySQL(5.7)的Timestamp与DateTime类型都是存储时间的数据类型。...
    paul_deng阅读 10,637评论 0 2
  • 2017/3/14 RDBMS:关系型数据库管理系统 关系模型独立于语言 SQL有几种不同类型的语言:数据定义语言...
    ancherl阅读 1,813评论 0 6

友情链接更多精彩内容