MySQL操作之数据查询语言:(DQL)(四-2)(多表查询)
MySQL操作之概念、SQL约束(一)
MySQL操作之数据定义语言(DDL)(二)
MySQL操作之数据操作语言(DML)(三)
MySQL操作之数据查询语言:(DQL)(四-1)(单表操作)
MySQL操作之数据查询语言:(DQL)(四-2)(多表查询)
MySQL操作之数据控制语言:(DC)(五)
一、主外键特点
- 主表的主键和从表的外键形成主外关系
- 从表外键的值是对主表主键的引用。
- 从表外键类型,必须与主表主键类型一致。
二、一对多操作
添加主外键约束
alter table 从表名 add [constraint 外键约束名称] foreig key 从表(外键) references 主表(主键);
ALTER TABLE product ADD CONSTRAINT fk_cid FOREIGN KEY product(cid) REFERENCES category(cid);
添加数据
INSERT INTO product(pid,pname,price,cid) VALUES(1,'冰箱',8000,1);
三、多对多操作
1、创建中间表,给中间表添加两个外键约束
2、创建表、添加数据
订单表和订单项表的主外键关系
alter table `orderitem` add constraint orderitem_orders_fk foreign key (oid) references orders(oid);
商品表和订单项表的主外键关系
alter table `orderitem` add constraint orderitem_product_fk foreign key (pid) references products(pid)
向中间表中添加数据
INSERT INTO pro_ord VALUES(2,1);
四、多表查询
多表查询:
select * from A,B;
隐式内连接
select * from A,B where 条件;
SELECT p.* FROM products p , category c WHERE p.category_id=c.cid AND c.cname = '化妆品'
显式内连接(inner join – inner可以省略)
select * from A inner join B on 条件;
左外链接(left outer join)
select * from A left outer join B on 条件;
右外连接:(right outer join)
select * from A right outer join B on 条件;
五、子查询
一条select语句结果作为另一条select语法一部分
select ....查询字段 ... from ... 表.. where ... 查询条件
隐式内连接(查询“化妆品”分类上架商品详情)
SELECT p.* FROM products p , category c WHERE p.category_id=c.cid AND c.cname = '化妆品'
作为查询条件
SELECT *FROM products pWHERE p.category_id =(SELECT c.cid FROM category cWHERE c.cname='化妆品');
作为另一张表
SELECT * FROM products p ,
(SELECT * FROM category WHERE cname='化妆品') c WHERE p.category_id = c.cid
- 子条件查询,可以作为查询的条件,也就是查询出来的结果是一个id。或者是名称;
- 作为另一张表。也就是把查询的结果作为另一张表使用;