`
bupter520
  • 浏览: 55676 次
  • 性别: Icon_minigender_2
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

表连接查询INNER JOIN/OUTER JOIN/CROSS JOIN

阅读更多


多表查询常涉及到到表连接的问题,主要涉及到内连接:
INNER JOIN,外连接:LEFT JOIN(or LEFT OUTER JOIN),RIGHT JOIN(or RIGHT OUTER JOIN),FULL JOIN和交叉连接:CROSS JOININNER JOIN也叫等值链接。内连接具有排他性,而OUTER JOIN却是包容性的。

表连接进行查询都是会产生一张中间的临时表,然后再将这张临时表返回给用户。通用的SQL语句:SELECT (待查询字段名) FROM 表一 (JOIN TYPE) 表二ON (JOIN CONDITION) [其他对临时表记录进行过滤的条件]

几种连接方式查询结果区别大致如下:

INNER JOIN:只返回两个表中连接字段相同的行(即符合条件的行);

LEFT JOIN: 返回包括左表中的所有记录和右表中联结字段相等的记录;

RIGHT JOIN: 返回包括右表中的所有记录和左表中联结字段相等的记录;

FULL JOIN:两个连接表的所有记录;

CROSS JOIN:不带WHERE子句,返回所有数据行的笛卡尔乘积.

           

表一:TAB_EMP

ID

EMP_NAME

DEPT

1

Eric Huang

1

2

Alice

3

3

Peter

1

4

Green

 

 

表二:TAB_DEPT

ID

DEPT_NAME

1

研发部

2

财务部

3

国际事业部

4

综合管理部

5

销售部

 

INNER JOIN 方式:

SQL>SELECT t1.emp_name, t2.dept_name FROM tab_emp t1 INNER JOIN tab_dept t2 ON t1.dept=t2.id;

执行结果:



 

分析:可以看出采用INNER JOIN方式时,只会列出满足连接条件的记录;

 

LEFT JOIN 方式:

SQL>SELECT t1.emp_name, t2.dept_name FROM tab_emp t1 LEFT JOIN tab_dept t2 ON t1.dept=t2.id;

执行结果:



 

 

分析:可以看出采用LEFT JOIN方式时,左表中的记录和右表中联结字段相等的记录会全部列出,而右表中连接字段不相等的字段全部为null

 

RIGHT JOIN 方式:

SQL>SELECT t1.emp_name, t2.dept_name FROM tab_emp t1 RIGHT JOIN tab_dept t2 ON t1.dept=t2.id;

执行结果:



 

 

分析:可以看出采用RIGHT JOIN方式时,返回包括右表中的所有记录和左表中联结字段相等的记录;,若左表中连接字段不相等的字段全部为null

 

FULL JOIN 方式:

SQL>SELECT t1.emp_name, t2.dept_name FROM tab_emp t1 FULL JOIN tab_dept t2 ON t1.dept=t2.id;

执行结果:



 

 

分析:可以看出采用FULL JOIN方式时,左表的所有记录会全部返回,右表的所有记录也会全部返回,匹配的就直接列出,不匹配的某一边的记录值为null就行;

 

CROSS JOIN方式:

值得注意的是该方式语法上和其他几种有点差别,不能用on子句。

SELECT * FROM [表一] CROSS JOIN [表二] 或者

SELECT * FROM [表一], [表二]

SQL> SELECT t1.emp_name, t2.dept_name FROM tab_emp t1 CROSS JOIN tab_dept t2;



 

分析:最后返回的记录数实际上就是两张表记录数的乘积。该类型的JOIN句法不需要连接条件,一个表中的所有行分别都会连接另一个表的所有行,得到的结果被称为一个笛卡尔积。

 

            最后总结一下,实际项目开发中CROSS JOIN用得比较少,它是不能使用ON关键字的,其它都要用。一般先进行连接获取到需要的新表数据,然后使用其他子句如where子句进行过滤,group by子句进行聚合,order by子句进行排序等等操作。

采用JOIN方式多表连接查询时,如果如果用到了GROUP BYGROUP BY 的排序顺序必须和SELECT中列出的字段顺序的一致. 这可能是由于GROUP BY 决定了表的排序方式, 如果是左外连接, 如果右边没有对应的话,还要填补空值. 如果排序方式对应不起来, 就会错乱。

  • 大小: 2.2 KB
  • 大小: 2.3 KB
  • 大小: 2.9 KB
  • 大小: 3.2 KB
  • 大小: 7.7 KB
1
0
分享到:
评论
2 楼 javaeyetodj 2010-11-08  
学习了理解了 
1 楼 zl-2577 2010-08-17  
不错,说的很详细。

相关推荐

    inner join-outer join-cross join查询方式总结

    在数据库查询中,为了获取跨多个表的数据,通常需要使用到表连接技术。根据连接方式的不同,可以分为内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN 和 FULL JOIN)以及交叉连接(CROSS JOIN)。下面我们将...

    SQL中的left outer join,inner join,right outer join用法详解

    2. 左外连接(Left Outer Join):包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行。 3. 右外连接(Right Outer Join):包含右边表的全部行(不管左边的表中是否存在与它们...

    SQL联合查询inner join、outer join和cross join的区别详解

    对于开发使用到数据库的应用,免不了就要使用联合查询,SQL中常用的联合查询有inner join、outer join和cross join;这三者的区别很多人都应该不是很清楚,包括我自己,下面我们一起来看看,如果你使用join连表,...

    SQL中inner join、outer join和cross join的区别

    根据不同的连接方式,`JOIN`可以分为几种类型,包括`INNER JOIN`、`OUTER JOIN`(左外联接`LEFT JOIN`、右外联接`RIGHT JOIN`以及全外联接`FULL JOIN`)和`CROSS JOIN`。每种类型的`JOIN`都有其独特的应用场景和特点。...

    Mysql之innerjoin,leftjoin,rightjoin详解.pdf

    full outer join 和 cross join 广泛应用于多表查询中,例如: * 查询两个表中的所有记录,并将它们组合成一个结果集 * 查询两个表中的所有记录,并将它们组合成一个结果集,而不管是否有匹配的记录

    SQL多表连接查询、多表关联

    sql多表连接查询inner join, left join , right join ,full join ,cross join Posted on 2008-05-07 21:55 我开始懂了 阅读(21431) 评论(9) 编辑 收藏 inner join,full outer join,left join,right jion 内部连接 ...

    SQL连接JOIN例

    左连接(`LEFT JOIN`/`LEFT OUTER JOIN`)、右连接(`RIGHT JOIN`/`RIGHT OUTER JOIN`)、全连接(`FULL JOIN`/`FULL OUTER JOIN`)、内连接(`INNER JOIN`/`JOIN`)以及交叉连接(`CROSS JOIN`)和自连接。 #### 二、左连接 ...

    数据库的外联和内联知识 Inner Join

    在关系数据库管理系统中,SQL 语言提供了多种类型的连接方式,如 inner join、left outer join、right outer join、full outer join、cross join 等。 inner join,也称为等值连接或自然连接,是最常见的一种连接。...

    join on 语句及扩展

    在SQL查询中,JOIN操作是用于合并两个或更多表中的数据的关键部分,它允许你在不同表之间建立联系,以便从多个源获取所需的信息。这里我们将深入探讨几种JOIN类型及其使用,以及ON和WHERE子句的区别。 1. INNER ...

    表连接 SQL JOIN 速查表

    在SQL中,表连接(JOIN)是用于合并两个或多个表的数据的关键操作,它允许你在查询时基于共同的列从不同的表中检索信息。这里我们将深入探讨几种主要的JOIN类型,包括自然JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN...

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

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

    数据库各种join连接

    数据库中的join连接是指将两个或多个表连接起来,以便检索数据的操作。Join连接可以分为交叉连接、内连接和外连接三种类型。 一、交叉连接(Cross Join) 交叉连接也叫笛卡尔积,返回的是两表的乘积。交叉连接有两...

    SQL多表连接查询

    为了实现这种关联性的查询,SQL提供了多种表连接方式,包括内连接(INNER JOIN)、左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)、全外连接(FULL JOIN)以及交叉连接(CROSS JOIN)。本文将详细解析这些连接方式...

    sql语句中join的用法

    下面我们将详细介绍几种常见的JOIN类型:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)以及全连接(FULL JOIN),并通过具体的例子进行说明。 #### 一、内连接(INNER JOIN) 内连接是最常用...

    PL/SQL Join实例分析

    在数据库查询中,JOIN操作是连接两个或多个表的关键部分,用于从这些表中提取相关数据。在PL/SQL(Oracle数据库的编程语言)中,JOIN语法尤其重要,因为它是处理复杂查询的基础。以下是PL/SQL中不同类型的JOIN及其...

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

    根据连接的方式不同,可以分为左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内连接(INNER JOIN)、全连接(FULL JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。每种连接类型都有其特定的应用场景和使用...

    MySQL中基本的多表连接查询教程

    在MySQL数据库中,多表连接查询是数据操作的重要部分,特别是在处理复杂的数据关系时。本文将详细介绍MySQL中涉及的几种基本的多表连接查询方法,包括笛卡尔积、内连接和外连接,以及它们的使用场景和技巧。 1. ...

    关于SQL语句的多表连接查询

    在SQL语言中,多表连接查询是数据库操作中不可或缺的一部分,尤其在处理复杂的数据关联时显得尤为重要。这个主题主要涉及到如何将多个数据表中的信息整合在一起,以满足特定的查询需求。下面我们将深入探讨这个话题...

Global site tag (gtag.js) - Google Analytics