mysql内联查询原理_MySQL——(6)多表查询原因原理

多个表之间可以通过主键外键之间的联系进行查询

创建表 表之间的关系一对一 多对一 常规操作

CREATE TABLE car(name varchar(20), color varchar(20), pid int,

CONSTRAINT c_p_fk FOREIGN KEY(pid) REFERENCES peison(id)

)

创建表的时候建立联系多对多

需要额外创建一张表

添加外键 将额外的关系表与实际的表联系起来

示意图

上代码

CREATE TABLE teach(tid INT PRIMARY KEY, name VARCHAR(50));

CREATE TABLE stu(sid INT PRIMARY KEY, name varchar(50));

CREATE TABLE tea_stu_rel(tid INT, sid INT);

ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(tid) REFERENCES teach(tid);

ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(sid) REFERENCES teach(sid);

为什么要拆分表,将表与表之间进行关联?都写在一个表里不好吗?

答:避免冗余。

例如上图的表,原本表中,为了显示张三的分数,其它多余的数据多次出现

解决方法 将成绩score令开一个表 通过sid->id之间的关系将两张表连接起来

多表查询合并结果集

连接查询

子查询

自连接

合并结果集

定义:合并结果集就是把两个select语句的查询结果合并到一起

方式:UNION --> 合并时取出重复记录

UNION --> 合并时不去除重复记录

格式:

SELECT * FROM 表1 UNION SELECT * FROM 表2;

SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;

注意事项:被合并的两个结果,列数,列类型必须相同

示例:

首先创建两张表:

合并

连接查询

定义:也叫跨表查询,需要关联多个表进行查询

笛卡尔集:

笛卡尔集会产生不必要的数据,这是我们在实际应用中不需要的

举例:

首先创建两张表

直接查询 产生笛卡尔集

SELECT * FROM stu,score;

既然这样查询会出现笛卡尔集 那如何多表联查,保证数据正确?查询时要把主键和外键保持一致

SELECT * FROM stu st, score sc WHERE st.id = sc.sid;主表当中的数据参照子表当中的数据

原理

逐行判断,相等的留下,不相等的全部不要

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值