mysql的7种join理论

本文介绍了SQL查询的基础知识,包括创建索引的方法、SQL执行流程、常见的执行效率问题及其原因,并详细解析了各种JOIN操作的区别与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、复习:

1、创建索引的格式: 表名》user   列名》id,name,sex,email
单列索引:create index idx_user_name on user(name);
组合索引:create index idx_user_nameEmail on user(name,email);

2、select查询顺序
 from>on>join/where>group by>having>select>distinct>order by>limit

3、SQL解析过程:


二、SQL执行慢(执行时间长,等待时间长)的原因
  • 查询语句写的烂
  • 索引失效
  • 关联查询太多的join(数据表设计缺陷or需求要求)
  • 服务器调优及各个参数设置(缓冲、线程数等)

三、JOIN查询
1、select 查询顺序(见 复习部分)
2、join关系图




3、7种join关系SQL(见图)
3.1 左连接 (left join)
3.1.1 一般情况下的左连接

sql: select * from A left join B on A.key=B.key;
说明:A是主表,保留所有信息,当B表中的数据跟A表无关时,B表相关的显示列补NULL

3.1.2 特殊的左连接  

sql: select * from A left join B on A.key=B.key  where B.key is NULL;
说明:查询A表中跟B表无关联关系的数据,即A独占,且B表的显示列补NULL

3.2 右连接(right join)

3.2.1 一般情况下的右连接
sql: select * from A right join B on A.key=B.key;
说明:B是主表,保留所有信息,当A表中的数据跟B表无关时,A表相关的显示列显示内容为NULL


3.2.2 特殊情况下的右连接

sql: select * from A right join B on A.key=B.ikey where A.key is null;
说明:B是主表,表示查询B表中跟A表无关联关系的数据

3.3 内连接 (inner join)


 sql:select * from A inner join B on A.key = B.key;
说明:查询A表中跟B表有关联关系的数据(跟B表无关的数据不显示)

3.4 外连接(full outer join),注:mysql用union关键字(合并去重复)

3.4.1 一般情况下的外连接

 sql: select * from A full outer join B on A.key=B.key;
说明:mysql不支持这种语法,oracle支持。那么在mysql中的sql如何写呢?
A独有+AB共有+B独有,用union关键字(合并去重复)

mysql 的实现:
select  * from A left join B on A.key = B.key;
union
select  * from A right join B on A.key = B.key;



3.4.2 特殊情况下的外连接

 sql: select * from A outer join B on A.key = B.key where A.key is NULL or B.key is NULL ;
说明:感觉条件中的or有点问题,当A.key=1,但B表中并没有B.key=1的时候,这条数据是要显示出来的吧?这里应该用的是and吧?
表示A独占,加上 B独占部分的内容

mysql 的实现:
select  * from A left join B on A.key = B.key where B.key is NULL;
union
select  * from A right join B on A.key = B.key where A.key is NULL;


4


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值