PostgreSQL语句大全

举报
爱吃香蕉的阿豪 发表于 2023/11/04 22:23:12 2023/11/04
【摘要】 PostgreSQL是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。PostgreSQL开发者把它念作post-gress-Q-L。PostgreSQL的Slogan是"世界上最先进的开源关系型数据库"。基本语法CREATEFUNCTION//声明创建函数ADD(INTEGER,INTEGER)//定义函数名称RETURNSINTEGER//定义函数返回值

 

目录

前言

基本操作

数据库操作

创建表

表操作

往表中插入数据

修改表数据

 删除表数据

表查询 

 单表指定条件查询

 单表指定条件复杂查询

多表查询 

子查询 

数据类型

数值类型

日期与时间类型

​编辑

字符串类型

运算符

算术运算符 

​编辑

 比较运算符

逻辑运算符

函数

数值函数 

字符串函数

​编辑

 日期时间函数

自定义函数

数据库索引

数据库视图

主键、外键

主键

外键 

约束


前言

PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。PostgreSQL 开发者把它念作 post-gress-Q-L。PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库"。



一、基本操作

数据库操作

-- 创建数据库
CREATE DATABASE db_lbh;
-- 在创建数据库时指定参数信息  WITH OWNER:所有者  ENCODING:编码格式
CREATE DATABASE db_lbh2 WITH OWNER = postgres ENCODING = 'utf-8';
-- 修改数据库名称
ALTER DATABASE db_lbh2 RENAME TO db_lbh3;
-- 修改连接限制数
ALTER DATABASE db_lbh CONNECTION LIMIT 20;
-- 删除数据库
DROP DATABASE db_lbh3;

创建表

-- 创建表
CREATE TABLE student(
id INT,
name VARCHAR(30),
birthday DATE,
score NUMERIC(5,2)
);

表操作

-- 修改表名
ALTER TABLE student RENAME TO student1;
-- 修改字段名
ALTER TABLE student1 RENAME id TO myid;
-- 修改字段类型
ALTER TABLE student1 ALTER COLUMN name TYPE VARCHAR(40);
-- 删除字段
ALTER TABLE student1 DROP COLUMN birthday;
-- 添加字段
ALTER TABLE student1 ADD COLUMN birthday varchar(20);

-- 删除表
DROP TABLE student1;

-- 删除前进行判断
DROP TABLE IF EXISTS student1;

往表中插入数据

-- 插入数据
INSERT INTO student VALUES (1,'阿道夫','2022-10-10',NULL);
-- 指定字段插入数据
INSERT INTO student (id,name) VALUES('2','王老五');


--SELECT批量插入
-- 将表数据插入到新表中
INSERT INTO student1 SELECT * FROM student;
-- 指定字段批量插入
INSERT INTO student1 (id,name) SELECT id, name FROM student;

修改表数据

-- 更新数据,将id等于2的用户名改成'张三' ,如果不指定更新条件,会全局更新
UPDATE student SET name = '张三' WHERE id = 2;

 删除表数据

指定条件删除

--删除id等于2的表数据
DELETE FROM student WHERE id = 2;
--删除id在1到3的表数据
DELETE FROM student WHERE id BETWEEN 1 and 3;

 清空表数据

--清空数据表
DELETE from student;
TRUNCATE TABLE student;


表查询 

--  查询所有字段内容
SELECT * FROM student;
--  批量字段查询
SELECT id, name FROM student;
--  多表查询
SELECT student.name, student1.name  FROM student;
--  给表取别名后查询,简化代码
SELECT s.id, s.name  FROM student s;

 单表指定条件查询

-- in关键字查询 查询id为1,3,5的成员
SELECT id, name FROM student WHERE id IN (1,3,5);

-- between and 关键字查询,在什么之间
SELECT id, name, birthday  FROM student 
WHERE birthday BETWEEN '2020-10-10' AND '2024-10-10';

--模糊查询,查询所有姓张的用户
SELECT id, name FROM student WHERE name LIKE '张%';

 单表指定条件复杂查询

--  查询所有字段内容
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 ;

多表查询 

--创建一个班级表,id为主键
CREATE TABLE class(
id int PRIMARY KEY,
name VARCHAR(10)
);
--插入班级与对应id
INSERT INTO class VALUES(1,'一班'),(2,'二班');

