MySQL操作之数据查询语言:(DQL)(四-2)(多表查询)

MySQL操作之概念、SQL约束(一)
MySQL操作之数据定义语言(DDL)(二)
MySQL操作之数据操作语言(DML)(三)
MySQL操作之数据查询语言:(DQL)(四-1)(单表操作)
MySQL操作之数据查询语言:(DQL)(四-2)(多表查询)
MySQL操作之数据控制语言:(DC)(五)

一、主外键特点

  1. 主表的主键和从表的外键形成主外关系
  2. 从表外键的值是对主表主键的引用。
  3. 从表外键类型,必须与主表主键类型一致。

二、一对多操作

添加主外键约束

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。或者是名称;
  • 作为另一张表。也就是把查询的结果作为另一张表使用;
posted @ 2019-07-21 16:06  ah_lydms  阅读(79)  评论(0编辑  收藏  举报