SQL分类
DDL定义数据库 表 字段
DML表操作 增删改
DQL表操作 查询
数据库设计
视图,函数,存储过程
目录
SQL语句分为DDL,DML,DQL,DCL
DDL用于定义数据库和表的结构
DML用于操作数据
DQL用于查询数据
DCL用于权限管理
对数据库的操作
对表的操作
包含查询表,表结构,创建表,字段类型,修改表以及删除表
对数据表进行添加数据,修改数据以及删除数据
对数据中的数据进行查询
基本查询
使用where条件查询
聚合函数
分组查询以及where与having的区别
排序查询order by
分页查询limit
查询语句中关键字的执行顺序
例如以下代码:
因为顺序是先执行where后的代码,再执行select后的代码所以在select后as的别名会标红无法执行
子查询
就是在一个select语句上在嵌套select语句进行查询
示例:
我们有一个学生表和一个成绩表
students表: grades表:
现在我们想查询每个学生的名字、年龄以及他们的英语成绩。针对这个问题,我们可以使用子查询的方法,首先查询英语课程的课程ID,然后再在成绩表中查询对应课程ID和学生ID的成绩
SELECT name, age, (
SELECT score FROM grades
WHERE course = 'English' AND students.student_id = grades.student_id
) AS english_score
FROM students;
在设计数据库时遵守数据库设计三大范式能更好的设计一个实用,合理数据库
第一范式(1NF)
要求每个字段都是原子值,不可分解。比如一个地址字段,如果拆解成省份、城市和街道分别存储在不同的列中,就不符合1NF的要求。
第二范式(2NF)
要求在1NF的基础上,非主键列必须完全依赖于主键,而不能依赖于主键的一部分。比如学生成绩表,主键为学生和课程的联合主键,分数列应该依赖于主键,而不应该依赖于学生或课程本身。
第三范式(3NF)
要求在2NF的基础上,非主键列之间不能有依赖关系。换句话说,每一列都依赖于主键,而不依赖于其它列。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
视图(view)
视图就是将查询出来的结果,单独存放为视图方便后续对这些数据进行查询
示例:
有一个包含学生成绩信息的表
grades表:
我们想要查询每个学生的总分数,并按照总分数排序代码如下:
CREATE VIEW total_grades AS
SELECT student_id, SUM(score) AS total_score
FROM grades
GROUP BY student_id
ORDER BY total_score DESC;
这个视图基于grades表创建,并根据学生ID计算每个学生的总成绩。在创建视图时,我们使用SELECT语句来指定视图的数据来源,并使用GROUP BY和SUM函数来完成聚合计算。还使用了ORDER BY子句按照总成绩对学生进行排序
然后再使用查询语句
SELECT * FROM total_grades;
就可以查询创建出来的视图
函数(function)
类似JAVA当中定义的一个方法, 可以有参数和无参利用定义的函数来实现某种功能
示例:
假设我们有一个包含两个整数值的表,要创建一个用来计算这两个值之和的函数
test表:
使用以下语句创建函数:
CREATE FUNCTION sum_values(x INT, y INT)
RETURNS INT
RETURN x + y;
在使用查询语句来使用这个函数:
SELECT x, y, sum_values(x, y) AS result FROM test;
将x, y作为参数传递进去输出两个数的和
存储过程(procedure)
类似函数但是有所不同
1. 使用call调用存储过程
2. 存储过程可以返回多个结果集,函数只能返回一个
示例:
创建一个存储过程用于接收两个整数作为输入,返回这两个整数之和和之差代码如下:
CREATE PROCEDURE sum_diff(
IN x INT,
IN y INT,
OUT sum INT,
OUT diff INT
)
BEGIN
SET sum = x + y;
SET diff = x - y;
END;
然后用call调用存储过程并传入两个数, 再使用select输出:
CALL sum_diff(5, 3, @sum, @diff);
SELECT @sum AS sum, @diff AS diff;
结果为:
以上就是我的一些总结, 第一次发肯定有很多不到之处请来老师同学们指出