目录

一、数据库操作之 “创建_增删改(列)”

  1. 数据库的创建与删除
  2. 表(列)的创建、添加、修改与删除

二、数据库核心操作之 “查”

  1. 单表查询
  2. 表达式与函数应用
    • 函数详解
    • 表达式示例
  3. 多表查询
    • 子查询的运用
    • 连接操作的实现

三、数据库操作之 “增删改(行)”

  1. 表(行)的创建、添加、修改与删除
  2. 视图的创建、删除、查询与更新
    • 视图的重要作用
       


      开始正文

咳咳咳
【创建_增删改(列)】

1,创建 —— 删除 —— 数据库

-- 创建数据库
CREATE DATABASE 库名;
-- 删除数据库
DROP DATABASE 库名;

2, 创建 —— 添加 —— 修改 —— 删除 —— 表(列)

-- 创建表
CREATE TABLE 表名 (
    列名1 数据类型 PRIMARY KEY,
    列名2 CHAR(20) NOT NULL,
    列名3 NUMERIC(2),
    PRIMARY KEY(列名x, 列名y),
    FOREIGN KEY(列名x) REFERENCES 表名x(列名y)
);

-- 添加列
ALTER TABLE 表名 ADD 列定义, 列定义, ...;

-- 修改列类型
-- 正确的语法是 ALTER TABLE 表名 ALTER COLUMN 列名 TYPE 新类型;
ALTER TABLE 表名 ALTER COLUMN 列名 TYPE 新类型;

-- 删除列
ALTER TABLE 表名 DROP COLUMN 列名1, 列名2, ...;

【查】

3,查询 —— 表(单)

SELECT 列名1, 列名2 AS 新名字, *
FROM 查询表名
WHERE 选择条件
ORDER BY 列名1, 列名2 ASC/DESC
GROUP BY 列名
HAVING 条件;
SELECT student_id, student_name AS name, *
FROM students
WHERE age > 20 AND gender = 'M'
ORDER BY age DESC
GROUP BY class_id
HAVING COUNT(*) > 5;

4,表达式 —— 函数

【1】函数:
-- 统计元组个数
SELECT COUNT(DISTINCT *) FROM 表名;
-- 统计某列值的个数
SELECT COUNT(DISTINCT 列名) FROM 表名;
-- 总和、平均、最大、最小
SELECT SUM(DISTINCT 列名), AVG(DISTINCT 列名), MAX(DISTINCT 列名), MIN(DISTINCT 列名) FROM 表名;

加 distinct 是去除重复,不是必须加

【2】表达式:
-- 月份差示例
SELECT MONTHS_BETWEEN('2025-05-06', '2024-05-06') FROM DUAL;
-- 取整示例
SELECT INTEGER(10.5) FROM DUAL;
-- 求平方示例
SELECT SQRT(16) FROM DUAL;
-- 三角函数示例
SELECT SIN(0), COS(0) FROM DUAL;
-- 取子串示例
SELECT SUBSTRING('abcdef', 2, 3) FROM DUAL;
-- 大写字符示例
SELECT UPPER('abc') FROM DUAL;

5. 查询 —— 表(多)

在多表查询中,主要涉及 FROM 子句用于多表合并,以及 WHERE 子句用于多表数据的筛选。

【1】引入子查询

子查询是指在一个查询语句中嵌套另一个查询语句。除了相关子查询外,一般子查询会得到一个集合,然后主查询的列依据特定规则从该集合中筛选数据(包括单个值与集合的运算,以及集合之间的运算)。子查询通常出现在 WHERE 子句中。

以下是一些常用的用于子查询的谓词:

  • IN:用于不相关子查询,即子查询独立于主查询,子查询的结果是一个值或集合(本质上都是集合,单个值也可看作集合)。示例:
SELECT * FROM 表1 WHERE 列名 IN (SELECT 列名 FROM 表2);
  • EXISTS:用于相关子查询,与 IN 不同,这类子查询不在乎具体的查询结果,通常使用 SELECT * 。它不是将主表列与子表查询结果集进行 IN 运算,而是直接对子查询结果集进行判断,返回 TRUE 或 FALSE 。若主表和子表满足特定表达式,则主表中满足条件的行被保留,否则被去除。示例:
