`

sql内外连接及on关联条件

 
阅读更多

以下部分为转载。

jion 后面使用on是如果符合ON后的所有条件就返回一行包含两表信息的行,如果不符合就返回只有左表信息的行,当你改条件了符合条件的行数就会变化,返回的结果集也就不一样了

一、概述  

  通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。多表连接查询是使用Sql的基本操作,但连接的方式却有多种,熟练使用这些连接方式能够简化Sql语句,提高数据库运行效率。

  在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。 

  连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 

二、基本语法与方法
  SQL-92标准所定义的FROM子句的连接语法格式为: 

FROM join_table join_type join_table 
[ON (join_condition)]

   其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。 

  join_type 指出连接类型,可分为三种:内连接外连接交叉连接内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同。

  1、内连接又分为等值连接自然连接不等连接三种。 

  2、外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。 

  3、交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 

  连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。 

  无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

  SELECT p1.pub_id,p2.pub_id,p1.pr_info 

  FROM pub_info AS p1 INNERJOIN pub_info AS p2

  ONDATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

  (一)内连接 

  内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种: 

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

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

  3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。 

  例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

  SELECT* 

  FROM authors AS a INNERJOIN publishers AS p

  ON a.city=p.city

 

   SELECT a.*,p.pub_id,p.pub_name,p.country 

FROM authors AS a INNERJOIN publishers AS p

ON a.city=p.city

  又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):

(二)外连接 

  内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。


  1、left join或left outer join(左外连接)

  左外连接 :(也叫左外连接,给出两个表的配匹行,并且以左边的表为准,如果左边表有而右边表没有的行,则在右边表的相应行选择的列显示为NULL,允许左边的基准表对应右边表多条满足条件的记录)左连接就是返回左边的匹配行,不考虑右边的表是否有相应的行

select field1,field2 from table1 leftjoin table2

  
on field1=field2(基准字段,可以多个)

  
where table1.field3=table2.field3

  2、right join或right outer join(右外连接)

  右连接:(也叫右外连接,给出两个表的配匹行,并且以右边的表为准,如果右边表有而左边表没有的行,则在右边表的相应行选择的列显示为NULL,允许右边的基准表对应左边表多条满足条件的记录)

  语法与做链接差不多! 

(三)交叉连接 
  交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 

  例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。 

  SELECT type,pub_name 

  
FROM titles CROSSJOIN publishers

  
ORDERBY type
分享到:
评论

相关推荐

    SQL2005_用户_'sa'_登录失败。该用户与可信_SQL_Server_连接无关联

    此类问题通常伴随着错误信息:“该用户与可信 SQL Server 连接无关联”。这一错误通常是由于身份验证模式配置不当或网络配置问题导致。 #### 问题一:忘记了登录Microsoft SQL Server 2005的sa的登录密码 - **现象*...

    浅谈Linq to sql 的多表关联与动态条件查询

    浅谈Linq to sql 的多表关联与动态条件查询 Linq to sql 是一种强大的数据查询语言,它可以帮助开发者快速、高效地访问和操作数据库数据。在本文中,我们将讨论 Linq to sql 的多表关联和动态条件查询这两个重要的...

    sql查询左连接on与where的区别(2).pdf

    在Left Join的语句中,on关键字用于指定连接条件,它定义了两张表之间如何关联,确保了只有满足特定条件的记录才能被连接。where关键字则用于过滤已经连接之后的结果集,它在连接操作完成后执行,用于进一步筛选满足...

    SQL基本SELECT查询语句_内外连接

    SQL基本SELECT查询语句_内外连接

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

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

    SqlServer连接工具

    SQL Server连接工具是数据库管理员和开发人员用于与Microsoft SQL Server交互的重要软件。这些工具提供了多种功能,包括数据库的创建、管理、查询、备份、恢复以及性能优化等。在本篇文章中,我们将深入探讨SQL ...

    SqlDbx连接oracle

    首先,连接Oracle数据库通常需要Oracle客户端软件,但这里提到的“Sqldbx连接oracle,不用安装client”,意味着SqlDbx可能通过一种无需完整Oracle客户端的方式来实现连接。这种连接方式通常依赖于Oracle的Instant ...

    kettle实现SQL关联查询

    "Merge Join" Step就是其中之一,它允许用户实现类似SQL中的各种类型关联查询,包括INNER JOIN、LEFT JOIN、RIGHT JOIN以及FULL JOIN。 INNER JOIN是SQL中的一种基本联接类型,它返回两个表中存在匹配的记录。在...

    sql左外连接、右外连接、内连接、全外连接的区别

    在SQL语言中,连接(Join)是用于合并两个或多个表中的行的一种非常重要的操作。根据连接的方向和目的,可以分为几种不同的类型:左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)、内连接(INNER JOIN)以及全外连接...

    SQL根据表中某列队值选择关联不同的表

    ### SQL根据表中某列对值选择关联不同的表 在实际的数据处理过程中,经常会遇到根据一个表中的某个字段值来决定与其他哪些表进行关联的情况。这种情况可以通过多种方式来实现,其中最常见的两种方法是使用`CASE`...

    Spotlight on SQL Server

    "Spotlight on SQL Server"很可能是指一款专门针对SQL Server的监控和性能优化工具,它可以帮助管理员深入了解SQL Server的运行状态,识别并解决性能瓶颈。 1. **SQL Server基础知识**:SQL Server是一个全面的...

    sql server客户端连接工具

    SQL Server客户端连接工具是数据库管理员和开发人员用来与Microsoft SQL Server进行交互的重要工具。它提供了图形用户界面(GUI)和命令行选项,使得用户能够轻松地执行查询、管理数据库对象以及进行其他数据库维护...

    SQL Server 连接字符串构造及测试工具

    了解了这些基础知识后,你可以更有效地使用"SQL Server 连接字符串构造及测试工具"来管理和测试你的数据库连接。无论你是开发人员还是系统管理员,这个工具都能极大地简化你的工作,确保你的应用程序能够顺利地与SQL...

    SQL内左右自连接.doc

    这些连接类型都是在查询时将数据从一个表与另一个表关联起来的关键方法。 首先,内连接(INNER JOIN)只返回两个表中匹配的行。这意味着如果在`ON`子句中指定的条件在任一表中找不到匹配项,那么这些行将不会出现在...

    sql语句的内联外联 经典面试题

    SQL语句的内联外联是一种常见的数据库查询技术,它可以根据不同的连接方式将多个表连接起来,提高查询效率和数据整合性。在面试中,SQL语句的内联外联经典面试题是一个非常重要的考察点。本文将对SQL语句的内联外联...

    SQLServer2008客户端连接工具 sql manager工具

    一款免安装的sqlServer2008的客户端连接小工具,里面有详细的使用说明及汉化说明。和mysql 的 sqlyog一个性质。 注册: 运行registor.reg注册。 汉化:(软件运行保存文件目录不要使用中文目录) 1、运行“Manager....

    sqlserver连接测试工具

    sqlserver连接测试工具

    sql 连接测试工具(可测试sql server,mysql,access)

    一直在用的这个工具和大家分享一下,简单易的数据库连接测试工具,主要用来测试是否能连接数据库,不过也可以编码数据库和执行SQL代码,工具虽说,但功能强大。 已测试过 sql server 2000,sql2005,sql2008,mysql, ...

    sql多表关联语句

    ### SQL多表关联查询语句详解 在SQL Server数据库中,多表关联查询是一种非常重要的技术,它允许用户从多个表中检索数据,并且能够处理复杂的数据关系。本篇文章将根据给定的SQL查询示例来详细介绍SQL多表关联查询...

Global site tag (gtag.js) - Google Analytics