网站的广度,产教融合平台建设网站,绘本借阅网站开发,阿里网站建设App开发1、内联接
#xff08;典型的联接运算#xff0c;使用像 或 之类的比较运算符#xff09;。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如#xff0c;检索 students和courses表中学生标识号相同的所有行。
2、…1、内联接
典型的联接运算使用像 或 之类的比较运算符。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如检索 students和courses表中学生标识号相同的所有行。
2、外联接
外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM子句中指定外联接时可以由下列几组关键字中的一组指定
1LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行则在相关联的结果集行中右表的所有选择列表列均为空值。
2RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行则将为左表返回空值。
3FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时则另一个表的选择列表列包含空值。如果表之间有匹配行则整个结果集行包含基表的数据值。
3、交叉联接
交叉联接返回左表中的所有行左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定但是用左或右向外联接指定表或视图时表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息请参见使用外联接。
一、交叉连接CROSS JOIN
交叉连接CROSS JOIN有两种显式的和隐式的不带ON子句返回的是两表的乘积也叫笛卡尔积。
例如下面的语句1和语句2的结果是相同的。 语句1隐式的交叉连接没有CROSS JOIN。 SELECT O.ID, O.ORDER_NUMBER, C.ID, C.NAME FROM ORDERS O , CUSTOMERS C WHERE O.ID1;
语句2显式的交叉连接使用CROSS JOIN。 SELECT O.ID,O.ORDER_NUMBER,C.ID, C.NAME FROM ORDERS O CROSS JOIN CUSTOMERS C WHERE O.ID1; 语句1和语句2的结果是相同的查询结果如下
二、内连接INNER JOIN
内连接INNER JOIN有两种显式的和隐式的返回连接表中符合连接条件和查询条件的数据行。所谓的链接表就是数据库在做查询形成的中间表。
例如下面的语句3和语句4的结果是相同的。 语句3隐式的内连接没有INNER JOIN形成的中间表为两个表的笛卡尔积。 SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME FROM CUSTOMERS C,ORDERS O WHERE C.IDO.CUSTOMER_ID;
语句4显示的内连接一般称为内连接有INNER JOIN形成的中间表为两个表经过ON条件过滤后的笛卡尔积。 SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME FROM CUSTOMERS C INNER JOIN ORDERS O ON C.IDO.CUSTOMER_ID; 语句3和语句4的查询结果
三、外连接OUTER JOIN
外连不但返回符合连接和查询条件的数据行还返回不符合条件的一些行。外连接分三类左外连接LEFT OUTER JOIN、右外连接RIGHT OUTER JOIN和全外连接FULL OUTER JOIN。
三者的共同点是都返回符合连接条件和查询条件即内连接的数据行。不同点如下
左外连接还返回左表中不符合连接条件单符合查询条件的数据行。
右外连接还返回右表中不符合连接条件单符合查询条件的数据行。
全外连接还返回左表中不符合连接条件单符合查询条件的数据行并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集去掉重复即“全外左外 UNION 右外”。
说明左表就是在“LEFT OUTER JOIN”关键字左边的表。右表当然就是右边的了。在三种类型的外连接中OUTER 关键字是可省略的。
注意MySQL是不支持全外的连接的这里给出的写法适合Oracle和DB2。但是可以通过左外和右外求合集来获取全外连接的查询结果。下图是上面SQL在Oracle下执行的结果
四、联合连接UNION JOIN
这是一种很少见的连接方式。Oracle、MySQL均不支持其作用是找出全外连接和内连接之间差异的所有行。这在数据分析中排错中比较常用。也可以利用数据库的集合操作来实现此功能。
五、自然连接NATURAL INNER JOIN
说真的这种连接查询没有存在的价值。
自然连接无需指定连接列SQL会检查两个表中是否相同名称的列且假设他们在连接条件中使用并且在连接条件中仅包含一个连接列。不允许使用ON语句不允许指定显示列显示列只能用*表示ORACLE环境下测试的。对于每种连接类型除了交叉连接外均可指定NATURAL。
六、SQL查询的基本原理
两种情况介绍。
第一、单表查询 根据WHERE条件过滤表中的记录形成中间表这个中间表对用户是不可见的然后根据SELECT的选择列选择相应的列进行返回最终结果。
第二、两表连接查询 对两表求积笛卡尔积并用ON条件和连接连接类型进行过滤形成中间表然后根据WHERE条件过滤中间表的记录并根据SELECT指定的列返回查询结果。
第三、多表连接查询 先对第一个和第二个表按照两表连接做查询然后用查询结果和第三个表做连接查询以此类推直到所有的表都连接上为止最终形成一个中间的结果表然后根据WHERE条件过滤中间表的记录并根据SELECT指定的列返回查询结果。
理解SQL查询的过程是进行SQL优化的理论依据。
七、ON后面的条件ON条件和WHERE条件的区别
ON条件是过滤两个链接表笛卡尔积形成中间表的约束条件。
WHERE条件在有ON条件的SELECT语句中是过滤中间表的约束条件。
在没有ON的单表查询中是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。
从这里可以看出将WHERE条件移入ON后面是不恰当的。推荐的做法是
ON只进行连接操作WHERE只过滤中间表的记录。
八、总结
连接查询是SQL查询的核心连接查询的连接类型选择依据实际需求。如果选择不当非但不能提高查询效率反而会带来一些逻辑错误或者性能低下。下面总结一下两表连接查询选择方式的依据
1、 查两表关联列相等的数据用内连接。
2、 Col_L是Col_R的子集时用右外连接。
3、 Col_R是Col_L的子集时用左外连接。
4、 Col_R和Col_L彼此有交集但彼此互不为子集时候用全外。
5、 求差操作的时候用联合查询。
多个表查询的时候这些不同的连接类型可以写到一块。例如
SELECT T1.C1,T2.CX,T3.CY
FROM TAB1 T1INNER JOIN TAB2 T2 ON (T1.C1T2.C2)INNER JOIN TAB3 T3 ON (T1.C1T2.C3)LEFT OUTER JOIN TAB4 ON(T2.C2T3.C3);
WHERE T1.X T3.Y;最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你