一、外键特点:
- 从表外键的值是对主表主键的引用。
- 从表外键类型,必须与主表主键类型一致。
alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
二、多表查询
2.1 交叉查询(笛卡尔积) 【两个表的乘积】
select * from A,B;
2.2 内连接查询
- 隐式内连接:select * from A,B where 条件;
- 显示内连接:select * from A inner join B on 条件;
- /*inner可以省略*/
##建议多表查询时,使用别名
SELECT DISTINCT c.cname FROM category c
INNER JOIN products p ON c.cid = p.category_id
WHERE p.flag = '1';
2.3 外连接
- 左外连接:查询左表(A表)所有的数据,关联的右表(B表)数据是否显示,取决于条件是否成立,如果成立显示数据,如果不成立显示null。
格式:select * from A left outer join B on 连接条件 - 右外连接:查询右表(B表)所有的数据,关联的左表(A表)数据是否显示,取决于条件是否成立,如果成立显示数据,如果不成立显示null。
格式:select * from A right outer join B on 连接条件
Tips:outer可以省略
子查询
select …查询字段 … from … 表… where … 查询条件
#方案1:内连接
SELECT * FROM products p , category c WHERE c.cid = p.category_id AND c.cname='化妆品' AND p.flag = '1';
#方案2:--子查询 --查询条件
SELECT cid FROM category WHERE cname = '化妆品' ;
SELECT * FROM products p WHERE p.category_id = 'c003';
# 查询条件
SELECT * FROM products p WHERE p.category_id = (SELECT cid FROM category WHERE cname = '化妆品')
#方案3:--子查询 --表
# 表
SELECT * FROM category WHERE cname = '化妆品' ;
SELECT * FROM products p , (SELECT * FROM category WHERE cname = '化妆品') c WHERE c.cid = p.category_id;