Postgresql 基础使用语法

1.数据类型

1.数字类型

类型    长度     说明      范围    与其他db比较

Smallint 2字节 小范围整数类型 32768到+32767

integer 4字节 整数类型 2147483648到+2147483647

bigint 8字节 大范围整数类型 -9233203685477808到+9223203685477807

decimal 可变 用户指定 精度小数点前131072位;小数点后16383位

numeric 可变 用户指定 精度小数点前131072位;小数点后16383位

real 4字节 变长,不精确 6位十进制精度

double precision 8字节 变长,不精确 15位十进制精度

smallserial 2字节 smallint I自增序列 1到32767

serial 4字节 Integer自增序列 1到2147483647

bigserial 8字节 bigint自增序列 1到922372036854775807

money 8字节 金钱类型

  1. 字符类型

类型

长度

说明

varchar(n),character varying(n)

变长

字符最大数有限制

char(n),character(n)

定长

固定长度字符串字符数没达到最大值则使用空白填充

text

变长

无长度限制

  1. 日期时间

类型 长度 说明 范围 与其他db比较

  1. 基本操作

2.1数据库操作

//创建数据库

CREATE DATABASE 库名

//在创建数据库时指定参数信息 WITH OWNER:所有者 ENCODING:编码格式

CREATE DATABASE 库名 WITH OWNER = postgres ENCODING = ‘utf-8’

//修改数据库名称

ALTER DATABASE 旧库名 RENAME TO 新库名

//修改连接限制数

ALTER DATABASE 库名 CONNECTION LIMIT 20

//删除数据库

DROP DATABASE 库名

2.2表操作

//创建表

CREATE TABLE 表名(

字段1 类型1,

字段2 类型2

);

例:  

一,class_info表

create table class_info

(

    id                    serial not null

                          constraint class_info_pk

                          primary key,

    name                  varchar,

    write_date            timestamp

);

serial not null constraint student_pk primary key,

"serial" 列被设置为 "not null",并且有一个名为 "student_pk" 的主键约束。

主键的作用是确保表中的每个数据行都可以被唯一地标识,并且主键值不能重复或为空。在创建主键约束后,系统会自动检查插入的数据是否违反了主键的唯一性要求,如果有重复的主键值或缺少主键值,就会抛出错误,阻止插入操作。

comment on table student is '学生表'; comment on column student.name is '名称';

给名为 student 的表添加注释,注释内容为 '学生表',用于描述表的作用或用途。

-- id serial not null 表示id自增  -- id integer not null 表示id不自增

二,studen 表

create table student

(

    id                    serial not null

                          constraint student_pk 

                          primary key,

    name                  varchar,

    class_id             integer  references "class_info"("id"),    //references 外键

    height                numeric,

    weight                numeric,

    write_date            timestamp

);

//外键

外来键是一个(或数个)指向另外一个表格主键的栏位。

假设我们有两个表格:一个 CUSTOMER 表格,里面记录了所有顾客的资料;另一个 ORDERS 表格,里面记录了所有顾客订购的资料。在这里的一个限制,就是所有的订购资料中的顾客,都一定是要跟在 CUSTOMER 表格中存在。在这里,我们就会在 ORDERS 表格中设定一个外来键,而这个外来键是指向 CUSTOMER 表格中的主键。这样一来,我们就可以确定所有在 ORDERS 表格中的顾客都存在 CUSTOMER 表格中。换句话说,ORDERS表格之中,不能有任何顾客是不存在于 CUSTOMER 表格中的资料。

CUSTOMER 表格

栏位名

性质

SID

主键

Last_Name

First_Name

ORDERS 表格

栏位名

性质

Order_ID

主键

Order_Date

Customer_SID

外来键

Amount

2.3表操作

//修改表名

ALTER TABLE 旧表名 RENAME TO 新表名

//修改字段名

ALTER TABLE 表名 RENAME 旧字段 TO 新字段

//修改字段类型

ALTER TABLE 表名 ALTER COLUMN 字段 TYPE 类型(VARCHAR(40))

//删除字段

ALTER TABLE 表名 DROP COLUMN 字段

//添加字段

ALTER TABLE 表名 ADD COLUMN 字段 类型

//删除表

DROP TABLE 表名

//删除前进行判断

DROP TABLE IF EXISTS 表名

一般drop table if exists是数据库里面的,后面接表名如:drop table if exists xxx_book意思就是:如果数据库中存在xxx_book表,就把它从数据库中drop掉。

2.4往表中插入数据

//插入数据

INSERT INTO 表名 VALUES(1,'阿道夫','2022-10-10',NULL)

//指定字段插入数据

INSERT INTO 表名 (id,name) VALUES (‘2’,’王老五’);

批量导入

//将表数据插入到新表中

