JAVAEE——数据库多表操作
2018-03-14 本文已影响4人
So_ProbuING
外键
我们假设有两张表需要关联,一张product商品表,一张category商品分类表。那么我们通常的做法是,在一张表上添加另一张表的一列信息,例如在商品表中添加分类表的category_id,那么我们称为 category为主表,添加的product表为从表,添加的category_id称为外键,category表的cid称为主键,我们通过主表的主键和从表的外键来描述主外键关系,这样我们就描述了一个一对多的关系。
外键的特点:
* 从表外键的值时对主键的引用
* 从表的外键类型,必须与主键类型一致

声明外键约束
语法
alter table 从表 add[constraint][外键名称] foreign key (从表外键字段名) references (主表的主键)
alter table 从表 drop foreign key 外键名称 -删除外键
# 为从表添加外键
alter table product ADD foreign key(category_id) references category(cid);
多表查询
- 交叉查询 (使用较少)
select * from A,B 得到的是A表和B表的乘积
- 内连接
内连接使用的关键字:inner join(可以省略) 显式内连接- 隐式内连接:select * from A,B where 条件
- 显式内连接:select * from A inner join B on 条件
# 隐式内连接
select * from category c,product p where c.cid = p.category_id
# 显式内连接
select * from category inner join product on cid = product.category_id
select * from category c inner join product p on c.cid = p.category_id;
- 外链接
外链接使用关键字 outer join --outer可以省略- 左外链接:left outer join
select * from A left outer join B on 条件
select * from category LEFT JOIN product on category.cid = product.category_id;
* 右外链接 right outer join
> select * from A right outer join B on 条件
select * from category RIGHT JOIN product on category.cid = product.category_id;
-
左外连接和右外连接的区别
外连接区别.png
子查询
将一条select语句结果作为另一条select语句的一部分(查询条件,查询结果,表等)
select * from product WHERE category_id=(select cid from category WHERE cname = '化妆品');
上面这条SQL语句中 查询条件where category_id 的值成了另一个查询语句的结果