欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL多数据表操作与查询

程序员文章站 2022-04-11 09:54:11
外键表与表之间存在“一对多”,“多对一”和“一对一”的关系多个表之间的关系是通过主键和外键来维护的外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。# 类别表create table category(cid int primary key auto_increment,cname varchar(32));# 商品表create table product(pid int primary key auto_increment,pname varch...

外键

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

# 类别表
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
MySQL多数据表操作与查询
表2 :products
MySQL多数据表操作与查询

select * from A,B;

运行代码

select * from category,products

结果为笛卡尔积:
也就是表一的每个列分别和表二所有的列进行组合,产生了 3 ∗ 9 = 27 3*9=27 39=27个结果
MySQL多数据表操作与查询
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。

MySQL多数据表操作与查询

内连接

内连接查询(使用的关键字 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;

MySQL多数据表操作与查询

外连接

  • 左外连接: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

相关标签: java mysql sql