一.数据认识
1.关系型
表与表的关系:核心表
mysql/oracle、SQLServer(微软)
SQL
2.非关系型
redis--缓存数据库Map<k,v>
NO-SQL:not only sql
二.关系型数据库(R)
1.客户端、数据库服务
2.库(database)
CREATE DATABASE xxx_db;//创建库
DROP DATABASE;//删除库
xxx_db.xxx_tab
3.表(table)
3.1 表的结构
CREATE
DROP
3.2 字段类型
(1) int
(2) double
(3) char
(4) varchar
(5) date
默认格式:yyyy-MM-dd hh:mm:ss
'2024-10-13' ---> Date
varchar vs char
varchar与char的主要区别
1.长度固定性: char:长度固定,如果插入数据的长度小于char的固定长度时,则用空格填充。12
varchar:长度可变,根据实际存储的字符数量来决定存储空间的大小。
2.存储效率: char:存取速度快,因为长度固定,能够快速定位到数据的起始位置。
varchar:存取速度相对较慢,因为长度不固定,需要动态调整存储空间。
3.空间占用: char:占用空间大,因为长度固定,即使存储的字符少也会占用固定长度的空间。
varchar:占用空间小,因为根据实际存储的字符数量来决定存储空间的大小。
4.适用场景:char:适用于存储长度固定的数据,如身份证号、性别等。
varchar:适用于存储长度可变的数据,如姓名、地址等。
varchar与char的具体应用场景和优缺点
char:由于其长度固定,存取速度快,适合用于存储那些长度几乎不变的数据,如身份证号、性别等。但是,如果存储的数据长度小于定义的固定长度,会浪费一定的存储空间。
varchar:由于其长度可变,能够根据实际存储的字符数量来决定存储空间的大小,适合用于存储长度可变的数据,如姓名、地址等。但是,由于其存取速度较慢,且在频繁修改时可能会引起“行迁移”现象,导致额外的I/O开销。
三.SQL
Structured Query Language
1.分类
1.1 DDL
CREATE
1.2 DML
INSERT,DELETE,UPDATE
1.3 DQL
数据查询语言
1.DDL(Data Definition Language,数据定义语言):
用于定义数据库对象,如表、字段、索引等。
包括创建(CREATE)、修改(ALTER)、删除(DROP)等操作。
例如:CREATE TABLE(创建表)、ALTER TABLE(修改表)等。
2.DML(Data Manipulation Language,数据操纵语言):用于对数据库中的数据进行增删改操作。
包括插入(INSERT)、更新(UPDATE)、删除(DELETE)等操作。
例如:INSERT INTO(插入数据)、UPDATE SET(更新数据)等。
3.DQL(Data Query Language,数据查询语言):用于查询数据库中的数据。
最常用的操作是SELECT语句。
例如:SELECT * FROM(查询表中的所有数据)。
DDL、DML和DQL共同构成了SQL语言的基础,用于实现数据库的各种操作
2.INSERT
1. INSERT INTO 表名 VALUES(值1,值2....) ; 与表中的字段1 -1 对应
2. INSERT INTO 表名(字段1, 字段2....) VALUES(值1,值2....) ; ///与列出的字段对应(推荐)
3. INSERT INTO 表名(字段1, 字段2....) SELECT 字段1, 字段2.... FROM 表名; //多行数据产生
3.DELETE
DELETE FROM 表名 WHERE 查询条件;
DELETE vs TRUNCATE
1,功能和适用场景的区别
DELETE:可以删除单个、多个或所有记录,支持使用WHERE子句进行条件删除,适用于需要保留表结构的情况。1
TRUNCATE:只能删除表中的所有记录,不支持条件删除,适用于需要快速清空表数据的情况。
2.执行效率和资源使用的区别
DELETE:逐条删除数据,每次操作都会记录在事务日志中,适用于数据量较小的情况,执行效率较低,资源消耗较大。1
TRUNCATE:不记录每条删除操作的日志,直接重置高水位线,适用于大数据量的清空操作,执行效率较高,资源消耗较少。
3.事务回滚和安全性的区别
DELETE:属于DML操作,操作数据会放到回滚段中,支持事务回滚,适用于需要保留回滚能力的场景。
TRUNCATE:属于DDL操作,操作数据不会放到回滚段中,不支持事务回滚,适用于不需要回滚的场景。
4.对表结构的影响
DELETE:不会影响表结构,索引、触发器等定义保持不变。
TRUNCATE:会删除表结构,包括索引、触发器等定义,适用于需要重新初始化表的场景。
4.UPDATE
UPDATE 表名 SET 字段=数据 1,....WHERE
四.表
1.建表策略
三大范式
1.原子性(字段不可分割(相对))
第一范式要求数据库表的每一列都是不可分割的基本数据项,即表中的字段值必须是原子的、不可再分的。换句话说,表中的所有字段值都应该是单一的,而不是集合、数组或记录等复合数据类型。这是数据库设计中最基本的要求,任何关系型数据库都应该满足第一范式。
2.唯一性(不存在完全相同的两行)
第二范式建立在第一范式的基础上,它要求表必须有一个主键,且表中的非主键列必须完全依赖于主键。所谓完全依赖,是指非主键列不能仅依赖于主键的一部分(比如主键是复合主键时)。如果表中存在部分依赖,则不满足第二范式,此时应该将表拆分为两个或多个表,以消除部分依赖。
3.依赖传递性(只于主键依赖(真实主键),现实项目很难完全满足)
第三范式建立在第二范式的基础上,它进一步要求表中的非主键列必须直接依赖于主键,而不能存在传递依赖。传递依赖是指非主键列依赖于另一个非主键列,而这个非主键列又依赖于主键。如果表中存在传递依赖,则不满足第三范式,这通常会导致数据冗余和更新异常。为了消除传递依赖,需要将表进一步拆分,使得每个表中的非主键列都直接依赖于主键。
代理主键:唯一,自增长者整数
五.DQL(单表)
1.数据导入导出
导入表
2.全查询
别名 (AS) 别名
2.1 差字段
SELECT 字段1 (AS) 别名 , 字段2 (AS) 别名 ... FROM 表名;
2.2 通配符
* --- 所有字段
优点:方便,性能较差
SELECT * FROM emp_tab;
3.条件查询
根据字段的条件进行查询
SELECT * FROM 表 WHERE 条件
3.1 比较
=, > , < , >= , <= , != , <>
数值可以使用单引号
SELECT * FROM emp_tab WHERE emp_exp <=3;
3.2 逻辑
AND
OR
SELECT * FROM emp_tab WHERE emp_exp >=3 AND emp_exp<=5;
3.3 日期
日期可以比较 ,日期格式 使用单引号
SELECT * FROM emp_tab WHERE emp_hiredate <'2024-01-01';
3.4 不等于
!=
<>
SELECT * FROM emp_tab WHERE emp_gender <>'女';
3.5 查询(Null/N/A)
当前数据 没有填写
IS NULL
IS NOT NULL
SELECT * FROM emp_tab WHERE emp_manager IS NOT NULL;
3.6 在两者之间
BETWEEN ... AND
SELECT * FROM emp_tab WHERE emp_sal BETWEEN 5000.00 AND 20000.00;
4.模糊查询
% --任意字符,任意个
_ : 任意一个
。。。。 WHERE 字段 LIKE '表达式'
4.1 王xx
前缀有王
4.2 xx王
后缀有王
4.3 x王x
任意位置
SELECT * FROM emp_tab WHERE emp_name LIKE '王%';
SELECT * FROM emp_tab WHERE emp_name LIKE '%王';
SELECT * FROM emp_tab WHERE emp_name LIKE '%王%';
SELECT * FROM emp_tab WHERE emp_name LIKE '王___';
5.结果排序
SELECT *
FROM 表名
WHERE 条件
ORDER BY 字段 DESC/(ASC) 默认升序
SELECT * FROM emp_tab ORDER BY emp_sal;
SELECT * FROM emp_tab ORDER BY emp_sal DESC;
6.分页
选取某些行
SELECT *
FROM 表名
WHERE 条件
ORDER BY 字段 DESC/(ASC) 默认升序
LIMIT m, n
7.统计
数据统计,统计函数
1.SUM()
SUM()
函数在数据库中是一种聚合函数,用来计算指定列中数值的总和。它通常用在SELECT
查询中,对一组值进行求和操作。SUM()
函数可以应用于任何包含数值数据的列。当用于包含 NULL 值的列时,SUM()
会忽略这些 NULL 值,除非整个列都是 NULL,这时结果将是 NULL。2.AVG()
AVG()
函数是 SQL 语言中的一个聚合函数,其用途是计算某个表达式或列的平均值。此函数可以在 SELECT 查询中使用,以返回一个列中数值的平均值。这对于在数据库中分析和报告数据特别有用。3.MAX()
MAX() 函数是一种 SQL(Structured Query Language)聚合函数,用来从指定列中返回最大值。它常用于对数据集中的某个数值列进行统计,以找出该列中的最大值。MAX() 函数可以在 SELECT 查询中使用,也可以与其他 SQL 子句(如 GROUP BY、HAVING 等)搭配使用,以实现更复杂的数据分析和报告需求。
4.MIN()
MIN() 函数是一种在数据库管理系统(如 MySQL、SQL Server、PostgreSQL 等)中广泛使用的聚合函数。它的主要作用是返回指定列中的最小值。MIN() 函数可以在 SELECT 查询中使用,通常用于对数据集中的数值列进行统计分析。
5.COUNT()
COUNT() 函数是 SQL 中一个非常有用的聚合函数,它用于计算满足特定条件的行数。COUNT() 函数可以应用于任何数据类型的列,包括数字、字符串和日期等。这个函数在数据分析、报表生成以及数据库管理等多个方面都非常实用。
8.去重
SELECT DISTINCT emp_dept FROM emp_tab;
9.GROUP
GROUP BY 字段(统计函数)
HAVING 对group结果过滤