SQL数据库->SQL语法
目录。
·
目录
一、数据库操作之 “创建_增删改(列)”
- 数据库的创建与删除
- 表(列)的创建、添加、修改与删除
二、数据库核心操作之 “查”
- 单表查询
- 表达式与函数应用
- 函数详解
- 表达式示例
- 多表查询
- 子查询的运用
- 连接操作的实现
三、数据库操作之 “增删改(行)”
- 表(行)的创建、添加、修改与删除
- 视图的创建、删除、查询与更新
- 视图的重要作用
开始正文
- 视图的重要作用
咳咳咳
【创建_增删改(列)】
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.列名);
SOME
、ANY
、ALL
:一般与逻辑比较运算符配合使用。示例:
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 视图名;
视图的作用:
- 简化查询:将复杂的查询封装在视图中,用户只需要查询视图,而不需要关心底层的表结构和查询逻辑。
- 数据安全:可以通过视图只暴露部分列或行给用户,从而保护敏感数据。
- 逻辑独立性:当底层表结构发生变化时,只需要修改视图的定义,而不需要修改所有依赖该视图的查询。
更多推荐
所有评论(0)