1,内部连接(连接操作,如比较运算符或比较运算符的典型用法),包括相等连接和自然连接。
内部连接使用比较运算符匹配两个表中的行,基于每个表的列的值,例如,检索学生和课程表中所有相同的行作为中学生标识号。

2,外部连接。扩展连接可以是左向外连接,右向外连接,或完全外部连接。
如果在from子句中指定了外部连接,则可以由以下组关键字指定:
1)左连接或左外连接
左侧外向连接的结果集包括左外子句中指定的左表的所有行,而不只是连接列匹配的行。如果左行在右行有一行,则没有表,则相关结果集将所有选择列表右行表为空。
2)右连接或右外部连接
右向外连接是左向外连接的反向连接。右表上的所有行都将返回。如果右表中的一行与左表中的行不匹配,则左表将返回空值。
3)完全连接或完全外部连接
完整的外部连接返回左表和右表中的所有行。当一行与另一表中的行不匹配时,另一表的选择列表列包含空值。如果表之间有匹配,则整个结果集行包含基表的数据值。

三.交叉连接
交叉连接返回左侧表中的所有行,左表中的每一行都与右表中的所有行相结合。
from子句中的表或视图可以通过内部连接或完整外部连接以任何顺序指定;但是,当将指定表或视图与左侧或右侧连接时,表或视图的顺序非常重要。

实例uff1a
,
一个ID名称B表ID的工作parent_id
1件31231件
2李四2342
3 Wang Wu 3344
张和parent_id之间的关系
--------------------------------------------------
1)内部连接
选择A *,B *内连接在b.parent_id张=
其结果是
1件31231件
2李四2342

2)左连接
选择A *,B *加入B对张= b.parent_id左
其结果是
1件31231件
2李四2342
3 Wang Wu零

3)正确连接
选择A *,B *从右连接B = b.parent_id张
其结果是
1件31231件
2李四2342
空3344

4)完全连接
选择A *,B *全加入B = b.parent_id张
其结果是
1件31231件
2李四2342
空3344
3 Wang Wu零
--------------------------------------------------------------------------------------------,交叉连接(交叉连接)
交叉连接(交叉连接):有两种类型,显式和隐式,不带on子句,并返回两个表的乘积,也称笛卡尔积。
例如,下面的语句1与语句2的结果相同。

语句1:隐式交叉连接,没有交叉连接。
选择o.id,o.order_number,入境,C.NAME
从订单O,客户C
在o.id = 1;

语句2:使用交叉连接的显式交叉连接。
选择o.id,o.order_number,入境,
c.name
从订单到交叉连接客户C
在o.id = 1;
语句1和语句2的结果是相同的,查询的结果如下:

二、内部连接(内部连接)
内部连接(内部连接):有两个显式和隐式,返回到连接表中的连接条件和查询条件的数据行(所谓链接表是查询中数据库所形成的中间表)。
例如,下面的语句3与语句4的结果相同。

语句3:一个隐式内部连接,没有内部连接,以及两个表中间表的笛卡尔积。
选择o.id,o.order_number,入境,C.NAME
从客户C,订单O
在o.customer_id入境=;

语句4:显示器的内部连接通常称为内部连接,内部连接,两个表构成的中间表在条件之后由条件过滤。
选择o.id,o.order_number,入境,C.NAME
从客户订单内加入C O = o.customer_id入境;
语句3和语句4的查询结果:

三,外部连接(外部连接):连接数据线不仅返回符合连接和查询条件,但也还有些行不符合条件。连接可以分为三类:左外连接(左外连接),连接(右外部联接)和外(全外连接加入)。
三个的共同点是返回符合连接条件和查询条件(即内部连接)的数据行:
左侧外部连接也返回不符合左侧表中不符合连接条件的查询条件的数据行。
连接也返回正确的表,不满足单连接与数据查询的条件。
完整的外部连接还返回不符合连接条件的左表中的行数据,并匹配查询条件。它还返回不符合连接条件的右表中的行,并满足查询条件。
描述:左表是左(外)连接关键字左边的表。右边的表当然是正确的。在三种类型的外部连接中,省略了外部关键字。

以下示例如下:
语句5:左外连接
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单o左外连接客户C = o.customer_id入境;

语句6:加入(右外部联接)
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单O右外部联接客户C = o.customer_id入境;
注意:在后面放置的条件之后,查询的结果是不同的:

语句7:条件是独立的。
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单o左外连接客户C = o.customer_id入境
在o.order_number <> 'mike_order001;

