通俗易懂的学会SQL,30道练习题(PostgreSQL基础版)

通俗易懂的学会SQL,30道练习题(PostgreSQL基础版),第1张

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录 前言🚀 1.数据定义语言DDL🌈 1.1 数据库 *** 作🌈 1.2 表 *** 作 🚀 2.处理数据DML🌈 2.1 INSERT INTO🌈 2.2 UPDATE🌈 2.3 DELETE 🚀 3、查询语言DQL🌈 3.1 SELECT 语句🌈 3.2 子查询🌈 3.3 LIKE 子句🌈 3.4 LIMIT 子句🌈 3.5 GROUP BY 语句🌈 3.6 WITH 子句

前言 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;

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/991262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存