postgerSQL 使用以及概念(入门)

SQL语句分类

1.DDL数据定义语言;数据库,表,列。关键词:create ,drop,alter等

2.DML数据操作语言;数据库中的表增删改。关键词:insert,delete,update等

3.DQL数据查询语言;查询数据库中表的记录。关键词:select,where等

4.DCL数据控制语言;数据库的访问权限和安全级别,创建用户。关键词:GRANT,REVOKE等

postgresql语法DDL

数据库相关

1.创建数据库

CREATE DATABASE 数据库名称

2. 查询当前使用的数据库

SELECT current_database();

3.查看所有数据库

\l

4.切换使用数据库

\c 数据库名称

数据库表相关

SQL数据类型

创建表

CREATE TABLE 表名(参数 类型,参数 类型);

查看所有表

\dt

查看表结构

\d 表名字

复制相同结构的新表(复制表结构)

CREATE TABLE 新表名 (LIKE 老表名 INCLUDING ALL);

删除表

DROP TABLE 表名;

判断是否存在并删除表

DROP TABLE IF EXISTS 表名;

修改表结构

增加数据库表列

ALTER TABLE 表名 ADD 列名 类型;

修改表列类型

ALTER TABLE 表名 ALTER COLUMN 列名 TYPE 类型;

修改表列名

ALTER TABLE ONLY 表名 RENAME COLUMN 原来的列名字 TO 新列名;

删除列名字

ALTER TABLE 表名 DROP 列名;

修改表名

ALTER TABLE 旧表名 RENAME TO 新表名;

postgresql语法DML

表插入数据

顺序不能变

1. INSERT INTO 表名(列名1,列名2,列名3)VALUES(列表变量参数1,列表变量参数2,列表变量参数3);

2. INSERT INTO 表名 VALUES(列表变量参数1,列表变量参数2,列表变量参数);

3. INSERT INTO 表名(列名1,列名2,列名3)VALUES(列表变量参数1,列表变量参数2,NULL);

查询表数据

SELECT * FROM 表名;

蠕虫复制(包括复制表内容)

重复复制会让新表上面累加

与like 不同它可以一同连表的数据直接复制

2

复制可选项(单指复制)

INSERT INTO 新表名(name,age) SELECT name,id FROM 老表名;

修改(更新)表数据

列名全部改变

UPDATE 表名 SET 列名 = 值;

修改(更新)表数据按照条件更新

UPDATE 表名 SET 列名 = '更改后的参数' WHERE 列名 = 值;

删除表所有数据

DELETE FROM 表名 *(为一行一行删除)区别

TRUNCATE TABLE student1; *(表删掉重新创建新表)区别

删除表数据(按照条件)

DELETE FROM 表名 WHERE 列名 = 值;

postgresql语法DQL

查询表所有数据

SELECT * FROM student;

查询每列的名称

这样效率高 因为只查询单表

SELECT 列名1,列名2 FROM 表名;

别名查询

给列名加个注释查询

SELECT 列名 AS 备注名, 列名 AS 备注名 FROM 表名;

查询清除重复值

按照列名去重

SELECT DISTINCT 列名1, 列名2 FROM 表名;

查询结果参与运算

类似于react的useMemo计算属性

SELECT 列名1 + 列名2 FROM 表名;

上面显示的时候看着别扭可以按照下面这样写

SELECT *, 列名1 + 列名2 结果别名 FROM 表名;

也可以这样加别名显示

SELECT 列名1 别名1, 列名2 别名2, 列名3 别名3,想要运算的列名1+想要运算的列名2||想要运算的值 结果别名 FROM 表名;

查询比较运算符

*示例 用以下数据做实验

大于

<小于

<=小于等于

=大于等于

=等于

<>、!=不等于

查询条件大于350的数据

SELECT * FROM 表名 where 列名> 列名参数;

逻辑运算符

and 多个条件同时满足

or 多个条件其中一个满足

not 不满足

SELECT * FROM 表名 WHERE 列名 比较运算符 值 逻辑运算符 列名 比较运算符 值 ;

查询查询id是1或3或5的数据

SELECT * FROM hero WHERE id=值1 OR id=值2 OR id=值3;

SELECT * FROM hero WHERE id in(值1,值2,值3);

查询查询id不为1或3或5的数据

SELECT * FROM hero WHERE id NOT in(值1,值2,值3);

范围

SELECT * FROM 表名 WHERE 列名 BETWEEN '2013-01-01' AND '2017-01-01';

SELECT * FROM 表名 WHERE 列名 比较运算符 值 AND 列名 比较运算符 值;

效果相同

模糊查询

关键字like

MySQL通配符有两个:

%: 表示0个或多个字符(任意个字符)

_: 表示一个字符

SELECT * FROM 表名 WHERE 列名 LIKE '通配符字符串';

%匹配

因为%是0个到任何字符所以可以这么写

_匹配

查询结果排序

*通过ORDER BY子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)

SELECT * FROM 表名 WHERE 列名1 比较运算符 值 ORDER BY 列名1 ASC;

不加ASC默认升序

ASC是升序

DESC是降序

组合排序

组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。

上面的例子中,年龄是有相同的。当年龄相同再使用其他字段进行排序

SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];

查询年龄小于等于35岁的英雄,按照年龄升序排列,如果年龄相同按照生命的降序排列

此例子为视频截图 上面的年龄亚瑟年龄和视频不符合 体现不上来

聚合函数

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值

五个聚合函数:

count: 统计指定列记录数,记录为NULL的不统计