INSERT INTO 新表名 SELECT * FROM 表名;

//指定字段批量插入

INSERT INTO student1 (id,name) SELECT id, name FROM student;

往新表中插入其他表的指定字段数据

INSERT INTO employee (e_id, name) SELECT id, name FROM company WHERE name IS NOT NULL;

//往employee(e_id) 和 (name) 字段 插入 company表的 id name字段的值 如果name不为空的话

2.5 修改表数据

//更新数据,将id等于2的用户名改成'张三' ,如果不指定更新条件,会全局更新

UPDATE 表名 SET name = ‘张三 WHERE id = 2

2.6删除表数据

//删除id等于2的表数据

DELETE FROM 表名 WHERE id = 2

//删除id在1到3的表数据

DELETE FROM student WHERE id BETWEEN 1 and 3;

//清空数据表
DELETE from student;

TRUNCATE TABLE student;

2.7表查询

//查询所有字段内容

SELECT * FROM 表名

//批量字段查询

SELECT id, name FROM student;

//  多表查询

SELECT student.name, student1.name  FROM student;

//  给表取别名后查询,简化代码

SELECT s.id, s.name  FROM student s;

2.7.1单表指定条件查询

//in关键字查询 查询id为1,3,5的成员

SELECT id,name FROM 表名 WHERE id IN (1,3,5)

//between and 关键字查询,在什么之间

SELECT id,name,birthday FROM 表名 WHERE birthday BETWEEN '2020-10-10' AND '2024-10-10'

//模糊查询,查询所有姓张的用户

SElECT id, name FROM 表名 WHERE name LIKE ‘张%’

2.7.2单表指定条件复杂查询

//查询所有字段内容

SELECT * FROM student;

//只显示前3条数据

SELECT * FROM student LIMIT 3;

//查询三条数据,从第二条开始

SELECT * FROM student LIMIT 3 OFFSET 2;

//查询姓名非空内容

SELECT id,name FROM student where name is NOT null;

// 1 or 3 :1与3 ;ORDER BY id ASC 按id升序 ORDER BY id DESC 按id降序 默认升序

SELECT id,name FROM student where id=1 OR id=3 ORDER BY id ;

2.7.3 多表查询

//创建一个班级表,id为主键   id int PRIMARY KEY,

//创建学生表,id为主键,classid为外键,关联表class的id

CONSTRAINT pk_student_id FOREIGN KEY(classid) REFERENCES class(id)

//隐式内连接,关联classid显示student成员所在班级

SELECT student.id, class.id,student.name, class.name FROM student, class WHERE  student.classid = class.id;

//显示内连接,INNER JOIN不返回空值LEFT JOIN 左连接,RIGHT JOIN 右连接,不能匹配的数据也返回

//INNER JOIN,所以结果中只返回匹配的数据,不会有空值出现。

SELECT student.id, class.id,student.name, class.name

FROM student INNER JOIN class ON student.classid = class.id ;

例子:

SELECT c.id, c.name,c.address,e.huji,e.work_time,e.phone

FROM employee AS e

INNER JOIN company AS c ON e.e_id = c.id;

子查询

子查询或称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。

一个 SELECT 语句的查询结果能够作为另一个语句的输入值

//EXISTS关键字子查询

SELECT * FROM student WHERE EXISTS

(SELECT class.id FROM class WHERE class.name = '二班' AND student.classid = class.id);

//IN 关键字子查询

SELECT * FROM student WHERE student.classid IN

(SELECT class.id FROM class WHERE class.name = '二班' );

查询结果合并操作

UNION                 可去重复         执行速度慢

UNION ALL         不可去重复         执行速度快

  1. 运算符

  3.1算术运算符 +   -   *   %

3.2比较运算符 =   返回t f

3.3 逻辑运算符 NOT(逻辑非)  AND(逻辑与)  OR(逻辑或)

//判断2是否在1~3之间 T 

SELECT 2 BETWEEN 1 AND 3;

//判断2是否在234集合中 T

SELECT 2 in (2,3,4);

//like运算符模糊匹配 %代表多个字符  _代表一个字符

SELECT 'abc' LIKE 'a%', --T

 'abc' LIKE '_a_', --F

 'abc' LIKE '_b_', --T

 'abc' NOT LIKE '_b_'; --F

SELECT LEAST(1,2,3), --返回最小值:1

 GREATEST(1,2,3); --返回最大值:3

  1.  函数

4.1数值函数

SELECT 函数(字段名) from 表名;   !!!!!

4.2字符串函数

 SELECT 函数(字段名) from 表名;!!!!

4.3日期时间函数

CURRENT_DATA   = 2023-08-03

CURRENT_TIME   = 18:18:01.412198+08

NOW            = 2023-08-03 18:18:01.412198+08

