DQL 查询表中的数据
简单查询
语法:
- SELECT 列名 FROM 表名 [WHERE 条件表达式]
详解:
- SELECT 命令可以读取一行或者多行记录。
- 你可以使用星号(*)来代替其他字段,SELECT 语句会返回表的所有字段数据
- 你可以使用 WHERE 语句来包含任何条件。
使用*表示所有列
语法:
- SELECT * FROM 表名;
举例:
查询指定列
查询指定列的数据,多个列之间以逗号分隔
- SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
举例:
使用别名的好处: 显示的时候使用新的名字,并不修改表的结构。
语法:
- SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名;
举例:
- SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;
举例
查询指定列并且结果不出现重复数据
语法
- SELECT DISTINCT 字段名 FROM 表名;
举例:
查询结果参与运算
- SELECT 列名 1 + 固定值 FROM 表名;
举例:
语法
- SELECT 列名 1 + 列名 2 FROM 表名;
举例:
注意:
- 因为null参与的运算,计算结果都为null,MySQL语句中提供函数ifnull(表达式1,表达式2):来解决这个问题。表达式1:哪个字段需要判断是否为null,如果该字段为null后的替换值。
条件查询
条件查询的语法
- SELECT 字段名 FROM 表名 WHERE 条件;
语法流程:取出表中的每条数据,满足条件的记录就返回
运算符
逻辑运算符
in 关键字
范围查询
举例:
like 关键字
MySQL 通配符
举例:
排序查询
语法:
- SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];
tips:
- ASC: 升序,默认值
- DESC: 降序
只按某一个字段进行排序,单列排序。
组合排序
组合排序的语法:
- SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];
举例:
聚合函数
五个聚合函数
- max(列名):求这一列的最大值
- min(列名):求这一列的最小值
- avg(列名):求这一列的平均值
- count(列名):统计这一列有多少条记录
- sum(列名):对这一列求总和
- SELECT 聚合函数(列名) FROM 表名;
举例:
解决办法:
- IFNULL(列名,默认值) 如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。
举例:
分组查询
- SELECT 字段 1,字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];
- 当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的
举例:
having 与 where 的区别
例如:
分页查询
LIMIT 是限制的意思,所以 LIMIT 的作用就是限制查询记录的条数
语法(MySQL方言)
- SELECT *|字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子句][LIMIT 子句];
- offset:起始行数,从 0 开始计数,如果省略,默认就是 0
- length: 返回的行数
- 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
举例:
数据库表的约束
约束的作用:
- 对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。
约束种类:
非空约束
非空约束的基本语法格式
- 字段名 字段类型 NOT NULL
创建表时添加约束
语法:
create table 表名(
字段名称 字段类型 NOT NULL, --- 这个字段添加了非空约束
.....
);
举例:
创建表完后,添加非空约束
语法:
- ALTER TABLE 表名 MODIFY 字段名称 字段类型 NOT NULL;
举例:
删除name的非空约束
语法:
- ALTER TABLE stu MODIFY字段名称 字段类型;
举例:
唯一约束
唯一约束的基本语法格式
- 字段名 字段类型 UNIQUE
注意:
- 唯一约束可以有NULL值,但是只能有一条记录为null
在创建表时,添加唯一约束
语法:
CREATE TABLE 表名(
字段名称 字段类型,
字段名称 字段类型,UNIQUE -- 手机号
);
举例:
删除唯一约束
语法:
- ALTER TABLE 表名 DROP INDEX 字段名称;
举例:
在表创建完后,添加唯一约束
只要表中没有相同数据,才能使用这种方式添加唯一约束
语法:
- ALTER TABLE 表名 MODIFY 字段名称 字段类型 UNIQUE;
举例:
主键约束
- 用来唯一标识数据库中的每一条记录
- 非空 not null
- 唯一
在创建表的时候给字段添加主键
- 字段名 字段类型 PRIMARY KEY
举例:
- alter table 表名 drop primary key;
举例:
- ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
举例:
主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值
- AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
创建主键,并且添加自动增长
语法:
创建表时指定起始值
语法:
举例:
- ALTER TABLE 表名 AUTO_INCREMENT=起始值;
举例:
删除自动增长
语法:
- ALTER TABLE 表名 MODIFY 字段名称 字段类型;
举例:
小结:
- 主键数在一个表中,只能有一个。不能出现多个主键。主键可以单列,也可以是多列。
- 自增长只能用在主键上
外键约束
- 什么是外键:在从表中与主表主键对应的那一列。
- 主表: 一方,用来约束别人的表
- 从表: 多方,被别人约束的表
新建表时增加外键:
语法:
- [CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
举例:
已有表增加外键:
- ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
举例:
删除外键
- ALTER TABLE 从表 drop foreign key 外键名称;
举例:
外键的级联
- 在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
举例:
数据约束小结
数据库的设计
表与表之间的关系
一对一
一对多
- 一对多(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品
- 一对多建表原则: 在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键
多对多
- 多对多(m:n) 例如:老师和学生,学生和课程,用户和角色
- 多对多关系建表原则: 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键
数据范式
什么是范式:
三大范式:
1NF
- 数据库表的每一列都是不可分割的原子数据项,不能是集合、数组等非原子数据项。即表中的某个列有多个值时,必须拆分为不同的列。简而言之,第一范式每一列不可再拆分,称为原子性。
总结:每一列都不可再次拆分
示例:
2NF
- 一张表只描述一件事情。
- 表中的每一列都完全依赖于主键
示例:
3NF:
示例:学生信息表
三大范式小结:
数据库备份和还原
备份格式: DOS 下,未登录的时候。这是一个可执行文件 exe,在 bin 文件夹
语法:
- mysqldump -u 用户名 -p 密码 数据库 > 文件的路径
举例:
- USE 数据库;
- SOURCE 导入文件的路径;
步骤
- 删除 day21 数据库中的所有表
- 登录 MySQL
- 选中数据库
- 使用 SOURCE 命令还原数据
- 查看还原结果
图形化界面备份与还原
- 选中数据库,右键 ”备份/导出”
- 指定导出路径,保存成.sql 文件即可。
- 删除数据库
- 数据库列表区域右键“执行 SQL 脚本”, 指定要执行的 SQL 文件,执行即可