`
fishermen
  • 浏览: 380089 次
社区版块
存档分类
最新评论

连结查询:内连接 外连接 交叉连接

阅读更多
连接查询

  通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

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

  连接可以在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)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

  交叉连接(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
  又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
  SELECT a.*,p.pub_id,p.pub_name,p.country
  FROM authors AS a INNER JOIN publishers AS p
  ON a.city=p.city

  (二)外连接
  内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来:

  SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
  ON a.username=b.username

  下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

  SELECT a.*,b.*
  FROM city as a FULL OUTER JOIN user as b
  ON a.username=b.username

  (三)交叉连接
  交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。

  SELECT type,pub_name
  FROM titles CROSS JOIN publishers
  ORDER BY type
  [Post=0][/Post]

结合实例

联接可分为以下几类:
• 内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。
• 外联接。外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:
• LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
• RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
• FULL JOIN 或 FULL OUTER JOIN。
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
• 交叉联接。
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
select * from test1
select * from test2

SELECT          *
FROM            test1 inner JOIN test2
ON test1.t2 = test2.t1
SELECT          *
FROM            test1 JOIN test2
ON test1.t2 = test2.t1
SELECT          *
FROM            test1 left JOIN test2
ON test1.t2 = test2.t1
SELECT          *
FROM            test1 right JOIN test2
ON test1.t2 = test2.t1
SELECT          *
FROM            test1 cross JOIN test2
1          a        
2          b        
3          c        

b          B        
c          C        
d          D        
c          CC 

     
2          b          b          B        
3          c          c          C        
3          c          c          CC
      
2          b          b          B        
3          c          c          C        
3          c          c          CC 


1          a          NULL NULL
2          b          b          B        
3          c          c          C        
3          c          c          CC

      
2          b          b          B        
3          c          c          C        
NULL NULL d          D        
3          c          c          CC 

     
1          a          b          B        
1          a          c          C        
1          a          d          D        
1          a          c          CC       
2          b          b          B        
2          b          c          C        
2          b          d          D        
2          b          c          CC       
3          c          b          B        
3          c          c          C        
3          c          d          D        
3          c          c          CC       

分享到:
评论

相关推荐

    可能是史上最全的-------mysql连结查询精炼.pdf

    在本文件中,我们探讨了几种不同的连接类型:交叉连接、自然连接、内连接、外连接以及联合查询。 1. **交叉连接 (CROSS JOIN)**:也称为笛卡尔积,它返回第一个表中的每一行与第二个表中的每一行的组合。在MySQL中...

    运动解剖学考研精讲2 第九讲 上肢骨连结(二).pdf

    在上肢骨连结中,还有许多其他重要的连接点,如肩胛骨和肩峰骨之间的连接,桡骨和尺骨之间的连接等。这些连接点的协调工作对于上肢的整体运动功能非常重要。 上肢骨连结是运动解剖学中一个非常重要的部分。了解上肢...

    救助技术24种结绳法.doc

    15. 交叉连结:用于将绳子交叉固定,增加稳定性。 16. 节结:用于制作绳环,可以承受较大的拉力。 17. 双套腰结:类似于单套腰结,但使用两股绳,适合承受更大的重量。 18. 纤绳连结:用于连接细绳和粗绳,确保...

    LED灯的不同连接形式及特点介绍.docx

    ### LED灯的不同连接形式及其特点 #### 一、引言 LED灯作为一种高效能的照明设备,因其多种优点被广泛应用于各个领域。本文档旨在详细介绍LED灯的不同连接形式及其特点,帮助读者更好地理解和选择合适的LED连接...

    消防结绳法稿件.docx

    14. **交叉连结**:用于改变绳索方向,适用于复杂环境。 15. **双绕双结**:增强结的稳定性,防止绳索松动。 16. **卷结**:整理绳索,保持其整洁。 17. **单椅子扣结**:用于固定于椅子或其他物体,确保安全。 18. ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限的用户才能创建,而且创建的新用户不具备任何权限,连登录都不可以。 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说明:...

    电子功用-带有用电焊连结用的整体型加热电阻的聚乙烯管

    总的来说,这个话题涉及了电子工程与管道工程的交叉领域,展示了技术创新如何改进传统工艺,提高工作效率,并为未来可能出现的新型连接技术提供了研究基础。对于学习和掌握这部分知识的人来说,不仅可以提升专业技能...

    消防结绳训练稿件.docx

    13. 交叉连结:在绳索交叉处提供稳定支持。 14. 双绕双结:加强绳索间的固定,常用于绳索的临时固定。 15. 卷结:用于捆绑物体或固定绳索。 16. 单椅子扣结:在椅子或固定物上形成安全环。 17. 附带连结:一种特殊的...

    cadence菜单使用说明

    - **连结显示**: 显示连接的信息。 - **点的坐标**: 显示点的坐标。 - **显示目录**: 显示目录。 - **显示距离**: 显示两点之间的距离。 - **显示历史信息**: 显示历史信息。 - **设置快捷键**: 设置快捷键。 - **...

    铁路技能鉴定连接员试题以及答案.docx

    ### 铁路技能鉴定连接员试题解析 #### 填空题解析: **1. 風险指令解析** 铁路平面无线调车系统A型号调车长台,调车长按下绿键后松开再按下黄键,此时发出的调车指令为“推进”。 **2. 制定使用办法的主体** ...

    光洋PLC编程软件说明书

    - **Contact(選擇連接元件)**:选择连接元件进行编辑。 - **Coil(選擇線圈指令)**:选择线圈指令进行编辑。 - **BOX(選擇方塊指令)**:选择方块指令进行编辑。 - **Wire(程式劃線)**:在程序中添加连线。 - **...

    玻璃幕墙防水施工方案设计.doc

    - 连结件固定:确保连接件牢固。 - 安装顺序:单元式幕墙通常自下而上,元件式幕墙自上而下。 - 密封处理:幕墙间隙用胶条密封,玻璃固定时使用橡胶条和密封胶。 - 间隙留置:各部分间隙应按设计要求留足,保持...

    人体解剖学-《人体解剖学》模拟考试题(十一)(精选试题).doc

    1. 连接组织的不同类型:在解剖学中,直接连结是指组织间的紧密连接,主要包括纤维性连结、软骨性连结和骨性结合。纤维性连结是由纤维组织构成,如瘢痕组织;软骨性连结由软骨组织构成,如颅骨间的缝;骨性结合则是...

    系统解剖大题归纳.pdf

    3. **椎骨间的连结**:椎骨间通过椎间盘(髓核和纤维环)、韧带(长韧带和短韧带)以及关节突关节连接,提供支撑和稳定性。 4. **椎间孔和结构**:椎间孔由椎骨上、下切迹及韧带构成,通过脊神经和血管。 5. **...

    2#桥架线、金属槽配线安装技术交底.doc

    - 先组装主线,再装支线,使用内、外连接头固定。 - 交叉、转弯、丁字连接采用相应配件,避免线槽内有接头。 - 转弯处使用专用弯头,出线口处连接盒封堵。 通过以上细致的步骤和技术要求,可以确保2#高教楼的...

    JSP实用教程课件.ppt

    * 采用指针连结的网状交叉索引方式,对不同来源的信息加以链接 * 例如链接 四、 HTTP 超文本传输协议 * 4 个步骤: 1. 客户机与服务器建立连接 2. 客户机向服务器发送请求,在请求中指明所要求的特定的文件 3. ...

    [专升本(国家)考试密押题库与答案解析]专升本医学综合模拟126.docx

    1. **椎间连结**:椎间连结主要是指椎间盘,它是由纤维软骨构成,位于相邻两个椎体之间,起到缓冲和支撑的作用。后纵韧带位于椎管内,固定在椎体和椎间盘后面,防止脊柱过度前屈。 2. **鼻旁窦**:骨性鼻旁窦包括...

    施工技术交底doc给排水采暖[1].docx

    4. 给水管道与排水管道之间的水平净距需满足规定,以防止交叉污染。 这些施工技术交底内容是保证给排水和采暖系统施工质量的基础,施工人员需严格遵守,以确保工程的质量和安全。在整个施工过程中,与土建部门的...

    基于知识图谱技术的线上教学资源推荐系统设计与实现.docx

    在知识图谱结构中增加了“标签”的实体用于连接全学科内知识点,实现交叉学科知识点的语义关联构建同时增加了“系列”的实体,用于连接语义上相互补充的知识点集群,实现体系化知识点语义构建。 知识点5:推荐策略...

    大学运动解剖学考试题目和答案汇编.pdf

    2. 囊内韧带:如膝关节的前后交叉韧带,提供额外稳定性。 3. 多轴关节:髋关节可绕三个基本轴运动,灵活性高。 4. 关节限制结构:髋关节的韧带如坐股韧带限制过度后伸。 这些知识点涵盖了运动解剖学的基础内容,...

Global site tag (gtag.js) - Google Analytics