语句8:将语句7中的位置条件放在后面。
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单o左外连接客户C对入境= o.customer_id和o.order_number <> 'mike_order001;

从语句7和语句8的结果中可以看出,语句8的结果是不可理解的,因此,建议在编写连接查询时,只有连接条件后跟on,中间表的约束写在WHERE子句中。

语句9:完全外接。
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单全外连接客户C = o.customer_id入境;
注意:MySQL不支持所有的连接,这里给出的描述适合于Oracle和DB2。但是您可以通过左边和右边获得完整的外部连接查询结果。下面的图是Oracle在Oracle下执行的结果:

语句10:集合的左边和右边,实际上查询结果和语句9是相同的。
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单o左外连接客户C = o.customer_id入境
联盟
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单O右外部联接客户C = o.customer_id入境;
语句9和语句10的查询结果是相同的,如下所示:

四、连接(接头连接):这是一个非常罕见的连接,Oracle和MySQL不支持,其效果是找到所有和内部连接的区别所有行。这个错误在常见的数据分析。你也可以利用数据库的集合操作来实现此功能。
语句11:联盟连接示例还没有找到可以执行的SQL环境。
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单的工会加入客户C = o.customer_id入境

语句12:DB2下的语句11的等效实现。不知道DB2是否支持语句11。
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单全外连接客户C = o.customer_id入境
除了
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单O内加入客户C = o.customer_id入境;

报表13:Oracle下声明11的等效实现。
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单全外连接客户C = o.customer_id入境
减
选择o.id,o.order_number,o.customer_id,入境,C.NAME
从订单O内加入客户C = o.customer_id入境;
查询的结果如下所示:

五,自然连接(自然内部连接):真的,这个连接查询没有价值。因为它在SQL2标准定义的,让我们举个例子来看看,自然连接不需要指定连接柱。SQL检查表中的两个列是否具有相同的名称,并假定它们在连接条件中使用,并且仅在连接条件中包含一个连接列。显示列只能用*(在Oracle环境中进行测试)表示。对于每种类型的连接(除了交叉连接),可以指定自然。
表14:
*选择
从订单内部自然加入客户C;

表15:
*选择
从订单自然左外连接客户C;

表16:
*选择
从订单自然的权利外部加入客户C;

表17:
*选择
从订单自然充分外连接客户C;

六、SQL查询的基本原理:两个案例。
首先,单表查询:根据位置条件,过滤表中的记录形成中间表(中间表对用户是不可见的),然后根据SELECT列选择相应的列返回最终结果。

第二个表连接查询:两个表是正交(笛卡尔积),通过条件和连接类型进行过滤,形成中间表。然后根据位置条件对中间表的记录进行过滤,并根据选择指定的列返回查询结果。

第三、多表连接查询:首先根据两表连接查询的第一和第二的表,然后连接查询,查询结果和第三表等等,直到所有的表连接,最终形成一个中间结果表,然后根据在过滤中间表的记录情况根据指定的列返回查询结果的选择。
对sql查询过程的理解是sql优化的理论基础。

七,后面的条件(条件)和条件之间的差异:
条件是:约束条件来过滤两个链接表的笛卡尔积,形成中间表。
那里的条件:在SELECT语句的条件,这是一个约束过滤中间表。在单表查询没有,它是一种约束限制的物理表或中间查询结果返回的记录。在两台或多台连接的约束限制连接形成最终的中间表的结果。
正如您从这里看到的,将位置条件移到后面是不合适的:
只执行连接操作,只在其中过滤中间表的记录。

八。总结
连接查询是SQL查询的核心,和连接查询的连接类型是根据实际要求来选择。如果选择不当,不仅不能提高查询效率,但会带来一些逻辑错误或低性能。以下是两个表的连接查询选择的依据。
1,检查与内部连接相同数据的两个表关联列。
2、col_l是子集与正确的连接col_r。
3、col_r是子集与左外连接col_l。
4、col_r和col_l相互交叉,但彼此都不是对方的子集。
5。当寻求差异操作时,使用联合查询。
当查询多个表时,可以将这些不同的连接类型写入一个块:
选择t1.c1,t2.cx,t3.cy
从表1
内加入TAB2 T2(T1,T2 C1 = C2)
内部联接表3 T3(T1,T2 C1 =。C3)
左外连接表4对(T2,T3 C2 =。C3);
其中t1×T3,y;
上面的SQL查询演示了多个表连接。