EXTRACT使用 (相当于转换时间格式)

 

  1.  自定义函数

CREATE FUNCTION //声明创建函数

ADD(INTEGER,INTEGER) //定义函数名称

RETURNS INTEGER //定义函数返回值

AS'SELECT $1 + $2;' //定义函数体

LANGUAGE SQL //用以实现函数的语言名字

RETURNS NULL ON NULL INPUT;    //定义参数为NULL时处理情况

例子:

 

  1.  数据库索引

 

使用索引的优缺点

优点

通过创建唯一的索引,可以保证数据库表中每一行数据的唯一性。

可以大大提高查询速度

加速表与表之间的连接

减少查询中分组和排序的时间

缺点

创建和维护索引耗费时间,数据量越多耗费的时间越多

索引需要占用物理空间

对表的数据进行增加、删除、修改的时候,索引也需要动态维护,降低了数据的维护速度。

//-- 创建索引 此处默认使用B-tree

CREATE INDEX student_name_index ON student(name);

//-- 删除索引

DROP INDEX student_name_index;

  1.  数据库视图

使用视图具有 简单化、安全性、逻辑数据独立性

--创建视图top3,展示id,name,birthday 条件是id<=3  并且按id降序

CREATE VIEW top3 AS SELECT id,name,birthday FROM student where id <= 3 ORDER BY id desc;

--查看视图

SELECT * FROM top3;

--删除视图

 

