MySQL表的增删改查(进阶)

目录

目录

1.数据库约束

为什么要使用数据库约束?

1.1 not null

A. 代码实例 + 理解解释

1.2 unique

A. 代码实例 + 理解解释

a). 名词解释+演示

1.3 default

A. 代码实例 + 理解解释

a). 名词解释+演示

b). order by ... desc 和 desc ... 有什么区别

c). 实操例子

1.4 primary key

A. 代码实例 + 理解解释

a). 名词解释+演示

b).如何保证主键唯一

c). 主键实操​编辑

1.5 foreign key

A. 代码实例 + 理解解释

a). 名词解释

b). 功能体现

c). 如何删除

d). 扩展

a. 是否可以修改不相关的列

b. 是否正确定义

e). 生活实例

a. 电商网站

b. 电脑文件

c. 是否导致硬盘空间满

2.表的设计

设计理念

2.1 一对一

图解

2.2 一对多

图解

2.3 多对多

图解

3.新增

语法

例子

4.查询

进阶查询的介绍 + 注释

4.1 聚合查询

4.1.1 聚合函数

count

sum

avg

max

min

4.1.2 gruop by 

语法

例子

注意

4.1.3 having 

4.2 联合查询

4.2.1 内连接

语法

例子

1.查某一同学成绩

2.查所有同学成绩 + 个人信息

3.查询每个同学每门课课程名字+分数

4.2.2 外连接

语法

概述

例子

4.2.3 自连接

概述

为什么要使用自连接

例子

4.2.4 子查询

单子查询

多子查询

4.2.5 合并查询

union 关键字

与or进行对比

union的注意点

union all 关键字

5.内容总结

5.1 约束类型

5.2 表的关系

5.3 新增加

5.4 查询


1.数据库约束

为什么要使用数据库约束?

目前有student表,book表,time表,那么我要完成学生可以在一个时间范围内借阅图书,并在这个时间范围内归还图书的这个要求有两种选择,一:直接将3张表连接起来。二:创建专门的borrowing表。

建议使用方法二,因为可以使用数据约束,(数据约束:借阅关系表可以设置外键约束,确保录入的数据是有效的关联。比如borrowing表中的student_id必须是student表中已存在的id,这样能防止出现孤立的或无效的借阅记录,保证数据的完整性)。

1.1 not null

指示某列不能存储 NULL 值。

A. 代码实例 + 理解解释

a). 名词解释+演示

b). 注意事项

1.2 unique

保证某列的每行必须有唯一的值。

A. 代码实例 + 理解解释

a). 名词解释+演示

1.3 default

规定没有给列赋值时的默认值。

A. 代码实例 + 理解解释

a). 名词解释+演示
b). order by ... desc 和 desc ... 有什么区别
c). 实操例子

1.4 primary key

not null  unique 的结合。确保某列(或两个列多个列的结合)有唯一标
识,有助于更容易更快速地找到表中的一个特定的记录。

A. 代码实例 + 理解解释

a). 名词解释+演示

b).如何保证主键唯一

c). 主键实操

1.5 foreign key

保证一个表中的数据匹配另一个表中的值的参照完整性。

A. 代码实例 + 理解解释

a). 名词解释

b). 功能体现

c). 如何删除

d). 扩展
a. 是否可以修改不相关的列

b. 是否正确定义

e). 生活实例
a. 电商网站

b. 电脑文件

c. 是否导致硬盘空间满

2.表的设计

设计理念

2.1 一对一

图解

2.2 一对多

图解

2.3 多对多

图解

3.新增

语法

insert into table_name [(colum [, colum ...])] select ...

例子

-- 将学生表中的所有数据复制到用户表

insert into test_user(name, email) select name, qq_mail from student;

4.查询

进阶查询的介绍 + 注释

4.1 聚合查询

4.1.1 聚合函数

count

返回查询到的数据的  数量

sum

返回查询带的数据的  总和,不是数据没有意义

avg

返回查询带的数据的  平均值,不是数据没有意义

max

返回查询带的数据的  最大值,不是数据没有意义

用法与上方一致,就不做介绍

min

返回查询带的数据的  最小值,不是数据没有意义

用法与上方一致,就不做介绍

4.1.2 gruop by 

语法
select column1, sum(column2), .. from table group by column1,column3;
例子

注意

4.1.3 having 

显示平均工资低于 1500 的角色和它的平均工资
select role,max(salary),min(salary),avg(salary) from emp group by role 
having avg(salary)<1500;

4.2 联合查询

4.2.1 内连接

语法
select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
例子

1.查某一同学成绩

2.查所有同学成绩 + 个人信息

3.查询每个同学每门课课程名字+分数

4.2.2 外连接

语法
-- 左外连接,表1完全显示
select 字段名  from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;
概述

例子

4.2.3 自连接

概述

为什么要使用自连接

例子

4.2.4 子查询

单子查询

查找同伴同学,关键突破就是拿到这个班级的id,因为同班=在一个班,在一个班 -> name

多子查询

其实就是简单的替换,套娃一样的查询

4.2.5 合并查询

union 关键字
与or进行对比

union的注意点

1.使用条件

2.筛选数据的个数

3.按照第一个表的数据来命名

union all 关键字

得到所有的数据

5.内容总结

5.1 约束类型

5.2 表的关系

1. 一对一:

2. 一对多:

3. 多对多:需要创建中间表来映射两张表的关系

5.3 新增加

insert into table_name [(colum [, colum ...])] select ...

5.4 查询

1. 聚合函数:max, min, avg, count, sum

2. 分组查询: group by...having...

3. 内连接:

select ... from 表1,表2 where 条件

-- inner可以省略
select ... from 表1 join 表2 on 条件 where 其它条件

4. 外连接:

select ... from 表1 left/right  join 表2 on 条件 where 其它条件;

5.自连接:

select ... from 表1,表1 where 条件;
select ... from 表1 join 表1 on 条件;

6. 子查询:

--sql
--单行子查询
select ... from 表1 where 字段1 = (select ... from ...);

--[not] in
select ... from 表1 where 字段1 in (select ... from ...);

--[not] exists
select ... from 表1 where exists (select ... from ... where 条件);

--临时表:form子句中的查询
select ... from 表1,(select ... from ...) as tmp where 条件;

7.合并查询:

-- union:去除重复数据
select ... from ... where 条件
union
select ... from ... where 条件

-- union all:不去重
select ... from ... where 条件
union all
select ... from ... where 条件

-- 使用union和union all时,前后查询的结果集中,字段需要一致

SQL 查询中各个关键字的执行先后顺序: from > on> join > where > group by > with > having >
select > distinct > order by > limit

总的来说,知识点不算多,但是需要的是每日的练习,来提升熟练度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值