SELECT * FROM 表1 WHERE EXISTS (SELECT * FROM 表2 WHERE 表1.列名 = 表2.列名);
  • SOMEANYALL:一般与逻辑比较运算符配合使用。示例:
SELECT * FROM 表1 WHERE 列名 > SOME (SELECT 列名 FROM 表2);
SELECT * FROM 表1 WHERE 列名 > ALL (SELECT 列名 FROM 表2);

此外,还有三个用于集合之间直接运算的谓词:

  • UNION(并集):将两个查询的结果合并,并去除重复行。示例:
SELECT 列名 FROM 表1
UNION
SELECT 列名 FROM 表2;
  • INTERSECT(交集):返回两个查询结果中相同的行。示例:
SELECT 列名 FROM 表1
INTERSECT
SELECT 列名 FROM 表2;
  • EXCEPT(差集):返回在第一个查询结果中存在,但在第二个查询结果中不存在的行。示例:
SELECT 列名 FROM 表1
EXCEPT
SELECT 列名 FROM 表2;
【2】引入连接

在多表查询的 FROM 子句中,常用的连接方式包括:

  • 自然连接(NATURAL JOIN:自动匹配两个表中同名的列,并返回匹配的行。示例:
SELECT * FROM 表1 NATURAL JOIN 表2;
  • 内连接(INNER JOIN:只返回两个表中满足连接条件的匹配行。示例:
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列名 = 表2.列名;
  • 外连接(OUTER JOIN:包括左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。
    • 左外连接:返回左表的所有行以及右表中匹配的行。示例:
SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 表1.列名 = 表2.列名;
  • 右外连接:返回右表的所有行以及左表中匹配的行。示例:
SELECT * FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.列名 = 表2.列名;
  • 全外连接:返回两个表的所有行,匹配的行正常显示,不匹配的行则以 NULL 填充相关列。示例:
SELECT * FROM 表1 FULL OUTER JOIN 表2 ON 表1.列名 = 表2.列名;
  • UNION 或 UNION ALL(合并结果集):在标准 SQL 中,通常使用 UNION 或 UNION ALL 来合并两个查询的结果集。UNION 会去除重复行,而 UNION ALL 则保留所有行,不去重。示例:
-- UNION 去重
SELECT 列名 FROM 表1
UNION
SELECT 列名 FROM 表2;
-- UNION ALL 不去重
SELECT 列名 FROM 表1
UNION ALL
SELECT 列名 FROM 表2;

交叉连接(CROSS JOIN:返回两个表的笛卡尔积,即第一个表的每一行与第二个表的每一行进行组合。示例:

SELECT * FROM 表1 CROSS JOIN 表2;

【增删改(行)】

6,创建 —— 添加 —— 修改 —— 删除 —— 表(行)

-- 添加行
INSERT INTO 表名 (列名1, 列名2, 列名3) VALUES (值1, 值2, 值3);
-- 修改行
UPDATE 表名 SET 列名的修改表达式 WHERE 修改某行的选择条件;
-- 删除行
DELETE FROM 表名 WHERE 删除行的选择条件;

7,创建 —— 删除 —— 查询 —— 更新 —— 视图

视图是虚拟的表,它并不实际存储数据,而是基于一个或多个表的查询结果。

-- 创建视图
CREATE VIEW 视图名 AS
SELECT 列名1, 列名2
FROM 表名
WHERE 条件;

-- 查询视图
SELECT * FROM 视图名;

-- 更新视图(某些情况下可以更新,前提是视图满足一定的条件)
UPDATE 视图名 SET 列名 = 值 WHERE 条件;

-- 删除视图
DROP VIEW 视图名;

视图的作用:

  • 简化查询:将复杂的查询封装在视图中,用户只需要查询视图,而不需要关心底层的表结构和查询逻辑。
  • 数据安全:可以通过视图只暴露部分列或行给用户,从而保护敏感数据。
  • 逻辑独立性:当底层表结构发生变化时,只需要修改视图的定义,而不需要修改所有依赖该视图的查询。
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