外键
表与表之间存在“一对多”,“多对一”和“一对一”的关系
多个表之间的关系是通过主键和外键来维护的
外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。
# 类别表
create table category(
cid int primary key auto_increment,
cname varchar(32)
);
# 商品表
create table product(
pid int primary key auto_increment,
pname varchar(32),
price int,
category_id int
);
假设两张表**“分类表”和“商品表”**,
为了表明商品属于哪个分类,通常情况下,我们将在商品表上添加一列,用于存放分类cid的信息,此列称为:外键
- 外键特点:
- 从表外键的值是对主表主键的引用。
- 从表外键类型,必须与主表主键类型一致。
- sql代码声明和删除外键约束
# 声明:
alter table 从表 add [constraint][外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
# 一个例子
# 添加外键
alter table product
add constraint fk_product_category foreign key (category_id) references category(cid);
# 删除外键
alter table 从表 drop foreign key 外键名称
多表查询
初始数据如下:
表1:category
表2 :products
select * from A,B;
运行代码
select * from category,products
结果为笛卡尔积:
也就是表一的每个列分别和表二所有的列进行组合,产生了 3 ∗ 9 = 27 3*9=27 3∗9=27个结果
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。
内连接
内连接查询(使用的关键字 inner join – inner可以省略)
-
隐式内连接:
select * from A,B where 条件;
-
显示内连接:
select * from A inner join B on 条件;
-- 隐式内连接
SELECT * FROM category c,products p WHERE c.cid = p.category_id;
-- 显示内连接
SELECT * FROM category c INNER JOIN products p on c.cid = p.category_id;
外连接
- 左外连接: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
products p
where
p.category_id = (SELECT cid from category where cname='化妆品') -- 'c003'
-- 子查询 第二种(作为 一张表 使用)
select
p.*
FROM
products p, (select * from category where cname='化妆品') c
WHERE
p.category_id = c.cid;
本文地址:https://blog.csdn.net/qq754772661/article/details/110979334