mysql建立三个表_3.mysql多表

03.多表_外键约束:----(如果俩表要约束的话,主表必须要有定义的主键)!

1).什么是外键约束:可以在"从表"的"外键字段"上创建一个"外键约束"

2).外键约束的作用:强制要求"外键"字段的值必须参考"主表"中"主键"字段的值,如果外键中出现了主键中没有的值, 数据库会立即抛异常,它可以保证我们数据的完整性和一致性。

3).其它说明:外键字段允许:NULL值

外键的值可以重复,可以为NULL,但必须参考主表的主键的值。(从表不能添加,主表不存在的数据 ; 主表不能删除,从表已使用的数据。)(在一对多关系中,存在一种父子关系,主表又称为父表,从表又称为从表 )

4).创建语句:

格式:alter table 从表 add constraint 外键名称 foreign key (从表外键字段名) references 主表 (主表的主键);

例如:

ALTER TABLE emp ADD CONSTRAINT fk_emp FOREIGN KEY (deptId) REFERENCES dept (did);

方法二,手动添加外键约束-->在架构设计器中,将从表的外键 托向 主表的主键.

5).可以使用SQLYog中的"架构设计器"来设置两个表的关系。(手动添加外键约束 )

注意:从"从表"向"主表"中拖拽。

04.多表查询:

1).交叉查询:(错误的结果,显示的两个表的记录的乘积,也叫:笛卡尔积)

select * from product,category;

2).内连接查询【最常用】:(显示两个表的等值记录)

1).隐式内连接【常用】:    from 俩表 where 俩表的等值关系

格式:  select 字段列表    from 从表,主表   where 从表.外键字段 = 主表.主键字段:

例如:

select * from product,category where product.cid = category.cid;

2).显示内连接: inner join ... on 等值关系---(从表和主表没有位置关系,可以交换位置)

格式:    select 字段列表  from 从表 INNER JOIN 主表 ON 从表.外键字段 = 主表.主键字段

例如:

select * from product inner join category on product.cid = category.cid;

3).关于"表别名"

例如:

select * from product p,category c where p.cid = c.cid;

select * from product p inner join category c on p.cid = c.cid;

4).关于隐式和显示连接的其它写法:

1).隐式内连接:select ... from 从表 , 主表 on 从表.外键字段 = 主表.主键字段;//错误

2).显示内连接:select ... from 从表 inner join 主表 where 从表.外键字段 = 主表.主键字段;//OK的,但不建议

3).外连接查询【较常用】:(分:左外连接和右外连接)

1).左外连接:能查询出"左表"的所有记录,包括跟右表等值的和不等值的。

格式:select 字段列表 from 从表 left join 主表 on 从表.外键字段 = 主表.主键字段;

需求:查询出所有商品,有类别的显示类别名称,没有类别的显示NULL

select * from product p left join category c on p.cid = c.cid; (与显示内连接的区别,就是用left替换了inner)

2).右外连接:能查询出"右表"的所有记录,包括跟左表等值的和不等值的。

格式:select 字段列表 from 从表 right join 主表 on 从表.外键字段 = 主表.主键字段;

需求:查询出所有的"商品类别",有商品的类别要同时显示商品,没有的显示NULL

select * from product p right join category c on p.cid = c.cid;

9255015.html

05.子查询:

1).什么是子查询:一个查询的查询条件,需要从另一个查询来获取,这样就要嵌套两个查询语句。作为其他查询的条件的查询就是:子查询;

2).例如:查询出价格比"海澜之家"更高的商品信息:

select * from product where price > (select price from product where pname = '海澜之家');

3).例如:查询"化妆品"分类商品详情

1).select * from product where cid = (select cid from category where cname = '化妆品')---属于:单表查询

//子查询的结果作为另个表

2).select * from product p , (select * from category where cname = '化妆品') c where p.cid = c.cid;

4).例如:查询"化妆品"和"家电"两个商品详情

1).select * from product p , (select * from category where cname in ('化妆品','家电')) c where p.cid = c.cid;

06.三表联查:

1).内连接查询:     (表2, 就是中间表)

1).隐式内连接:

select * from 表1 , 表2 , 表3 where 表1 和 表2的等值关系 and 表2和表3的等值关系;

2).显示内连接:

select * from 表1 inner join 表2 on 表1和表2的等值关系 inner join 表3 on (表1和表2的连接结果)和 表3的等值关系;

2).外连接查询:

select * from 表1 left/right join 表2 on 表1和表2的等值关系 left/right join 表3 on (表1和表2的连接结果)和表3的等值关系;


版权声明:本文为weixin_31653971原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。