DROP VIEW top3;

  1.  主键` 外键

主键 使用PRIMARY KEY语句设置为主键

外键 CONSTRAINT pk_student_id FOREIGN KEY(classid) REFERENCES class(id)  关联其他表的主键

  1.  约束

主键与约束的区别,主键的值是非空唯一,且一个表只能有一个主键,可以有多个约束

    1. // UNIQUE 唯一约束
    2. // NOT NULL 非空约束
    3. // DEFAULT 默认值约束

例子:

CREATE TABLE student(

id INT UNIQUE,     // UNIQUE 唯一约束

name VARCHAR(30) NOT NULL,  // NOT NULL 非空约束

birthday DATE,

score NUMERIC(5,2) DEFAULT 0.0  // DEFAULT 默认值约束

);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】一些基本概念

一、数据库、数据仓库、数据湖 1.什么是数据库 (Database, DB) 数据库是指长期储存在计算机中的有组织的, 可共享的数据集合 就是存储数据的仓库 数据库有三个特点: 永久存储, 有组织, 可共享 数据库是一种结构化数据存储技术&#xff0c;用于存储和管理有组织的数据。数据库…

微信小程序云开发快速入门(2/4)

前言 我们对《微信小程序云开发快速入门&#xff08;1/4&#xff09;》的知识进行回顾一下。在上章节我们知道了云开发的优势以及能力&#xff0c;并且我们还完成了码仔备忘录的本地版到网络版的改造&#xff0c;主要学习了云数据库同时还通过在小程序使用云API直接操作了云数…

SciencePub学术| 智能计量类重点SCIE征稿中

SciencePub学术 刊源推荐: 智能计量类重点SCIE征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 智能计量类重点SCIE 【期刊简介】IF&#xff1a;2.0-2.5&#xff0c;JCR3区&#xff0c;中科院4区&#xff1b; 【版面类型】正刊&#…

new BigDecimal(double val)注意事项 / JWT解析BigDecimal类型数据

前言&#xff1a; 公司项目中有一个板块需要解析JWT令牌获取载荷里面封装的数据&#xff0c;遇到要解析一个BigDecimal类型的数据 问题发现过程&#xff1a; 正常来说&#xff0c;我们解析一个JWT令牌的步骤如下&#xff1a; public static Claims getDataFromToken(String tok…

极狐GitLab 企业级 CI/CD 规模化落地实践指南(一)

目录 template 引用&#xff0c;减少代码冗余&#xff0c;增强 CI/CD 构建扩展性 问题 1&#xff1a;代码冗余&#xff0c;低效实践 问题 2&#xff1a;维护性难&#xff0c;工作量大 ➤ local ➤ file ➤ remote ➤ template 收益 1&#xff1a;一处修改&#xff0c;多…

TIOBE2023年8月榜单发布,Python超越老将C/C++蝉联冠军

TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标&#xff0c;评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎&#xff0c;TIOBE 官网近日公布了 2023 年 8 月的编程语言排行榜。 此次的榜单中&#xff0c;Python依旧稳居第一&#xff0c;占比达到了13.33%。…

jpg图片太大怎么压缩?这样做轻松压缩图片

图片太大会给存储、分享带来麻烦&#xff0c;但其实现在压缩图片大小也不是什么难事&#xff0c;下面就给大家分享几个一直用的图片压缩方法&#xff0c;包含批量压缩、在线压缩、免费压缩等多种方式&#xff0c;大家按需自取哈~ 方法一&#xff1a;嗨格式压缩大师 这是一个可…

Kotlin Executors线程池newSingleThreadExecutor单线程

Kotlin Executors线程池newSingleThreadExecutor单线程 import java.util.concurrent.Executorsfun main() {val mExecutorService Executors.newSingleThreadExecutor()for (i in 1..5) {mExecutorService.execute {println("seq-$i tid:${Thread.currentThread().threa…

item_sku-获取sku详细信息

一、接口参数说明&#xff1a; item_sku-获取sku详细信息&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_sku 名称类型必须描述keyString是调用key&#xff08;点击获取测试…

P13-CNN学习1.3-ResNet(神之一手~)

论文地址:CVPR 2016 Open Access Repository https://arxiv.org/pdf/1512.03385.pdf Abstract 翻译 深层的神经网络越来越难以训练。我们提供了一个残差学习框架用来训练那些非常深的神经网络。我们重新定义了网络的学习方式&#xff0c;让网络可以直接学习输入信息与输出信息…

Python-OpenCV中的图像处理-图像直方图

Python-OpenCV中的图像处理-图像直方图 图像直方图统计直方图绘制直方图Matplotlib绘制灰度直方图Matplotlib绘制RGB直方图 使用掩膜统计直方图直方图均衡化Numpy图像直方图均衡化OpenCV中的直方图均衡化CLAHE 有限对比适应性直方图均衡化 2D直方图OpenCV中的2D直方图Numpy中2D…

Spring AOP实践:如何通过aop记录日志?

目录 一、依赖 二、自定义注解 三、切面 一、依赖 以SpringBoot工程为例&#xff0c;导入aop的依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 二…

基于Promise.resolve实现Koa请求队列中间件

本文作者为360奇舞团前端工程师 前言 最近在做一个 AIGC 项目&#xff0c;后端基于 Koa2 实现。其中有一个需求就是调用兄弟业务线服务端 AIGC 能力生成图片。但由于目前兄弟业务线的 AIGC 项目也是处于测试阶段&#xff0c;能够提供的服务器资源有限&#xff0c;当并发请求资源…

【Java】数据交换 Json 和 异步请求 Ajax

&#x1f384;欢迎来到边境矢梦的csdn博文&#xff0c;本文主要讲解Java 中 数据交换和异步请求 Json&Ajax 的相关知识&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#…

pwm接喇叭搞整点报时[keyestudio的8002模块]

虽然现在查看时间很方便&#xff0c;但是其实好像我的时间观念却越来越差。于是决定搞一个整点报时&#xff0c;时常提醒自己时光飞逝&#xff0c;不要老是瞎墨迹。 这篇主要讲一下拼装方式和配置&#xff0c;就差不多了。不涉及什么代码。3针的元器件&#xff0c;去掉正负接线…

day3 STM32 GPIO口介绍

GPIO接口简介 通用输入输出接口GPIO是嵌入式系统、单片机开发过程最常用的接口&#xff0c;用户可以通过编程灵活的对接口进行控制&#xff0c;实现对电路板上LED、数码管、按键等常用设备控制驱动&#xff0c;也可以作为串口的数据收发管脚&#xff0c;或AD的接口等复用功能使…

【设计模式——学习笔记】23种设计模式——状态模式State(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入介绍基本介绍登场角色应用场景 案例实现案例一类图实现 案例二&#xff1a;借贷平台源码剖析传统方式实现分析状态修改流程类图实现 案例三&#xff1a;金库警报系统系统的运行逻辑伪代码传统实现方式使用状态模式 类图实现分析问题问题一问题二 总结文章说明…

国内芯片厂商创新突破,助力国产替代持续加速

近日&#xff0c;中商产业研究院发布最新研究报告显示&#xff0c;今年1~5月份中国进口集成电路为1865亿件&#xff0c;同比下降19.6%&#xff0c;同比去年5个月累计少进口了455亿颗&#xff0c;平均每天少进口3亿颗。与此同时&#xff0c;英特尔、AMD、美光、三星、SK海力士等…

OSI七层模型和TCP/IP四层模型

OSI七层模型和TCP/IP四层模型 七层模型(OSI) OSI七层模型&#xff08;Open Systems Interconnection Reference Model&#xff09;是一个用于计算机网络体系结构的标准化框架&#xff0c;旨在定义网络通信中不同层次的功能和协议。 各个层次具体如下&#xff1a; 物理层&am…

C语言 冒泡排序

目录 一、原理 二、代码演示 三、代码优化 一、原理 假设&#xff1a; int arr[] { 9,8,7,6,5,4,3,2,1,0 }; 将 arr 内的元素进行升序排列&#xff0c;得到一个新的数组 int arr[] { 0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;…