- 左外连接: left outer join
左外链接列出左边关系中所有的元组
显示结果通常是 左表全部+右表有关联关系的部分,未关联部分 null占位
语法: select * from A left outer join B on 条件;
数据准备:
向 分类表中添加两条数据
INSERT INTO category (cid,cname) VALUES(4,'蔬菜'), (5,'水果')
向 商品表中添加两条数据
INSERT INTO product (pid,pname) VALUE(10,'雪糕'),(11,'切糕')
需求: # 左外 连接 显示 分类名和商品名
谁做左表,谁的信息是完整的.
select *
from product p left outer join category c on p.category_id = c.cid;
select *
from category c left join product p on c.cid = p.category_id;
- 右外连接:right outer join
右外链接列出右边关系中所有的元组
显示结果通常是 右表全部+左表有关联关系的部分,未关联部分 null占位
语法:select * from A right outer join B on 条件;
需求: # 右外 连接 显示 分类名和商品名
谁做右表 谁的信息是全的
select *
from product p right outer join category c on p.category_id = c.cid;
select *
from category c right join product p on c.cid = p.category_id;
- 子查询
要得到的结果集是以另外的结果集为基础得到的。 作用到语法上 则为
一条select语句结果作为另一条select语法一部分(查询条件,查询结果,表等)。
# 查询 服饰类下的所有价格小于500的商品的名字和价格
SELECT pname , price FROM product WHERE category_id = (SELECT cid FROM category WHERE cname='服饰') AND price < 500;
- 理论补充:表之间的关系
- 一对多关系
- 常见实例:客户和订单,分类和商品,部门和员工.
- 一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键.
- 多对多关系:
- 常见实例:学生和课程、用户和角色
- 多对多关系建表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键.
一对一关系:(了解)
- 在实际的开发中应用不多.因为一对一可以创建成一张表.
- 两种建表原则:
- 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一unique。
- 外键是主键:主表的主键和从表的主键,形成
- 主外键关系