MySQL多数据表操作与查询

外键

表与表之间存在“一对多”,“多对一”和“一对一”的关系
多个表之间的关系是通过主键和外键来维护的
外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。

# 类别表
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 39=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

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