一、概述
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。多表连接查询是使用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 INNER JOIN pub_info AS p2 ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT * FROM authors AS a INNER JOIN publishers AS p ON a.city=p.city
SELECT a.*,p.pub_id,p.pub_name,p.country FROM authors AS a INNER JOIN 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 left join table2 on field1=field2(基准字段,可以多个) where table1.field3=table2.field3
2、right join或right outer join(右外连接)
右连接:(也叫右外连接,给出两个表的配匹行,并且以右边的表为准,如果右边表有而左边表没有的行,则在右边表的相应行选择的列显示为NULL,允许右边的基准表对应左边表多条满足条件的记录)
语法与做链接差不多!
(三)交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
DEMO:
select e.* ,d.* from emp e right JOIN dept d ON (e.deptno = d.deptno);
分享到:
相关推荐
在SQL(Structured Query Language)中,查询数据是其核心功能之一。SQL2000作为较早的版本,虽然现在已被更新的版本如SQL Server 2016、2019等取代,但它的查询基础依然适用于现代的SQL语言。下面我们将详细探讨SQL...
SQL SERVER 连接 Oracle 数据库几种方法 在实际开发中,我们经常需要在 SQL Server 中连接 Oracle 数据库,以便实现数据交换和集成。那么,如何在 SQL Server 中连接 Oracle 数据库呢?下面我们将介绍几种常见的...
在构建SQL查询时,尤其是在涉及多个表的连接查询中,表名的顺序对于查询性能有着重要影响。Oracle数据库的解析器是从右向左处理FROM子句中的表名。为了优化性能,应将记录条数最少的表作为基础表放在最后。如果有三...
以下将详细介绍几种查看LINQ生成SQL语句的方法。 1. **Debug.WriteLine()** 在使用LINQ查询时,可以利用`Debug.WriteLine()`方法将生成的SQL语句打印到控制台。例如: ```csharp var query = (from customer in ...
本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1. **使用`Session.createSQLQuery()`** Hibernate的`Session`接口提供了`createSQLQuery()`方法,允许我们直接编写SQL...
本文将深入探讨几种主要的SQL连接查询类型,包括内连接(INNER JOIN)、外连接(FULL JOIN、LEFT JOIN、RIGHT JOIN)以及交叉连接(CROSS JOIN),并提供实例来帮助初学者理解。 首先,我们来看内连接(INNER JOIN...
当你需要用VB来实现与SQL数据库的连接和查询时,这涉及到几个关键的知识点。 首先,你需要了解VB中的ADODB(ActiveX Data Objects for Database)组件,这是VB与数据库进行交互的核心。通过ADODB.Connection对象,...
### ASP 连接 SQL Server 数据库的几种方法 在 Web 开发领域,ASP(Active Server Pages)作为一种服务器端脚本环境,在与数据库交互方面有着广泛的应用。本文将详细介绍 ASP 如何连接 SQL Server 数据库的几种常见...
首先,通过SQL Server Management Studio (SSMS)停止SQL Server是一种直观且常用的方式。在SSMS中,连接到SQL Server实例,然后导航至“对象资源管理器”中的服务器节点。右键点击服务器实例,选择“属性”,再点击...
在SQL中,连接查询是将两个或多个表的数据结合在一起的一种方法,以便获取更全面的信息。以下是关于SQL连接查询的详细解释,包括内连接、外连接、全连接以及联合查询。 1. 内连接(Inner Join) 内连接是查询两个表...
并行查询是 SQL Server 中的一种查询优化技术,通过使用多个线程来处理查询作业,从而提高查询的效率。这种技术可以加速查询的执行速度,特别是在大表查询和复杂查询的情况下。 一、并行查询的使用场景 并行查询...
### PB12.5连接SQL Server数据库两种方法详解 #### 一、背景介绍 PowerBuilder(简称PB)是一款由Sybase公司开发的快速应用开发工具,广泛应用于企业级应用程序的开发。随着技术的发展,PB也经历了多个版本的迭代,...
1. **Linked Servers**:这是SQL Server中最常用的一种链库方式,可以链接到任何支持OLE DB或ODBC的数据源,包括Access数据库。通过定义Linked Server对象,可以在SQL Server中执行跨服务器查询,直接操作远程数据。...
首先,连接Oracle数据库通常需要Oracle客户端软件,但这里提到的“Sqldbx连接oracle,不用安装client”,意味着SqlDbx可能通过一种无需完整Oracle客户端的方式来实现连接。这种连接方式通常依赖于Oracle的Instant ...
- 内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)是SQL连接的几种类型。 #### 8. 子查询 - **子查询**:嵌套在另一个SQL查询中的查询。 - 子查询可以用于SELECT...
本演示将深入探讨SQL中的几个关键查询概念,包括相关查询、不相关查询、集合函数查询、连接查询以及过程。 1. 相关查询与不相关查询: 相关查询是指查询语句中的子查询与外层查询之间存在关联,子查询的结果会直接...
SQL查询分析器是一种用于执行和测试SQL语句的工具,尤其在数据库管理和开发过程中非常有用。这个"SQL查询分析器修正分离版"是一款绿色软件,意味着它不需要安装即可使用,节省了用户的时间和磁盘空间,同时提高了...
除了使用 Statement 进行绑定查询外,还有其他几种方法可以提高 MySQL 数据库查询效率: * 使用索引:在频繁查询的列上建立索引,可以提高查询效率。 * 优化 SQL 语句:使用 EXPLAIN 语句来分析 SQL 语句的执行计划...
多表连接的多种方式.sql
根据连接的方式不同,可以分为内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)以及全连接(FULL JOIN)等几种类型。 #### 二、连接查询类型详解 ##### 1. INNER JOIN (内连接) 内连接是最常用...