【数据库笔记04】(表间建立联系,多表查询)

如何联系表

多表之间的关系怎么维护?

  • 外键约束:foreign key
  • 如图建立两个表,给product的cno添加一个外键约束 //references 执行
alter table product add foreign key(cno) references category (cid);
  • 删除表的时候注意
    要先删除外键才能删除表
    在这里插入图片描述
    在这里插入图片描述

多表之间的建表原则

  • 一对多(category、product)
    – 在多的一方添加外键指向一的主键
  • 多对多
    – 将多对多拆成两个一对多,建一个中间表,至少有两个外键,对应两个表
  • 一对一
    – 不常用,拆标时候常用,将两张表合并成一张表 / 将两个表主键建立关系 / 当成一对多处理

多表查询

交叉连接查询 (笛卡儿积)

select * from product,ckinds;
会得到两个表数目乘积数目的数据
这样的数据杂乱且没有意义

在这里插入图片描述在这里插入图片描述在这里插入图片描述

内链接

隐式内链接

select * from product,ckinds where ckid=ckno;
增加where条件过滤

在这里插入图片描述

显式内链接 —— INNER JOIN……ON

select * from product p INNER JOIN ckinds ck ON p.ckid=ck.ckno;
增加where条件过滤

隐式 / 显式内链接的区别

  • 隐式:在查询结果后进行where过滤
  • 显示:带着条件去执行查询 效率更高

外连接

左外连接 —— LEFT OUTER JOIN……ON

select * from product p LEFT OUTER JOIN ckinds c ON p.ckno=c.ckid;
会将左表中的所有数据都查询出来,若右表中没有用 NULL 填充

在这里插入图片描述
在这里插入图片描述

右外连接 —— RIGHT OUTER JOIN……ON

  • 与左表同理

图解

在这里插入图片描述

分页查询 —— limit

select * from product limit 起始索引,个数;
index 代表显示几页
startindex=(index-1)*每页显示个数

在这里插入图片描述

子查询

1.查出所有分类为方便食品的商品)
select * from product where ckno=(select ckid from ckinds where ckname="方便食品");

在这里插入图片描述

2.查询出(商品名称,商品分类名称的信息)
左连接
 select pname,ckname from product p left outer join ckinds c on p.ckno=c.ckid;
子查询
 select pname,(select ckname from ckinds where ckid=ckno) from product;

在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值