目录
1. 使用DDL创建数据库
windows终端中采用:mysql -uroot -p 打开mysql数据库
MySQL基本使用方法:📎Mysql.pdf
设计表的原则:
1. 数据表的个数越少越好
RDBMS 的核心在于对实体和联系的定义,也就是 E-R 图(Entity Relationship Diagram),数据表越少,证明实体和联系设计得越简洁,既方便理解又方便操作。
2. 数据表中的字段个数越少越好
字段个数越多,数据冗余的可能性越大。设置字段个数少的前提是各个字段相互独立,而不是某个字段的取值可以由其他字段计算出来。当然字段个数少是相对的,我们通常会在数据冗余和检索效率中进行平衡。
3. 数据表中联合主键的字段个数越少越好
设置主键是为了确定唯一性,当一个字段无法确定唯一性的时候,就需要采用联合主键的方式(也就是用多个字段来定义一个主键)。联合主键中的字段越多,占用的索引空间越大,不仅会加大理解难度,还会增加运行时间和索引空间,因此联合主键的字段个数越少越好。
4. 使用主键和外键越多越好
数据库的设计实际上就是定义各种表,以及各种字段之间的关系。这些关系越多,证明这些实体之间的冗余度越低,利用度越高。这样做的好处在于不仅保证了数据表之间的独立性,还能提升相互之间的关联使用率。
“三少一多”原则的核心就是简单可复用。简单指的是用更少的表、更少的字段、更少的联合主键字段来完成数据表的设计。可复用则是通过主键、外键的使用来增强数据表之间的复用率。因为一个主键可以理解是一张表的代表。键设计得越多,证明它们之间的利用率越高。
2. SQL SELECT检索数据
1. SELECT 作用
- 从一个或多个表中检索所需的数据行
- 常见关键字:
SELECT
、FROM
、WHERE
、GROUP BY
、HAVING
、ORDER BY
、LIMIT
- 避免将保留字(如关键字)用作表名、字段名
2.1. 基本语法
SELECT [DISTINCT] <列列表 | *>
FROM <表名> [AS 别名]
[WHERE <过滤条件>]
[GROUP BY <分组列>]
[HAVING <分组过滤>]
[ORDER BY <排序列> [ASC|DESC] [, …]]
[LIMIT <行数>];
1. 查询列
单列查询
SELECT name FROM heros;
多列查询
SELECT name, hp_max, mp_max FROM heros;
查询所有列
SELECT * FROM heros;
适用于探索阶段,不建议在生产环境中大量使用
在生产环境中明确写出所需列,减少网络传输和 I/O
2. 列/表别名
列别名
SELECT name AS n, hp_max AS hm FROM heros;
表别名(多表连接时必用)
SELECT h.name, t.team_name
FROM heros AS h
JOIN teams AS t
ON h.team_id = t.id;
3. 查询常数
向结果中增加固定值列
SELECT '王者荣耀' AS platform, name FROM heros;
SELECT 123 AS platform, name FROM heros;
字符串常数务必用单引号包裹
4. 去重 DISTINCT
去除完全重复的行
SELECT DISTINCT attack_range FROM heros;
对多列组合去重
SELECT DISTINCT attack_range, name FROM heros;
DISTINCT
必位于所有列名前
5. 排序 ORDER BY
基本用法
SELECT name, hp_max FROM heros ORDER BY hp_max DESC;
多列排序
ORDER BY mp_max ASC, hp_max DESC;
- 可对未出现在
SELECT
中的列排序 - 关键字位置:必须放在所有子句之后
6. 限制行数 LIMIT / TOP / FETCH / ROWNUM
数据库 | 关键字示例 |
MySQL 等 |
|
SQL Server |
|
DB2 |
|
Oracle |
|
减少网络传输和扫描开销
2.2. SELECT 执行顺序 VS 写法顺序
写法顺序(人编写) | 执行顺序(数据库底层) |
| 1. FROM |
| 2. WHERE |
| 3. GROUP BY |
| 4. HAVING |
| 5. SELECT(字段提取) |
| 6. DISTINCT(去重) |
| 7. ORDER BY(排序) |
8. LIMIT(行数限制) |
3. 数据过滤 WHERE
4. SQL函数
SQL函数的概念:
SQL 函数就像编程中的函数——它们能将重复的操作封装起来,提高效率和可维护性。SQL 函数主要用来在查询结果中对数据进行处理和转换,常见操作包括求平均值、格式转换、提取日期信息等。
4.1. SQL函数类别
1. 算数函数
2. 字符串函数
3. 日期函数
4. 转换函数
- 聚集函数
HAVING vs WHERE(分组后的条件筛选)
比较项 | WHERE | HAVING |
作用阶段 | 分组 之前 的行过滤 | 分组 之后 的组过滤 |
是否可用聚集 | ❌ 不可使用聚集函数 | ✅ 可以用聚集函数(如 COUNT) |
是否可替代 | 用于过滤数据行 | 用于过滤分组 |
4.2. SQL函数注意事项
函数兼容性问题:
- 不同数据库(如 MySQL、PostgreSQL、SQL Server)对函数支持不完全一致,可能会导致语法错误或行为不同。
大小写敏感问题:
- MySQL 在 Linux 的环境下,数据库名、表名、变量名是严格区分大小写的,而字段名是忽略大小写的。
- MySQL 在 Windows 的环境下全部不区分大小写。
语法规范建议:
- SQL 关键字与函数使用大写;
- 表名、字段名统一使用小写;
- 每条 SQL 语句以分号结尾;