SQL的内連接,外連接的一點小小的總結

我的這個問題是從看 4gl代碼的時候帶出來的疑問,平時老沒有注意這個問題,現在下班了,抽個時閒做個總結,以免以後再犯糊塗。

如:

  let ls_sql=" SELECT  rvu08,rvv31,ccp03,rvu04,pmm22,rvv32[1,2],sum(rvv17),sum(rvv17*rvv38),",
              "  sum(rvv17*rvv38*pmm42),sum(rvv17*rvv38*pmm42)/sum(rvv17),pmm43,gec07 ",
              " FROM rvu_file,rvv_file,ccp_file, pmm_file,outer gec_file ",

 

這裡就有個 outer,對這一類的語句的感覺都是模模糊糊i的。

總結如下

左连接 (left join),又称内部连接 inner join

 

SELECT A1.store_name, SUM(A2.Sales) SALES
FROM Georgraphy A1, Store_Information A2
WHERE A1.store_name = A2.store_name ( )
GROUP BY A1.store_name

這個句子表示 在A2表右邊有個加號。所以結果中所有A2的行都要列出來。

SQL--JOIN之完全用法

SQL--JOIN之完全用法



外联接外联接可以是左向外联接、右向外联接或完整外部联接
在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:

LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集括 LEFT OUTER 子句中指定的匹配条件的行左表的所有行

RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外联接是左向外联接的反向联接。将返回匹配条件的行右表的所有行

FULL JOIN 或 FULL OUTER JOIN。
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

内联接 仅 当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。

 

 

  • 關於informix方面的解釋是

     

     
    在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。连接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。
    SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。

    连接类型
    定义
    内连接
    只连接匹配的行
    左外连接
    包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
    右外连接
    包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
    全外连接
    包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
    (H)(theta)连接
    使用等值以外的条件来匹配左、右两个表中的行
    交叉连接
    生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配

    在INFORMIX中连接表的查询
    如果FROM子句指定了多于一个表引用,则查询会连接来自多个表的行。连接条件指定各列之间(每个表至少一列)进行连接的关系。因为正在比较连接条件中的列,所以它们必须具有一致的数据类型。
    SELECT语句的FROM子句可以指定以下几种类型的连接

    FROM子句关键字
    相应的结果集
    CROSS JOIN
    笛卡尔乘积(所有可能的行对)
    INNER JOIN
    仅对满足连接条件的CROSS中的列
    LEFT OUTER JOIN
    一个表满足条件的行,和另一个表的所有行
    RIGHT OUTER JOIN
    与LEFT相同,但两个表的角色互换
    FULL OUTER JOIN
    LEFT OUTER 和 RIGHT OUTER中所有行的超集

 

 

内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接。 

 在句子中,其實inner join 也就等於什麽都不限制的。

select * from t_institution i inner join t_teller t on i.inst_no = t.inst_nowhere i.inst_no = "5801"

 

這裡的 inner可是省略。相當於

select * from t_institution i, t_teller t where i.inst_no = t.inst_noand i.inst_no = "5801

 

 

剛剛開篇提到的那個outer我查了半天也在旺上查不到是外連接還是内連接。所以只好自己做個測試看看。真是浪費資源。。。。。。。。

不果現在要下班了,來不及了,明天再測試。。。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值