sum: 计算指定列的数值和,如果不是数值类型,那么计算结果为0

max: 计算指定列的最大值

min: 计算指定列的最小值

avg: 计算指定列的平均值,如果不是数值类型,那么计算结果为0

count 统计

SELECT COUNT(列名) FROM 表名

因为count会忽略NULL的数据所以列名里应该填写 * 号

下面例子中函数意思为一共有13条有age数据

按照条件查询

sum 求和

单个列相加求和

SELECT SUM(列名) FROM 表名

avg 平均值

SELECT AVG(列名) FROM 表名

max 最大值

SELECT MAX(列名) FROM 表

例子中最大的max_score值为17.7

min 最小值

SELECT MIN(列名) FROM 表

分组查询

postgresql 直接GROUP BY 会报错需要和聚合函数搭配使用

缺点:不能显示分组的列名 不知道是按照什么分组的

SELECT SUM(列名) FROM 表名 GROUP BY 按照分组的列名;

SELECT SUM(列名),按照分组的列名 表名 GROUP BY 按照分组的列名;

优点:这样会出现查询按照分组的列名

再次过滤
  • 因为WHERE是分组前的操作 所有得使用 ****HAVING 关键字
  • HAVING 关键字是分组后的再次过滤

SELECT 聚合函数(*),按照分组的列名 FROM 表名 WHERE 列名 比较运算符 值 GROUP BY 按照分组的列名 HAVING 聚合函数(*) 比较运算符 值;

  • having是在分组后对数据进行过滤.
  • where是在分组前对数据进行过滤
  • having后面可以使用聚合函数
  • where后面不可以使用聚合函数

limit 语句(分页)

SELECT * FROM 表名 LIMIT 显示的条数 OFFSET 跳过的条数;

例子中:跳过2条数据 显示2条数据后的6条数据

这是全部数据

数据库限制

  • PRIMARY KEY:主键
  • UNIQUE:唯一
  • NOT NULL:非空
  • DEFAULT:默认
  • FOREIGN KEY:外键

一个表得有一个唯一值

增加主键

设置id为PRIMARY Key主键

如果没有表创建主键

sql 复制代码
CREATE TABLE hero1( 
      id int PRIMARY Key,  
      name varchar(20),
      age int
);

如果有表创建

ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY (唯一列名 id);

重复的id添加时候报错 因为有主键了

删除主键

ALTER TABLE 表名 DROP CONSTRAINT 主键名称;

约束没有

主键自增

设置id为PRIMARY Key主键

SERIAL为自增

sql 复制代码
CREATE TABLE hero2(  
 id SERIAL PRIMARY KEY,  
 name varchar(20),  
 age int  
);

有了自增 就可以添加数据的时候不用额外加id

扩展

删除数据

DELETE FROM 表名

重新使用

INSERT INTO 表名 (列名1, 列名2) VALUES (值1,值2);

主键的id会从删除的最结尾开始计数

解决方法:

TRUNCATE TABLE 表名; 或者 DELETE FROM 表名

ALTER SEQUENCE 表名_id_seq RESTART WITH 1;

意思是重置主键id为1

唯一

关键词:UNIQUE

设置这张表这个字段值不能重复

比如身份证号,英雄名

注意NULL值是可以重复插入

sql 复制代码
CREATE TABLE 表名(  
 id SERIAL PRIMARY KEY,  
 列名1 varchar(20) UNIQUE,  
 列名2  int  
);

非空

关键词:NOT NULL

sql 复制代码
CREATE TABLE 表名(  
 id SERIAL PRIMARY KEY,  
 name varchar(20) UNIQUE NOT NULL,  
 age int  
);

如果重复添加数据:

默认值

关键词 :DEFAULT

sql 复制代码
CREATE TABLE 表名(  
  id SERIAL PRIMARY KEY,  
  name varchar(20) UNIQUE NOT NULL,  
  location VARCHAR(50) DEFAULT '射手'
 
);

外键

注:外键创建 sql语句我没找到我用的是 可视化工具创建的

通过连接外键可以查询同一个数据相关联

SELECT * FROM 包含外键的表名

JOIN 外键的表名 ON 包含外键的表名.id = 外键的表名.id

WHERE 外键的表名.id = 1;

相关推荐
敲代码的小菜鸡26 分钟前
java根据html生成pdf
前端·后端
假装我不帅41 分钟前
asp.net core grpc快速入门
后端·asp.net·grpc
说书客啊1 小时前
计算机毕业设计 | SSM 凌云招聘平台 求职问答审批系统(附源码)
java·spring boot·后端·mysql·毕业设计·ssm·课程设计
程序员大金1 小时前
基于SpringBoot+Vue+MySQL的旅游推荐管理系统
前端·vue.js·spring boot·后端·mysql·tomcat·旅游
Derek_Smart1 小时前
函数式编程实战:打造高效RpcRetryUtils重试工具
java·后端·面试
孤傲小二~阿沐1 小时前
PostgreSQL的学习心得和知识总结(一百五十一)|[performance] PostgreSQL列对齐
数据库·postgresql
lgily-12253 小时前
Docker与Kubernetes学习
后端·docker·kubernetes
拾木2004 小时前
Spring 的循环依赖
java·后端·spring
海里真的有鱼4 小时前
RabbitMQ 和 Kafka 的详细对比表格
后端
pcplayer8 小时前
WEB 编程:使用富文本编辑器 Quill 配合 WebBroker 后端
前端·后端·delphi·web开发·webbroker