欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL之多表操作

程序员文章站 2022-05-24 10:26:59
...

目录

多表关系

外键

外键特点

表与表之间的关系

一对一(实际开发中应用不多,一对一可以建成一张表)

一对多(商品与分类)    

多对多(学生和课程)   ------将一个多对多,拆分成两个一对多

多表查询

交叉连接查询(基本不会遇到,笛卡尔积,遍历所有可能)

内连接查询(使用关键字  inner join     --inner可以省略)

外连接查询(使用关键字 outer  join   --outer可以省略)

内外连接的区别


多表关系

  • 外键

假设现在我们有两张表“分类表”和“商品表”,为了表明“商品”属于哪个“分类”,我们在“商品表”上添加一列,用于存放“分类”cid的信息,此列称为:外键

MySQL之多表操作

MySQL之多表操作

此时,“分类表”称为主表,cid称为主键。“商品表”称为从表,category_id称为外键。呈现的是一对多的关系

外键特点

1)从表外键的值是对主表主键的引用

2)从表外键类型,必须与主表主键类型一致

  • 表与表之间的关系

一对一(实际开发中应用不多,一对一可以建成一张表

   两种建表原则:

          外键唯一(unique):主表的主键和从表的外键形成主外键关系,外键唯一unique

          外键是主键:主表的主键和从表的主键,形成主外键关系

一对多(商品与分类)    

MySQL之多表操作

建表原则:从从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

语法:
alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表(主表主键字段名)

小结:

        从表不能添加(更新),主表不存在的数据

        主表不能删除(更新),从表已经使用的数据

多对多(学生和课程)   ------将一个多对多,拆分成两个一对多

                   MySQL之多表操作

建表原则:需要创建第三张表,中间表至少两个字段,这个两个字段分别作为外键指向各自一方的主键

语法

联合主键(可省略)
alter table 'order_item' add primary key(oid,pid);

订单表和订单表项的主外键关系
alter table 'order_item' add constraint orderitem_orders_fk foreign key(oid) references orders(oid);

商品表和订单表象的主外键关系
alter table 'order_item' add constraint orderitem_products_fk foreign key(pid) references products(pid);
  • 多表查询

交叉连接查询(基本不会遇到,笛卡尔积,遍历所有可能)

select * from A,B

内连接查询(使用关键字  inner join     --inner可以省略)

隐式内连接: select  *  from  A,B  where 条件;

显示内连接: select *  from A inner join B on 条件;

外连接查询(使用关键字 outer  join   --outer可以省略)

左外连接: left  outer  join

              select  *  from  A  left outer  join  B  on  条件;

右外连接:  right  outer  join

               select  *  from  A  right outer  join  B  on  条件;

内外连接的区别

MySQL之多表操作

#隐式内连接

select  distinct  cname  from  category  c, products p where  c.cid = p.category_id;

#显式内连接

select  distinct  cname  from  category c   inner  join products  p on c.cid = p.category_id;