数据库 二

一.数据认识

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结果过滤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值