联表查询
  1. Q:联表查询中连接的过程是怎样的
  2. Q:联表查询中的过滤条件
  3. Q:联表查询中的访问方式

Q:联表查询中连接的过程是怎样的

假设,我们查询sql中使用的条件涉及两张表,类似select * from table_a , table_b where table_a.cloumn_1 > 1 and table_b.cloumn_1 >1 那么我们:

  1. 首先确认第一张要使用的表,这张表称为驱动表,在本例中,table_a就是驱动表,我们先使用只与该表相关的条件进行单表查询
  2. 之后我们根据单表查询的结果,访问table_b,这个时候table_b称为被驱动表

在上述的过程中,驱动表只需要被访问一次,而被驱动表被访问的次数取决于第一次单表访问的结果集中的记录条数
此外,结合驱动表与被驱动表的概念,设计者们又定义了左外连接右外连接,前者是说以左侧表为驱动表,后者是说以右侧表为驱动表。

Q:联表查询中的过滤条件

首先,我们联表查询的过滤条件有两种,一个是WHERE子句过滤条件,一个是ON子句过滤条件;
接下来,我们说为什么要有不同的查询条件
当我们使用内连接进行查询时,如果无法在被驱动表中查询到符合过滤条件的记录时,那么被驱动表中的记录就不会被添加到结果集中,但是有些情况下,我们却又想获取这类记录,所以就提出了ON子句过滤条件

  • WHERE子句过滤条件:不论是内连接还是外连接,如果无法匹配WHERE条件,对应记录不会被添加到结果集中
  • ON子句过滤条件:对于外连接的驱动表记录来说,即使无法在被驱动表中匹配到记录,也会在最终结果集中加入该记录,被驱动表字段以NULL表示

通常情况下,我们把单表条件放在WHERE子句中,把多表条件放在ON子句中,ON子句中的过滤条件也称为连接条件
:::danger
注意:ON子句条件只生效于外查询,内查询WHERE与ON等价
:::

Q:联表查询中的访问方式

  • eq_ref:在被驱动表上使用主键或者唯一键进行查询的方式