--创建学生表,id为主键,classid为外键,关联表class的id
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(30),
birthday DATE,
score NUMERIC(5,2),
classid int,
CONSTRAINT pk_student_id FOREIGN KEY(classid) REFERENCES class(id)
);
INSERT INTO student VALUES
(1,'阿道夫','2022-10-10',NULL,1),
(2,'沙和尚','2022-10-10',NULL,2),
(3,'孙悟空','2022-10-10',NULL,2);

-- 隐式内连接,关联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 右连接,不能匹配的数据也返回
SELECT student.id, class.id,student.name, class.name 
FROM student INNER JOIN class ON student.classid = class.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         不可去重复         执行速度快


二、数据类型

数值类型

--整数类型
SMALLINT					//小整数:-32768 ~ 32767
INT(INTEGER)				//普通整数:-2147483648 ~ 2147483647

--任意精度浮点数类型
REAL						//6位十进制数字精度
NUMERIC(m,n)				//任意精度(m总位数,n小数位)

举例

--创建学生表,设置id数值类型
CREATE TABLE student(
id1 SMALLINT,
id2 INT,
id3 REAL,
id4 numeric(5,2)
);

日期与时间类型

 举例:

--创建表
CREATE TABLE student(
t TIME,
d DATE,
tm TIMESTAMP
);
--插入数据
INSERT INTO student VALUES('10:10:10','2020-10-10','2020-10-10 10:10:10');

 


 字符串类型

举例:

-- 创建表
CREATE TABLE student(
ch CHAR(10),
vch VARCHAR(30),
t TEXT
);
-- 插入数据
INSERT INTO student VALUES ('哈哈哈','哈哈哈','哈哈哈')

SELECT concat('(',ch,')'),
			 concat('(',vch,')'),
			 concat('(',t,')')
FROM student;

可以看见CHAR类型字符长度不够会空白补充

运算符

算术运算符 

 比较运算符

-- 判断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

逻辑运算符

  • NOT (逻辑非)

  • AND (逻辑与)

  • OR (逻辑或)

 

函数

数值函数 

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

字符串函数

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

 日期时间函数

 EXTRACT使用

自定义函数

 基本语法

CREATE FUNCTION								//声明创建函数
	ADD(INTEGER,INTEGER)					//定义函数名称
	
RETURNS INTEGER 							//定义函数返回值
	AS'SELECT $1 + $2;'						//定义函数体
									
LANGUAGE SQL								//用以实现函数的语言名字
RETURNS NULL ON NULL INPUT;   				//定义参数为NULL时处理情况

 举例:

CREATE FUNCTION										
	add2(INTEGER,INTEGER)						
	
RETURNS INTEGER 									
	AS'SELECT $1 + $2 + $1;'							
									
LANGUAGE SQL											
RETURNS NULL ON NULL INPUT;  

--使用函数
SELECT add2(1,2);

-- 结果: 4

删除函数 

DROP FUNCTION concat_student(INT,VARCHAR,DATE);


数据库索引

使用索引的优缺点

优点:

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

  2. 可以大大提高查询速度

  3. 加速表与表之间的连接

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

缺点:

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

  2. 索引需要占用物理空间

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

-- 创建索引 此处默认使用B-tree
CREATE INDEX student_name_index ON student(name);
-- 删除索引
DROP INDEX student_name_index;

数据库视图

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

--创建视图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;

主键、外键

主键

比如我们前面创建的学生表student里,id是唯一的,就可以使用PRIMARY KEY语句设置为主键

--方式1,列级约束,使用PRIMARY KEY语句,不能指定主键名称
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(30),
birthday DATE,
score NUMERIC(5,2)
);

--方式2,表级约束,可以指定主键名称
CREATE TABLE student(
id INT,
name VARCHAR(30),
birthday DATE,
score NUMERIC(5,2),
CONSTRAINT pk_student_id PRIMARY KEY(id)
);

外键 

--创建一个班级表,id为主键
CREATE TABLE class(
id int PRIMARY KEY,
name VARCHAR(10)
);
--插入班级与对应id
INSERT INTO class VALUES(1,'一班'),(2,'二班');

--创建学生表,id为主键,classid为外键,关联表class的id
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(30),
birthday DATE,
score NUMERIC(5,2),
classid int,
CONSTRAINT pk_student_id FOREIGN KEY(classid) REFERENCES class(id)
);

约束

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

CREATE TABLE student(
id INT UNIQUE,					  	 //	UNIQUE 		唯一约束
name VARCHAR(30) NOT NULL,			 //	NOT NULL	非空约束
birthday DATE,
score NUMERIC(5,2) DEFAULT 0.0		 //	DEFAULT		默认值约束
);

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。