假设,我们查询sql中使用的条件涉及两张表,类似select * from table_a , table_b where table_a.cloumn_1 > 1 and table_b.cloumn_1 >1
那么我们:
table_a
就是驱动表,我们先使用只与该表相关的条件进行单表查询table_b
,这个时候table_b
称为被驱动表在上述的过程中,驱动表只需要被访问一次,而被驱动表被访问的次数取决于第一次单表访问的结果集中的记录条数
此外,结合驱动表与被驱动表的概念,设计者们又定义了左外连接
和右外连接
,前者是说以左侧表为驱动表,后者是说以右侧表为驱动表。
首先,我们联表查询的过滤条件有两种,一个是WHERE
子句过滤条件,一个是ON
子句过滤条件;
接下来,我们说为什么要有不同的查询条件
当我们使用内连接进行查询时,如果无法在被驱动表中查询到符合过滤条件的记录时,那么被驱动表中的记录就不会被添加到结果集中,但是有些情况下,我们却又想获取这类记录,所以就提出了ON
子句过滤条件
通常情况下,我们把单表条件放在WHERE子句中,把多表条件放在ON子句中,ON子句中的过滤条件也称为连接条件
:::danger
注意:ON子句条件只生效于外查询,内查询WHERE与ON等价
:::