MySql二(多表关系和操作)

本文详细介绍了数据库中多表关系的几种类型,包括一对多/多对一、多对多和一对一的关系,并解释了如何通过外键实现这些关系。此外还讨论了外键的完整性约束及其对数据查询的影响,以及各种多表查询的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、多表关系

多表关系

1、一对多/多对一: 在多的一方加入另一方的外键

这里写图片描述

2、多对多: 使用中间表,分别引用两方的ID
如下图:学生s1有两个老师,而老师t1,有两个学生t1,t2对应关系如下

这里写图片描述
3、一对一:

  1. 主键同步 两个表中有关系的记录id一致
  2. 在一方加入 另一方的外键
  3. 在另一方加入外键

    这里写图片描述

2、外键和外键完事性约束

外键能够使多表关联,起到联合查询使用。外键的完事性关系到查询数据的完整性。外键的修改和删除可能对别的表产生影响,因此要对外键进行约束。比如当我们删除第二个表中计算机的时候,第一个表中有对它的引用,造成表的不完整。
下面两张表
这里写图片描述 这里写图片描述
1、增加一个外键约束

ALTER TABLE 表名 ADD CONSTRAINT 外键标识 FOREIGN KEY (表中字段) REFERENCES 表名(表中字段);

ALTER TABLE `t_student` ADD CONSTRAINT `fk_sclass` FOREIGN KEY (`sclass`) REFERENCES `t_teacher`(`sclass`); 

2、删除一个外键约束
ALTER TABLE 库名.表名 DROP FOREIGN KEY 外键名;

ALTER TABLE `student`.`t_student` DROP FOREIGN KEY `fk_sclass`; 

3、多表查询

1、笛卡尔积:把两表的列合并,很多无效数据。

SELECT * FROM t_student,t_teacher;

查询结果
这里写图片描述

2、内连接

这里写图片描述

select * from t_student,t_teacher  where t_student.sclass = t_teacher.sclass;

3、外连接

左外链接:左外连接就是在左边信息显示全的情况下与右边的表链接。能连接上就显示右边的信息,连接不上显示左这表的信息。

INSERT INTO t_student(sid,sname,sage,sclass)  VALUES('0011','s11',20,NULL) ;

假如在t_student表中有一个学生专业的空。那么如果有内链接,这个同学信息应该查询不到。因此有了,左外连接和右外连接
查询结果
这里写图片描述

右外连接与左外连接相似

4、子查询

当一个查询是另一个查询的条件时,称之为子查询。

comparison 一个表达式及一个比较运算符,将表达式与子查询的结果作比较。
expression 用以搜寻子查询结果集的表达式。
sqlstatement SELECT 语句,遵从与其他 SELECT 语句相同的格式及规则。它必须括在括号之中。

示例1 :全部单价比任何以 25% 或更高的折扣卖出的产品高的产品:

SELECT * FROM Products
WHERE UnitPrice > ANY
(SELECT UnitPrice FROM OrderDetails
WHERE Discount >= .25);

示例2、查出年龄大于s2的学生

SELECT * FROM t_student WHERE sage>= (SELECT sage FROM t_student WHERE sname='s2');

查询结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值