【数据库笔记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;

在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页