MySQL之外键约束及三种子查询(转载)

外键

我们项目中都会有很多表。为什么不使用单表呢?查询效率低,数据冗余。

为什么要使用多表?查询效率高,数据不冗余。

由多表引入外键这个概念:什么是外键呢? 举例来讲,员工表有:

部门表有:

员工表中部门 dept_id 与部门表中部门 id 对应,那员工表的部门 dept_id 就叫做外键

拥有外键的员工表被称为从表 , 与外键对应的主键所在的部门表叫做主表。 创建外键约束格式:

# 创建 employee 员工表,添加外键约束 
CREATE TABLE employee( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), age INT, dept_id INT, # 添加外键约束 CONSTRAINT emp_dept_fk FOREIGN KEY(dept_id) REFERENCES department(id));
复制代码

删除外键格式:

# 语法格式
alter table 从表 drop foreign key 外键约束字段;
# 例子,删除 employee 表中的外键约束,外键约束名 emp_dept_fk 
alter table employee drop foreign key emp_dept_fk;
复制代码

添加外键格式:

# 语法格式
alter table 从表 add foreign key (外键约束字段) references 主表 (主键字段);
# 例子,添加 employee 表外键约束
alter table employee add foreign key (dept_id) references department (id);
复制代码

注意: 从表外键类型必须与主表主键类型一致,否则创建失败添加数据时,应该先添加主表中的数据删除数据时,应该先删除从表中的数据

子查询

一、何为子查询?

一条 select 查询语句的结果, 作为另一条 select 语句的一部分。 二、子查询特点?

1、子查询要放在小括号里2、子查询作为父查询的查询条件使用。 三、子查询分类?

1、where 型语法:

SELECT 查询字段 FROM 表 WHERE 字段=(子查询);
复制代码

2、from 型语法:

SELECT 查询字段 FROM (子查询)表别名 WHERE 条件;
复制代码

3、exists 型( in 函数)语法:

SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
复制代码

四、举例子说明实际中如何使用

有 products 商品表

有 category 类目表:

1、where 型例子: 通过子查询的方式, 查询价格最高的商品信息

# 通过子查询的方式, 查询价格最高的商品信息 
# 1.首先查询出最高价格 
SELECT MAX(price) FROM products; 
# 2.将最高价格作为条件,获取商品信息 
SELECT * FROM products WHERE price = (SELECT MAX(price) FROM products);
复制代码

2、from 型例子:查询商品中,价格大于500的商品信息,包括 商品名称 商品价格 商品所属分类名称

select  p.`pname`,  p.`price`,  c.cnamefrom  products pinner join (  select    *  from    category) c on # 此处c:子查询作为一张表使用时,要起别名,才能访问表中字段   p.`category_id` = c.cidwhere  p.`price` > 500;
复制代码

3、exists 型例子:查询家电类与鞋服类下面的全部商品信息

select  *from  productswhere  category_id in (  select    cid  from    category  where    cname in ('家电', '鞋服'));
复制代码


作者:大田测试录
链接:https://juejin.cn/post/7090746196582481928
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值