关联查询的一些用法

目录

1、笛卡尔查询

2、内连接查询

3、外连接查询

a.左外连接查询

b.右外连接查询

c.全外连接查询


关联查询:将多个表联合起来进行查询,主要有内连接、左连接、右连接、全连接(外连接)

#数据准备
create table dept3(
    id int primary key auto_increment,
    name varchar(20)
);
insert into dept3 
values 
(null,'财务部'),(null,'人事部'),(null,'科技部'),(null,'销售部');
​
create table emp3(
    id int primary key auto_increment,
    name varchar(20),
    did int
);
insert into emp3 
values 
(null,'刘备',1),(null,'关羽',2),(null,'张飞',3),(null,'赵云',5);

1、笛卡尔查询

select * from dept3,emp3;
#查询的结果是两张表相乘的结果,称之为笛卡尔积查询
#如果左边表有m条数据,右边表有n条数据,则得到m*n条数据
#笛卡尔积查询没有考虑两张表的对应关系,所以结果中包含大量错误的数据,无法直接使用。
#虽然通常不会直接使用,但笛卡尔积查询是其他多表查询的基础,需要了解

2、内连接查询

#可以在笛卡尔积查询的基础上,基于外键字段筛选出正确的数据
select * from dept3,emp3 where emp3.did = dept3.id;
​
#内连接查询也可以通过专用的语法实现
select * from dept3 inner join emp3 on emp3.did = dept3.id;
#内连接查询只能查询到两张表中都有对应数据的记录。
#对于左边表有而右边表没有数据 和 右边表有而左边表没有的数据 都不会被查询到。

3、外连接查询

a.左外连接查询

在内连接的基础上增加左边表有而右边表没有的记录
select * from dept3 left join emp3 on emp3.did = dept3.id;

b.右外连接查询

在内连接的基础上增加了右边表有而左边表没有的记录
select * from dept3 right join emp3 on emp3.did = dept3.id;

c.全外连接查询

在内连接的基础上增加 左边表有右边表没有的数据 和 右边表有左边表没有的数据
select * from dept3 full join emp3 on emp3.did = dept3.id;
​
mysql不支持全外连接查询,在mysql中需要使用union操作间接完成全外连接查询
select * from emp3 left join dept3 on emp3.did = dept3.id
union
select * from emp3 right join dept3 on emp3.did = dept3.id;

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MySQL中,多表关联查询有几种常用的用法。其中,交叉连接(CROSS JOIN)是最简单的一种,它会返回两个表的笛卡尔积,即每个表中的每一行都与另一个表中的每一行进行组合。子查询是另一种常用的多表查询方法,它可以将一个查询语句嵌套在另一个查询语句中,常出现在WHERE子句中。此外,还有内连接、外连接和分组查询等多表查询方法。 内连接(INNER JOIN)是根据两个表之间的共同字段进行匹配,只返回两个表中匹配的行。外连接(LEFT JOIN、RIGHT JOIN和FULL JOIN)则可以返回两个表中所有的行,即使没有匹配的行也会返回NULL值。分组查询(GROUP BY)可以根据某个字段对查询结果进行分组,并对每个分组进行聚合操作。 举个例子,如果我们想要查询学生表和课程表中的所有课程,包括没有学生的课程,可以使用右外连接(RIGHT OUTER JOIN)来实现。具体的查询语句如下: SELECT s.name, c.course_name FROM students s RIGHT OUTER JOIN course c ON s.course_id = c.id; 这个查询语句会返回所有课程的名称,以及对应的学生姓名。如果某个课程没有学生选择,学生姓名字段会显示为NULL。\[3\] 总之,MySQL中的多表关联查询提供了多种方法来实现不同的查询需求,开发者可以根据具体情况选择合适的方法来进行查询。 #### 引用[.reference_title] - *1* *2* *3* [mysql的多表联合查询](https://blog.csdn.net/qq_53078033/article/details/126021625)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值