目录
6.3 多表联查
6.3.1 子查询
案例 统计“调查部”和“业务营运部”的员工人数
这个案例设计到了两个表 因为查询的已知条件在一个部门表中 而员工的信息在员工表中 所以按照现阶段的单表查询是做不到这个效果
所以遇到这种情况 我们只能通过连接多个有关系的表来进行查询
创建表的初衷
1.创建表的时候 不能把不同性质的数据放到一个表中
2.修改操作时会影响效率
想把销售部的地址修改成湖南长沙... 芝加哥
update emp set location = "湖南长沙" where dname = "销售部";
数据的粘耦性很差 可以达到数据如果要修改 不会去影响其他表
创建外键来连接多表之间的关系 同时也能约束 表中的数据的合法性
foreign key:外键的关键字
# 一个表中的某个列 是另一个表中的主键 我们可以确定是外键关系
1.创建表的时候添加外键
constraint 外键的名字 foreign key(表1的列名) references 表名2(表2的列);
create table empInfo(
empid int primary key auto_increment,
empName char(4),
number int,
constraint key1 foreign key(number) references dept(deptno)
);
2.表创建好之后添加外键
alter table 表名1 add constraint 外键的名字 foreign key(表1的列名)
reference 表名2(表2的列);
一对一
一对多
多对多
# 子查询:在一个查询中能嵌套另一个查询 一般会由内往外查询
# 查询买了商品id是'TNT2'的用户信息 只显示 用户id和名字
1.根据商品id查询订单号
select order_num from orderitems where prod_id = "TNT2";
2.根据订单号去查询用户id
3.根据用户id去查询用户的详细信息
select cust_id, cust_name from customers where cust_id in(
select cust_id from orders where order_num in(
select order_num from orderitems where prod_id = "TNT2"
)
);
orderitems表:
customers表:
order表: