您的位置:首页 > 数据库

内联,左外联,右外联,全连接,交叉连接 的区别

2014-03-13 11:06 393 查看
连接分为:内连接、外连接、交叉连接 一、内连接——最常用 定义:仅将两个表中满足连接条件的行组合起来作为结果集。 在内连接中,只有在两个表中匹配的行才能在结果集中出现 关键词:INNER JOIN 格式:SELECT 列名表 FROM 表名1 [INNER] JOIN 表名2 ON或WHERE 条件表达式 说明: (1)列名表中的列名可以出自后面的两个表,但如果两个表中有同名列,应在列名前标明出处,格式为:表名.列名 (2)若连接的两个表名字太长,可以为它们起个别名。 格式为:表名 AS 别名 (3)INNER是默认方式,可以省略eg:select *from   t_institution iinner join t_teller ton i.inst_no = t.inst_nowhere i.inst_no = "5801"其中inner可以省略。等价于早期的连接语法select *from t_institution i, t_teller twhere i.inst_no = t.inst_noand i.inst_no = "5801"二、外连接 1、左(外)连接 定义:在内连接的基础上,还包含左表中所有不符合条件的数据行,并在其中的右表列填写NULL 关键字:LEFT JOINeg:select *from   t_institution ileft outer join t_teller ton i.inst_no = t.inst_no其中outer可以省略。注意:当在内连接查询中加入条件是,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。当把条件 加入到 join子句时,SQL Server、Informix会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。如果将条件放到where子句 中,SQL Server将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。下面的两个查询展示了条件放置位子对执行结果的影响:条件在join子句select *from   t_institution ileft outer join t_teller ton i.inst_no = t.inst_noand i.inst_no = “5801”结果是:inst_no     inst_name             inst_no     teller_no   teller_name5801        天河区                5801        0001        tom5801        天河区                5801        0002        david5802        越秀区5803        白云区条件在where子句select *from   t_institution ileft outer join t_teller ton i.inst_no = t.inst_nowhere i.inst_no = “5801”结果是:inst_no     inst_name             inst_no     teller_no   teller_name5801           天河区                    5801          0001               tom5801           天河区                    5801          0002              david2、右(外)连接 定义:在内连接的基础上,还包含右表中所有不符合条件的数据行,并在其中的左表列填写NULL 关键字:RIGHT JOIN 3、完全连接 定义:在内连接的基础上,还包含两个表中所有不符合条件的数据行,并在其中的左表、和右表列填写NULL 关键字:FULL JOIN 三、交叉连接 定义:将两个表的所有行进行组合,连接后的行数为两个表的乘积数。(笛卡尔积) 关键词:CROSS JOIN 格式:FROM 表名1 CROSS JOIN 表名2四, 自身连接自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。例如人力资源数据库中雇员与老板的关系。下面例子是在机构表中查找本机构和上级机构的信息。select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_namefrom t_institution ijoin t_institution son i.superior_inst = s.inst_no结果是:superior_inst sup_inst_name         inst_no     inst_name800                             广州市                5801        天河区800                             广州市                5802        越秀区800                             广州市                5803        白云区
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库