附实现sql连接的4种方法 sql自然连接语句( 三 )


语句11:联合查询(UNION JOIN)例句,还没有找到能执行的SQL环境 。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O UNION JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID
语句12:语句11在DB2下的等价实现 。还不知道DB2是否支持语句11呢!
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID
EXCEPT
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O INNER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;
语句13:语句11在Oracle下的等价实现 。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID
MINUS
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O INNER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;
查询结果如下:
五、自然连接(NATURAL INNER JOIN):说真的,这种连接查询没有存在的价值,既然是SQL2标准中定义的,就给出个例子看看吧 。自然连接无需指定连接列,SQL会检查两个表中是否相同名称的列,且假设他们在连接条件中使用,并且在连接条件中仅包含一个连接列 。不允许使用ON语句,不允许指定显示列,显示列只能用*表示(ORACLE环境下测试的) 。对于每种连接类型(除了交叉连接外),均可指定NATURAL 。下面给出几个例子 。
语句14:
SELECT *
FROM ORDERS O NATURAL INNER JOIN CUSTOMERS C;
语句15:
SELECT *
FROM ORDERS O NATURAL LEFT OUTER JOIN CUSTOMERS C;
语句16:
SELECT *
FROM ORDERS O NATURAL RIGHT OUTER JOIN CUSTOMERS C;
语句17:
SELECT *
FROM ORDERS O NATURAL FULL OUTER JOIN CUSTOMERS C;
六、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、 求差操作的时候用联合查询 。
多个表查询的时候,这些不同的连接类型可以写到一块 。例如:


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: