连接查询分析,建立索引,走索引规则

表1 t_class

这里准备了四个字段有7条数据
在这里插入图片描述

表2 p_class

也准备了四个字段添加了5条数据 专门设计了几个字段的名字和t_class的相同
在这里插入图片描述

左外连接查询和右外连接查询

试一下下边的查询语句,发现错误

SELECT * FROM t_class AS  t  RIGHT  JOIN p_class AS p

错误结果如下提示

错误代码: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 1000' at line 2

说明左连接和右连接查询必须要加上on后边的约束条件

等值连击

下边执行一下等值约束条件观察一下结果,sql语句如下

SELECT * FROM t_class AS  t  LEFT  JOIN p_class AS p
 ON t.`name` = p.`name`;

结果如下图:
在这里插入图片描述
注意到是7条记录,和左边的表的记录相同,在设计表的时候专门在t_class中添加了两个重复的名字,发现查询出来的结果会和右边表的每个tom都连接上,
那么把左连接改成右连接试一下:

SELECT * FROM t_class AS  t  RIGHT JOIN p_class AS p
 ON t.`name` = p.`name`;

在这里插入图片描述
发现表的记录是6条,比原来p_class的记录多了一条,说明tom会和左边的每个表都进行连接 。
由此可以发现左外连接或者右外连接的等值查询,都是以一个基础表进行连接,查询的结果大于等于基础表的数据行数,没有连接上的行记录,另一个表的字段信息会用null填充。(行记录大于原表的数据行 ,上边那个右连接查询很好展现了这个问题,左表中有相同的字段可以和右表中的一个字段进行连接,所以会出现多的情况。)

不等值连接

接下来试一下不等值连接

SELECT * FROM t_class AS t LEFT OUTER JOIN p_class AS p 
 ON t.`age` > p.`age`;

结果如下:
在这里插入图片描述
从结果可以看出,就是先拿出左边表的每一条记录,然后和右表的每一条记录进行比较,复合约束条件就会显示出来,如果右边表一个约束记录都没有的话,那么右边表的字段信息用null填充,这样的查询出来的记录也是大于等于左边表的行数。
当然右连接范围查询也是一样,只是以右边的表为基准,sql语句如下

SELECT * FROM t_class AS t RIGHT OUTER JOIN p_class AS p 
 ON t.`age` > p.`age`;

结果如下:
在这里插入图片描述

内连接查询

不加约束条件

当我使用内连接查询并且不加on约束条件时,是可以通过查询的,不会报错

SELECT * FROM t_class AS  t  INNER  JOIN p_class AS p ;
SELECT * FROM t_class AS  t  CROSS  JOIN p_class AS p ;

查询出来共有35条记录,也就是和cross join一样是笛卡尔乘积,也就是每一个左边表的数据与右边表的每一条数据进行连接 7*5 = 35

等值约束查询

SELECT * FROM t_class AS  t  INNER  JOIN p_class AS p
 ON t.`name` = p.`name`;

查询出的结果如下:
在这里插入图片描述
这也就是把上边35条数据中复合约束条件的字段进行了筛选,不论如何调换两张表的位置,查询的都是这些字段,对于有多个名字相同并且进行了匹配了的字段,那么就以这个名字进行笛卡尔乘积进行匹配。这里是左边的表两个tom右边的表1个tom, 假如右边表有2个Tom的话 就会再多出一条记录。

范围约束查询

我们执行一下下边的语句

SELECT * FROM t_class AS  t  INNER  JOIN p_class AS p on t.`age` > p.`age`;

查询结果如下:
在这里插入图片描述
并且交叉连接查询的结果也是上边的结果

SELECT * FROM t_class AS  t  CROSS  JOIN p_class AS p 
 ON t.`age` > p.`age`;

这里就是把左外连接和右外连接的没有满足约束条件为null的记录删除了,少了两个为null的记录。说明内连接不会出现为null的约束字段。
关于笛卡尔乘积 cross join 前边也穿插进行了介绍,其实和inner相似
当不加约束条件时和inner的作用一样 ,加了也一样,没有特别的区别。

索引

直接看这个链接
添加链接描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值