📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前从事DBA及程序编程 擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。 ? 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞 ??????感谢各位大可爱小可爱!??????
前言
PostgreSQL是加州大学伯克利分校计算机系开发的,一个开源免费的关系式数据库管理系统,经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内相对高的声誉
🚀 1.数据定义语言DDL
🌈 1.1 数据库操作
📣📣【选择数据库】
#使用 \l 用于查看已经存在的数据库:

#使用 \c 数据库名 来进入数据库:

#使用?查看所有信息,比如jempgdb=# \conninfo

#可以在连接数据库后面添加数据库名来选择数据库:
 📣📣 【删除数据库】
PostgreSQL 删除数据库可以用以下三种方式: 1、使用 DROP DATABASE SQL 语句来删除。 2、使用 dropdb 命令来删除。 3、使用 pgAdmin 工具。 注意:删除数据库要谨慎操作,一旦删除,所有信息都会消失。 #DROP DATABASE 删除数据库 DROP DATABASE 会删除数据库的系统目录项并且删除包含数据的文件目录 DROP DATABASE 只能由超级管理员或数据库拥有者执行 DROP DATABASE 命令需要在 PostgreSQL 命令窗口来执行,语法格式如下: DROP DATABASE [ IF EXISTS ] name
🌈 1.2 表操作
以下创建了一个表,表名为 COMPANY 表格,主键为 ID,NOT NULL 表示字段不允许包含 NULL 值: CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
postgres=# \d --查看所有表 postgres=# \d department --查看表的定义

📣📣 【删除表】
我们创建了 COMPANY 和 DEPARTMENT 两个表,我们可以先使用 \d 命令来查看表是否创建成功:

从以上结果可以看出,我们表格已经创建成功,接下来我们删除这两个表: postgres=# drop table department, company; 再使用 \d 命令来查看就找不到表

🚀 2.处理数据DML
🌈 2.1 INSERT INTO
在 jempgdb 数据库中创建 COMPANY 表 postgres=# create database jempgdb; postgres=# \c jempgdb postgres=# CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL, JOIN_DATE DATE );
在 COMPANY 表中插入以下数据: INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (1, ‘Paul’, 32, ‘California’, 20000.00,‘2001-07-13’);

以下实例插入多行: INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (4, ‘Mark’, 25, 'Rich-Mond ', 65000.00, ‘2007-12-13’ ), (5, ‘David’, 27, ‘Texas’, 85000.00, ‘2007-12-13’);

🌈 2.2 UPDATE
更新在 PostgreSQL 数据库中的数据,我们可以用 UPDATE 来操作。 #以下是 UPDATE 语句修改数据的通用 SQL 语法: UPDATE table_name SET column1 = value1, column2 = value2…, columnN = valueN WHERE [condition]; 我们可以同时更新一个或者多个字段。 我们可以在 WHERE 子句中指定任何条件
更新 COMPANY 表中 id 为 3 的 salary 字段值: UPDATE COMPANY SET SALARY = 15000 WHERE ID = 3; 同时更新 salary 字段和 address 字段的值: UPDATE COMPANY SET ADDRESS = ‘Texas’, SALARY=20000;
🌈 2.3 DELETE
#DELETE 语句删除数据的通用语法: DELETE FROM table_name WHERE [condition]; 如果没有指定 WHERE 子句,PostgreSQL 表中的所有记录将被删除。 一般我们需要在 WHERE 子句中指定条件来删除对应的记录 条件语句可以使用 AND 或 OR 运算符来指定一个或多个。
删除 ID 为 2 的数据: DELETE FROM COMPANY WHERE ID = 2; 删除整张 COMPANY 表: DELETE FROM COMPANY;
🚀 3、查询语言DQL
🌈 3.1 SELECT 语句
PostgreSQL SELECT 语句用于从数据库中选取数据,结果被存储在一个结果表中,称为结果集。 #语法 SELECT 语句语法格式如下: SELECT column1, column2,…columnN FROM table_name; 如果我们想读取表中的所有数据可以使用以下 SQL 语句: SELECT * FROM table_name;

找出 AGE(年龄) 字段大于等于 25,并且 SALARY(薪资) 字段大于等于 65000 的数据: SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

列出 AGE(年龄) 字段在 25 到 27 的数据: SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;

🌈 3.2 子查询
以下的 SELECT 语句使用了 SQL 的子查询,子查询语句中读取 SALARY(薪资) 字段大于 65000 的数据,然后通过 EXISTS 运算符判断它是否返回行,如果有返回行则读取所有的 AGE(年龄) 字段。 SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

🌈 3.3 LIKE 子句
在 PostgreSQL 数据库中,我们如果要获取包含某些字符的数据,可以使用 LIKE 子句。 在 LIKE 子句中,通常与通配符结合使用,通配符表示任意字符,在 PostgreSQL 中, 主要有以下两种通配符:百分号 % 下划线 _ 如果没有使用以上两种通配符,LIKE 子句和等号 = 得到的结果是一样的。
找出 AGE 以 2 开头的数据: SELECT * FROM COMPANY WHERE AGE::text LIKE ‘2%’; 找出 address 字段中含有 - 字符的数据: SELECT * FROM COMPANY WHERE ADDRESS LIKE ‘%-%’;

🌈 3.4 LIMIT 子句
找出限定的数量的数据,即读取 4 条数据: SELECT * FROM COMPANY LIMIT 4;

🌈 3.5 GROUP BY 语句
根据 NAME 字段值进行分组,找出每个人的工资总额: SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;

根据 NAME 字段值进行分组,找出每个客户的工资总额,且name降序: SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;

🌈 3.6 WITH 子句
在 PostgreSQL 中,WITH 子句提供了一种编写辅助语句的方法,以便在更大的查询中使用。 WITH 子句有助于将复杂的大型查询分解为更简单的表单,便于阅读。这些语句通常称为通用表表达式(Common Table Express, CTE), 也可以当做一个为查询而存在的临时表。 WITH 子句是在多次执行子查询时特别有用,允许我们在查询中通过它的名称(可能是多次)引用它。 WITH 子句在使用前必须先定义。
With CTE AS (Select ID , NAME , AGE , ADDRESS , SALARY FROM COMPANY ) Select * From CTE;

查找 SALARY(工资) 字段小于 20000 的数据并计算它们的和: WITH RECURSIVE t(n) AS ( VALUES (0) UNION ALL SELECT SALARY FROM COMPANY WHERE SALARY < 20000 ) SELECT sum(n) FROM t;


|