所有的连接一般分为两大类:
内部联接
外部链接
一.内部联接
内部联接的两个语法
SQL:2003
定义的语法使用SELECT语句的FROM子句来连接表:
…
from <table>
[inner|natural|cross] join <table>
[on <condition>]|[using <column name>,…],…
…
说明:
1.内部联接选项
在一个内部联接中,有下列选项:
INNER关键字是可选的,它用于明确区分内部联接和外部链接。
NATURAL关键字用于指定两个表之间的自然连接,即通过名称相同的列将两个表联接起来。NATURAL关键字不能同时调用ON和USING字句。在三大RDBMS中,只有Oracle 11g可以使用NATURAL。
CROSS 关键字用于交叉联接。
2.ON和USING字句
ON子句指定连接条件(等值连接或非等值连接)。
指定一个自然连接时,USING子句指示要使用的列。当自然联接无法正常工作时,也将用到USING子句。
在三大RDBMS中,只有Oracle 11g支持USING字句,但ON字句也可以得到相同的结果。
旧语法
每个供应商通常都使用另一个语法在WHERE子句执行连接。
...
where
[<qualifier>.]<coluimn_name><join_condition> [<qualifier>.]<coluimn_name>
and
[<qualifier>.]<coluimn_name><join_condition> [<qualifier>.]<coluimn_name>
, ...
在等同联接中,join_condition可以是=
在非等同联接中,join_condition可以是>,<,>=,<=,!=
等同联接
最常用的表连接类型,两列之间完全匹配。
SQL:2003标准语法
select cust_id_n,cust_name_s,phone_phonenum_s,phone_type_s
from customer join phone
on cust_id_n=phone_custid_fn
自然联接
自然联接是一种在RDBMS中执行的同等联接特例,基于下面的假设:“总是通过名称相同的一列(或多列)联接表。”
换言之,在SELECT语句的FROM子句中,不需要在ON分子句中显示指定列,完全省略分子句ON。
旧语法
在SELECT语句的WHERE子句中联接表。
该语法的反对者的主要观点是WHERE子句中不能混合联接和谓词,它的唯一目的是对产生的结果集设置“
垂直”限制。
支持者的主要观点是对于联接很多表的查询,旧语法更具有可读性。另一个主要争论点是遗留代码,尤其
是对于Oracle,在9i版本之前,标准语法都是不好用的。
非同等联接
有时需要基于条件而不是等同性来联接表。同等联接的典型应用时处理主键/外键关系,而非同等联接则不同,非同等联接通常会以一种无意义的方式填充结果集。
例:如果用<>(不等于)代替前一节查询中的=(等于)运算符,那么查询结果将返回所有客户和电话号码的组合。而不豪阔那些实际上标识有效客户、电话号码的列表。换言之,结果和笛卡尔积有些相似。
自连接
自连接:一个表不与其他表而与自身进行连接。
尽管实际上表与自身进行连接,但是处理的仍然是同一表的两个实例。或者说是两个相同的表,而不只是一个表,所以,自联接可以认为是多表联接的一种特殊情况。
注意:理解一个表和它实例的不同之处也是很重要的。两个表实例可以认为是表的数据被载入两个不同的存储单元,彼此完全分离。
SELECT r.reseller_id_n AS res_id,
r.reseller_name_s AS res_name,
s.reseller_id_n AS sup_id,
s.reseller_name_s AS sup_name
FROM reseller r JOIN reseller s
on r.reseller_supplier_id=s.reseller_id_n
交叉连接(笛卡尔积)
两个表的交叉联接或笛卡尔积,可以定义为从两个源表中,选取可能的匹配行组成另一个表(可能是虚表)。
SQL:2003
select cust_name_s,phone_phonenum_s from customer cross join phone
旧语法
select cust_name_s,phone_phonenum_s from customer , phone
对两个以上的表进行连接
多表联接的联接数目
n个表的查询中,应该至少有n-1个连接。如果少于n-1个联接,结果将是一个笛卡尔积。
注意:最常见的(和最危险的)交叉联接类型发生在包含两个以上的表的查询中,这种情况下,不必省略where子句,只需要跳过十几个表中的两个表的联接就足够了。
SQL2003
连接4个表的查询中
select distinct customer.cust_name_s
from customer
join order_head
on customer.cust_id_n=order_header.ordhdr_custid_fn
join order_line
on order_head.ordhdr _id_n= order_line. ordline_ordhdrid _fn
join product
on product.prod_id_n=order_line. ordline_prodid_fn
旧语法
在where子句中写入联接条件。
二.外部联接
根据包含NULL值的列联接表
外部联接的两个语法
SQL:2003
…
from <table>
{left|right|full[outer]}|union join
<table>
[on <condition>]|[using <column name>,…]
, …
但是只有Oracle实现了using字句。
旧语法
使用where子句。但Oracle和SQL Server实现方式也不相同(DB2没有用于外部联接的“旧”语法,它一开始旧兼容SQL2003)
Oracle 11g
旧的右外联接或左外联接,通过在表面之后添加一个(+)来表示,并且这个表在=的相应边没有匹配行,完
全外部联接只能通过与SQL:2003兼容的语法指定。
右外连接
...
where
[<qualifier>.]<coluimn_name>= [<qualifier>.]<coluimn_name>(+)
...
左外连接
...
where
[<qualifier>.]<coluimn_name>(+)= [<qualifier>.]<coluimn_name>
...
左外部联接
外部连接背后的总体思想是检索表A(左)或表B(右)的所有行,如果在对应的表中没有匹配值,联接列便为NULL。一个左(或右)外部联接对所有连接表中不匹配的列也返回NULL值(只包含那些含NULL联接列的行时)。
1.SQL2003标准语法
分享到:
相关推荐
本文档为通用SQL数据库查询时所用,讲述的是多表连接!~
SQL表连接是数据库查询中非常重要的一个概念,它允许我们从多个表中获取相关数据,合并成一个单一的结果集。本文将详细解释SQL中的四种主要表连接类型:内连接(Inner Join)、左连接(Left Join)、右连接(Right ...
内容概要:本文详细介绍了Oracle SQL中的表连接技术,包括常见的连接类型如排序--合并连接(SMJ)、嵌套循环(NL)和哈希连接(HJ)。文中解释了每种连接的工作原理、适用场景以及优缺点,通过具体示例展示了这些...
多表连接的多种方式.sql
SQL表连接查询是数据库操作中不可或缺的部分,尤其在处理涉及多张表的复杂查询时显得尤为重要。表连接允许我们从多个相关联的表中检索出所需的数据,避免了单独对每张表进行多次操作,提高了查询效率。接下来,我们...
SQL Server连接工具是数据库管理员和开发人员用于与Microsoft SQL Server交互的重要软件。这些工具提供了多种功能,包括数据库的创建、管理、查询、备份、恢复以及性能优化等。在本篇文章中,我们将深入探讨SQL ...
SQL表连接是数据库查询中的重要概念,用于合并两个或多个表的数据,以便在查询结果中获得完整的信息。这里主要讨论两种常见的SQL表连接写法,它们分别是基于`WHERE`子句的传统连接(ANSI SQL 86标准)和使用`JOIN`...
首先,连接Oracle数据库通常需要Oracle客户端软件,但这里提到的“Sqldbx连接oracle,不用安装client”,意味着SqlDbx可能通过一种无需完整Oracle客户端的方式来实现连接。这种连接方式通常依赖于Oracle的Instant ...
在SQL中,你为达此目的将需要进行一个四表连接的查询。 =运算符不仅可以被用来比较属性的值,也可以用来比较实
一、SQL连接查询类型: 1. 内连接(INNER JOIN):返回两个表中匹配的行。 2. 左连接(LEFT JOIN):返回左表的所有行,即使右表没有匹配的行,结果用NULL填充。 3. 右连接(RIGHT JOIN):与左连接相反,返回右表的...
解决oracle sqldeveloper无法连接mysql、SQLServer问题,sqlDeveloper是ORACLE数据库开发工具,自带的是无法连接MS SQL Server以及mysql的,想连接的话需要第三方工具。 使用方法: 解压出来后将2个jar放入jlib...
系统需要收集、存储和处理用户的故障报告,这涉及到创建数据库表,定义数据结构,以及编写处理数据的SQL语句。首先,你需要确定使用SQL Server还是Access作为后端数据库,然后按照上述方法建立连接。确保系统的数据...
SQL连接器是数据库管理系统与应用程序之间的重要桥梁,它允许程序通过特定的接口与各种数据库进行交互,从而实现数据的查询、插入、更新和删除等操作。在本文中,我们将深入探讨SQL连接器的工作原理、常见类型以及...
在关系型数据库中,join操作是将不同的表中的数据联合在一起时非常通用的一种做法。首 先让我们看看join是如何操作的,然后我们探索一下当join和where语句同时存在的时候的 执行顺序问题,最后来谈一谈不同类型的...
### SQL Server连接字符串详解 在IT领域中,数据库的连接是进行数据操作的基础步骤之一。本文将基于“SQL Server连接字符串大全”的主题,详细介绍不同版本的SQL Server(如2000、2005等)及其不同环境下的连接字符...
可以通过系统表来查询 SQL Server 数据库连接数。具体步骤如下: 1. 使用以下查询语句:`SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN (SELECT [DBID] FROM [Master].[dbo].[SYSDATABASES] WHERE ...
SQL SERVER 连接 Oracle 数据库几种方法 在实际开发中,我们经常需要在 SQL Server 中连接 Oracle 数据库,以便实现数据交换和集成。那么,如何在 SQL Server 中连接 Oracle 数据库呢?下面我们将介绍几种常见的...