`
azrael6619
  • 浏览: 580706 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

sql server 左连接、右连接和全连接

阅读更多

确切的说是inner joins內连接.
  內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。
  为更好的理解这个概念,我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表(msp)。
party(Code,Name,Leader)
Code: 政党代码
Name: 政党名称
Leader: 政党领袖
msp(Name,Party,Constituency)
Name: 议员名
Party: 议员所在政党代码
Constituency: 选区
  在介绍左连接、右连接和全连接前,有一个数据库中重要的概念要介绍一下,即空值(NULL)。
  有时表中,更确切的说是某些字段值,可能会出现空值, 这是因为这个数据不知道是什么值或根本就不存在。
  空值不等同于字符串中的空格,也不是数字类型的0。因此,判断某个字段值是否为空值时不能使用=,<>这些判断符。必需有专用的短语:IS NULL 来选出有空值字段的记录,同理,可用 IS NOT NULL 选出不包含空值的记录。
  例如:下面的语句选出了没有领导者的政党。(不要奇怪,苏格兰议会中确实存在这样的政党)
SELECT code, name FROM party
WHERE leader IS NULL
  又如:一个议员被开除出党,看看他是谁。(即该议员的政党为空值)
SELECT name FROM msp
WHERE party IS NULL
  好了,让我们言归正传,看看什么叫左连接、右连接和全连接。
  A left join(左连接)包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
  同理,也存在着相同道理的 right join(右连接),即包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
而full join(全连接)顾名思义,左右表中所有记录都会选出来。
  讲到这里,有人可能要问,到底什么叫:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
  我们来看一个实例:
SELECT msp.name, party.name
FROM msp JOIN party ON party=code
  这个是我们上一节所学的Join(注意:也叫inner join),这个语句的本意是列出所有议员的名字和他所属政党。
  很遗憾,我们发现该查询的结果少了两个议员:Canavan MSP, Dennis。为什么,因为这两个议员不属于任何政党,即他们的政党字段(Party)为空值。那么为什么不属于任何政党就查不出来了?这是因为空值在作怪。因为议员表中政党字段(Party)的空值在政党表中找不到对应的记录作匹配,即FROM msp JOIN party ON party=code 没有把该记录连接起来,而是过滤出去了。
  在该短语中,msp在Join的左边,所有称为左表。party在Join的右边,所有称为右表。
  现在再看看这句话,“包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录”,意思应该很明白了吧。执行下面这个语句,那两个没有政党的议员就漏不了了。
SELECT msp.name, party.name
FROM msp LEFT JOIN party ON party=code
  关于右连接,看看这个查询就明白了:
SELECT msp.name, party.name
FROM msp RIGHT JOIN party ON msp.party=party.code
  这个查询的结果列出所有的议员和政党,包含没有议员的政党,但不包含没有政党的议员。 那么既要包含没有议员的政党,又要包含没有政党的议员该怎么办呢,对了,全连接(full join)。
SELECT msp.name, party.name
FROM msp FULL JOIN party ON msp.party=party.code

 

oracle中一般用“+”来代替,例如:select * from a,b where a.id(+)=b.id

加号在左边为右连接,即右边的所有数据全部显示

分享到:
评论

相关推荐

    SQL左外连接,右外连接,全连接,内连接四种连接的差异[参照].pdf

    主要的连接类型有内连接、左外连接、右外连接和全连接。理解这些连接方式的区别有助于设计更有效的查询,以满足不同的数据需求。 1. **内连接(Inner Join)**: 内连接只返回那些在两个表中都存在匹配的行。...

    ORACLE和SQL Server的语法区别

    - **Oracle:** Oracle支持多种类型的外部联接,如左外联接(LEFT OUTER JOIN)、右外联接(RIGHT OUTER JOIN)和全外联接(FULL OUTER JOIN)。 ```sql SELECT column1, column2 FROM table1 LEFT OUTER JOIN ...

    sqlserver sql语法大全

    外连接包括左外连接、右外连接和全外连接,用于处理不同表之间的关联数据。 **左外连接示例:** ```sql SELECT * FROM [表1] LEFT JOIN [表2] ON [表1].id = [表2].id; ``` **右外连接示例:** ```sql SELECT * ...

    核心业务的SqlServer日常巡检项目

    在SQL Server数据库管理中,日常巡检是保证系统稳定运行的关键环节。巡检不仅涉及到硬件资源的监控,还包括对数据库内部活动的分析。对于高并发、关键性的数据库系统,简单的硬件状态检查远远不够,需要深入到数据库...

    9.sql.server.2005.连接查询 9.sql.server.2005.连接查询

    接下来,我们要讨论的是外连接,包括左连接(Left Join)、右连接(Right Join)和全连接(Full Join)。外连接会返回所有来自一个表的记录,即使在另一个表中没有匹配的记录。在左连接中,所有的左表记录都会被包含...

    SQL Server 单表多表连接语句总结..pdf

    本文主要介绍了五种类型的表连接:内部连接、外部连接(包括左连接、右连接和全外连接)、交叉连接以及自连接,并提供了相应的示例。 1. 内部连接(Inner Join): 内部连接是最常见的连接类型,它只返回两个表中...

    MS.SQL.Server.2008.技术内幕:T-SQL.查询.rar

    2. **联接操作**:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)的概念及用法,以及如何使用JOIN子句合并多个表的数据。 3. **子查询**:嵌套查询的使用,包括在WHERE...

    sql server 语句语法应用讲解

    最后,`lab833-6-1 查询多重表.sql`可能涵盖联接查询(JOIN),这是在多表环境中获取数据的关键操作,包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。 通过学习这些...

    浅谈《SQL Server数据库》教学中的连接查询和嵌套查询.pdf

    外连接可以分为左外连接、右外连接和全外连接三种,左外连接是指限制连接条件右边的表中的数据必须满足连接条件,而不关左边的表中的数据是否满足连接条件,均输出左边表中的内容,右外连接与左外连接类似,只是右端...

    SQL Server2005教程

    - 理解不同类型的联接(如内联、左外联接、右外联接和全联接)。 8. **事务和并发控制** - 了解ACID属性(原子性、一致性、隔离性和持久性)。 - 理解事务的使用和事务隔离级别,以及死锁的预防和解决。 9. **...

    SQL server-2017-学习笔记.docx

    多表查询涉及到联接(JOIN)操作,如内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)。ML查询可能是指多层(Multilevel)查询,通常在复杂的数据结构中使用。 ...

    apress advanced transact-sql for sql server 2000

    - **外连接**:分为左外连接、右外连接和全外连接。 - **左外连接**:返回左表中的所有记录,以及右表中匹配的记录;如果右表没有匹配项,则使用 NULL 填充。 - **右外连接**:与左外连接相反,返回右表中的所有...

    SQLServer数据库设计和高级查询15

    主要包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)等。通过连接查询,可以从多个表中获取所需的信息,并且可以根据特定条件进行筛选。 3. **分组与聚合函数**:GROUP BY子句...

    SQL SERVER 2000查询语句

    常见的连接类型有内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。例如,找出订单和对应客户的详细信息: ```sql SELECT Orders.OrderID, Customers.CustomerName FROM...

    sqlserver sql语句.全.有注释.word文档

    8. **联接操作**:`JOIN`语句用于合并两个或更多表的数据,如内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。 9. **子查询**:子查询是嵌套在其他查询中的查询,可以用于...

    SQL SERVER基本语法参考

    这种方式称为内连接(INNER JOIN),还有左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)等。 - **子查询**: ```sql INSERT INTO table_name (column1, column2) SELECT columnx, columny ...

    SQLServer中复杂sql语句查询

    SQL Server支持多种联接类型,如内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN),用于在多个表之间提取数据。例如,当需要从销售订单表和客户表中获取订单信息及其对应的...

    SQL Server T-SQL高级查询

    - 内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)是SQL连接的几种类型。 #### 8. 子查询 - **子查询**:嵌套在另一个SQL查询中的查询。 - 子查询可以用于SELECT...

Global site tag (gtag.js) - Google Analytics