`
eric.zhang
  • 浏览: 126087 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQL连接(内连接,左连接,右连接,自连接)详解

    博客分类:
  • SQL
阅读更多
create table department( id number primary key, name varchar2(30));

create table employee(  id number primary key,  name varchar2(30) not null,  salary number(6,2),  title varchar2(30),  manager number,  deptid number);
  
insert into department values(1,'人力资源');
insert into department values(2,'开发中心');
insert into department values(3,'总裁室');

insert into employee values(4,'赵六',9000,'项目经理',null,2);
insert into employee values(3,'王五',7000,'项目组长',4,2);
insert into employee values(1,'张三',6000,'程序员',3,2);
insert into employee values(2,'李四',7000,'HR',4,1);


不同的 SQL JOIN
    * JOIN: 如果表中有至少一个匹配,则返回行
    * LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
    * RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
    * FULL JOIN: 只要其中一个表中存在匹配,就返回行

INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "employee" 中的行在 "department" 中没有匹配,就不会列出这些行。

LEFT JOIN 关键字会从左表 (employee) 那里返回所有的行,即使在右表 (department) 中没有匹配的行。

RIGHT JOIN 关键字会从右表 (department) 那里返回所有的行,即使在左表 (employee) 中没有匹配的行。

FULL JOIN 关键字会从左表 (employee) 和右表 (department) 那里返回所有的行。如果 "employee" 中的行在表 "department" 中没有匹配,或者如果 "department" 中的行在表 "employee" 中没有匹配,这些行同样会列出。

注释:INNER JOIN 与 JOIN 是相同的。
注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。


内连接:是最常用的链接,也叫等值链接
不管限制条件在on中还是在where中,内连接都得到笛卡尔积中满足所有条件的记录。对于inner join, on和where的效果是一样的。

1)当没有限制条件,此时为笛卡尔积:
  select * from employee , department ;
  select * from employee inner join department on 1=1;

得到的效果是一样的.



2)此时如果加上where限制条件,则对上面笛卡尔积的每一条记录看它是否满足限制条件,如果满足,则它在结果集中。
select * from employee emp , department dept where emp.deptid= dept.id;
select * from employee emp inner join department dept on emp.deptid= dept.id;





外连接
  则分为"左外连接(左连接)","右外连接(右连接)"两种情况: left join / right join

交叉连接(完全连接)cross join 不带 where 条件的

左连接(left join):
1)当没加限制条件时,得到笛卡尔积,同内连接没加限制条件一样
 
select * from employee left join department on 1=1;


2)当添加特定条件时:
  oracle数据库中可以用(+)来实现, 
select * from employee emp , department dept where emp.deptid= dept.id(+);

即“(+)”所在位置的另一侧为连接的方向,左连接说明等号左侧的所有记录均会被显示,无论其在右侧是否得到匹配;
等同于:
select * from employee emp left join department dept on emp.deptid= dept.id;





右连接:
  oracle数据库中可以用(+)来实现, 
select * from employee emp , department dept where emp.deptid(+)= dept.id;

即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配;
等同于:
select * from employee emp right join department dept on emp.deptid= dept.id;




全连接:会从左表 (employee) 和右表 (department) 那里返回所有的行。如果 "employee" 中的行在表 "department" 中没有匹配,或者如果 "department" 中的行在表 "employee" 中没有匹配,这些行同样会列出
 

连接分为三种:内连接、外连接、交叉连接  
 
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。

3、自然连接(仅仅是一种特的等值连接):在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
      
外连接:  
分为三种:左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种  
 
交叉连接(CROSS JOIN)   
没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积 
先返回 左表所有行,左表行在与右表行一一组合,等于两个表相乘

select * from employee emp cross join department dept




如果需要加条件,则使用where

select * from employee emp cross join department dept where emp.deptid= dept.id; 
--等同于
select * from employee emp inner join department dept on emp.deptid= dept.id;





两个主要的连接类型是内连 接和外连 接。到目前为止,所有示例中使用的都是内连 接。内连 接只保留交叉积中满足连接条件的那些行。如果某行在一个表中存在,但在另一个表中不存在,则结果表中不包括该信息。
外连 接是内连 接和左表和/或右表中未包括内连 接中的那些行的并置。当对两个表执行外连 接时,可任意将一个表指定为左表而将另一个表指定为右表。外连 接有三种类型:

左外连 接包括内连 接和左表中未包括在内连 接中的那些行。

右外连 接包括内连 接和右表中未包括在内连 接中的那些行。

全外连 接包括内连 接以及左表和右表中未包括在内连 接中的行。
内连 接一般是检索两个表里连接字段都存在的数据。
左连接的意思是,查询左(语句前面)表里的所有内容,无论右边表里有没有。右边表里没有的内容用NULL代替。
右连接和左连接相反。

数据表的连接有:
1、内连 接(自然连接): 只有两个表相匹配的行才能在结果集中出现
2、外连 接: 包括
(1)左外连 接(左边的表不加限制)
(2)右外连 接(右边的表不加限制)
(3)全外连 接(左右两表都不加限制)
3、自连接(连接发生在一张基表内)



  • 大小: 38 KB
  • 大小: 28.8 KB
  • 大小: 28 KB
  • 大小: 31.3 KB
  • 大小: 40.2 KB
  • 大小: 30.1 KB
2
5
分享到:
评论

相关推荐

    SQL 连接 JOIN 例解左连接,右连接,全连接,内连接,交叉连接,自连接

    本文将详细介绍六种主要类型的 JOIN:左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)、内连接(INNER JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。通过实例讲解每种连接的特点和应用...

    SQL左连接,右连接,内连接,交叉连接,自连接

    ### SQL连接JOIN详解 #### 一、概述 在关系型数据库管理系统中,连接(JOIN)是一种重要的查询方式,用于从两个或多个表中提取数据。根据连接的方式不同,可以分为左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内...

    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接

    根据连接的方式和结果,SQL连接可以分为内连接、左连接、右连接、全连接和交叉连接等多种类型。 内连接 内连接是最基本的连接类型,它将两个表格中的数据根据某个条件连接起来。内连接可以分为等值连接、不等值...

    sql内连接和外连接

    ### SQL内连接与外连接详解 #### 一、SQL内连接(INNER JOIN) **定义**: 内连接(INNER JOIN)是一种最常用的连接方式,它仅返回两个数据集合中具有匹配关系的那些行。具体来说,它会从位于两个互相交叉的数据...

    SQL 四种连接-左外连接、右外连接、内连接、全连接详解

    SQL中的四种连接方式是数据库操作中非常重要的概念,它们分别是内连接、左外连接、右外连接和全连接。理解这四种连接可以帮助我们更有效地从多个表中提取所需信息。 1. **内连接(Inner Join)** 内连接是最常见的...

    sql中各种连接详解

    ### SQL中的各种连接详解 在数据库操作中,连接(Join)是SQL语言中非常重要的一个概念,用于将多个表的数据组合在一起,以便于查询和分析。本文将详细解析Oracle数据库中常用的几种连接类型:内连接(INNER JOIN)...

    SQL Server 2005 启用远程连接

    ### SQL Server 2005 启用远程连接详解 #### 一、为SQL Server 2005启用远程连接 在默认情况下,SQL Server 2005 的配置是只允许本地连接,为了实现远程访问,需要进行一系列的设置。 **步骤1:** 打开SQL Server...

    外连接,内连接 图文详解

    本文将详细解释五种主要的连接类型:外连接(外连接)、内连接(内连接)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)以及交叉连接(CROSS JOIN)。 1. **内连接(INNER JOIN)**: 内连接...

    intouch与SQL连接方法

    ### Intouch与SQL连接方法详解 #### 一、引言 在北京汉锦电子自动化系统有限公司的文档中,王明明详细介绍了Intouch与SQL Server数据库之间的连接方法。这是一篇非常实用的技术指南,对于那些需要在Intouch环境中...

    sqlserver连接字符串大全

    ### SQL Server连接字符串详解 在IT领域中,数据库的连接是进行数据操作的基础步骤之一。本文将基于“SQL Server连接字符串大全”的主题,详细介绍不同版本的SQL Server(如2000、2005等)及其不同环境下的连接字符...

    由浅入深sql语句(外键,左关联,右关联,全关联)

    SQL语言作为数据库的标准操作语言,提供了多种方式来进行表间的关联查询,其中最为常见的是内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)以及全连接(FULL OUTER JOIN)。本文将深入浅出地介绍...

    sql 连接字符串

    ### SQL连接字符串详解 在开发基于数据库的应用程序时,正确配置SQL连接字符串是至关重要的一步。连接字符串定义了应用程序如何与数据库服务器建立连接,并指定了连接所需的各项参数。本篇文章将详细探讨...

    sqlserver连接oracle

    SQL Server 连接 Oracle 服务器详解 SQL Server 作为链接服务器连接 Oracle 数据库,需要配置 Windows 的 ODBC 数据源和 SQL Server 2000 中的连接服务器。下面将详细介绍配置过程和连接方法。 配置 Windows 的 ...

    Oracle左连接,右连接.doc

    ### Oracle左连接与右连接详解 #### 一、概述 在数据库操作中,表与表之间的连接是非常重要的操作之一。连接操作可以将多个表的数据整合在一起,形成更完整的信息视图。根据不同的需求,Oracle提供了多种连接方式...

    怎么使用C语言连接SQL数据库

    ### 如何使用C语言连接SQL数据库 在计算机编程领域中,使用C语言连接SQL数据库是一项基本而重要的技能,尤其对于初级和中级学习者而言。本文将详细介绍如何利用C语言进行数据库连接与简单查询操作,帮助读者更好地...

    sql 左连接总结~~~~~~~~~~~

    ### SQL左连接、右连接及内连接详解 #### 一、引言 SQL连接操作是数据库查询中最常用的功能之一,它允许我们从多个表中获取数据,并基于某些条件将这些表的数据组合在一起。本文主要围绕SQL中的左连接(left join)...

    sql内连接、外连接

    ### SQL内连接、外连接详解 #### 一、引言 在进行数据库操作时,我们经常需要从多个表中获取数据。为了实现这一目标,SQL提供了多种连接方式,包括内连接(Inner Join)、左连接(Left Join)、右连接(Right Join...

Global site tag (gtag.js) - Google Analytics