`
帅得被人看
  • 浏览: 18063 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

连接查询

 
阅读更多

介绍表连接,更确切的说是inner joins內连接.
內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。
为更好的理解这个概念,我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表(msp)。

party(Code,Name,Leader)
Code: 政党代码
Name: 政党名称
Leader: 政党领袖

msp(Name,Party,Constituency)
Name: 议员名
Party: 议员所在政党代码
Constituency: 选区

在介绍左连接、右连接和全连接前,有一个数据库中重要的概念要介绍一下,即空值(NULL)。

A left join(左连接)包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
同理,也存在着相同道理的 right join(右连接),即包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
而full join(全连接)顾名思义,左右表中所有记录都会选出来。

讲到这里,有人可能要问,到底什么叫:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
Ok,我们来看一个实例:

SELECT msp.name, party.name
FROM msp JOIN party ON party=code

这个是我们上一节所学的Join(注意:也叫inner join),这个语句的本意是列出所有议员的名字和他所属政党。
你可以在 http://sqlzoo.cn/4.htm 亲自执行一下该语句,看看结果是什么。

很遗憾,我们发现该查询的结果少了两个议员:Canavan MSP, Dennis。为什么,因为这两个议员不属于任
和政党,即他们的政党字段(Party)为空值。那么为什么不属于任何政党就查不出来了?这是因为空值在
作怪。因为议员表中政党字段(Party)的空值在政党表中找不到对应的记录作匹配,即
FROM msp JOIN party ON party=code 没有把该记录连接起来,而是过滤出去了。
在该短语中,msp在Join的左边,所有称为左表。party在Join的右边,所有称为右表。

Ok,现在再看看这句话,“包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录”,
意思应该很明白了吧。执行下面这个语句,那两个没有政党的议员就漏不了了。

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





***************************************************************************************

第二部分。

********************************************************************************************

最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连接的问题,回答不尽理想~
现在在这写写关于它们的作用
假设有如下表:


一个为投票主表,一个为投票者信息表~记录投票人IP及对应投票类型,左右连接实际说是我们联合查询的结果以哪个表为准~
1:如右接连 right join 或 right outer join:

我们以右边voter表为准,则左表(voteMaster)中的记录只有当其ID在右边(voter)中存在时才会显示出来,如上图,左边中ID为3.4.5.6因为这些ID右表中没有相应记录,所以没有显示!
2:因此我们自然能理解左连接 left join 或者 left outer join

可见,现在右边中ID在中存在时才会显示,当右边中没有相应数据时则用NULL代替!
3:全连接 full join 或者 full outer join,为二个表中的数据都出来,这里演示效果与上一样!
4:内连接 inner join 或者 join;它为返回字段ID同时存在于表voteMaster 和 voter中的记录

5:交叉连接(完全连接)cross join 不带 where 条件的
没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生6*3=18条记录)

等价select vm.id,vm.voteTitle,vt.ip from voteMaster as vm,voter as vt

6:自连接。在这里我用我前段时间一个电力项目中的例子(改造过)
如下表:

这是一个部门表,里面存放了部门及其上级部门,但都放在同一张表中,我们假设现在需要用SQL查询出各部门及其上级部门!就如何做,
当然,不用自连接也一样,可以如下:

我们达到预期目的!在这个查询中使用了一个子查询完成对上级部门名的查询,如果使用自连接,那么结构上感觉会清晰很多。

是不是也同样完成了功能呢,这里除了使用自连接外,还使用了左连接,因为省电力没有上级部门,他是老大,如果使用内连接,就会把这条记录过滤掉,因为没有和他匹配的上级部门。
自连接用的比较多的就是对权形结构的查询!类似上表!
分享到:
评论

相关推荐

    数据库连接查询、子查询

    数据库连接查询和子查询 数据库连接查询和子查询是数据库查询语言中两个重要的概念。连接查询是指将两个或多个表连接起来,以便从多个表中检索数据。子查询是指在 WHERE 或 HAVING 子句中使用的SELECT语句。 连接...

    数据库作业7:SQL练习4 – SELECT(连接查询、嵌套查询)

    数据查询2—连接查询:同时涉及两个以上的表的查询 连接条件:用来连接两个表的条件 [.] [.] 连接字段:连接条件中的列名称(注意:连接字段类型必须是可比的,但名字不必相同) 连接查询—(1)等值与非等值连接查询:...

    【实验报告】数据库的简单查询和连接查询实验

    【实验报告】数据库的简单查询和连接查询实验 在本次实验中,我们专注于掌握SQL查询语句,包括单表查询和多表连接查询,旨在深化对关系、属性、主键和外键的理解。实验环境是Microsoft SQL Server或MySQL,实验前...

    SQL子查询、内连接和外连接查询

    【SQL子查询、内连接和外连接查询】 在SQL中,子查询、内连接和外连接是进行复杂数据检索的关键工具。这些概念的理解和熟练应用对于数据库管理与数据分析至关重要。 **子查询** 是一个嵌套在其他SQL语句中的查询,...

    在SAP前台用TCODE:SE16H实现表连接查询

    "SAP SE16H 表连接查询详解" 在 SAP 系统中,SE16H 是一个功能强大的工具,能够实现复杂的表连接查询。今天,我们将详细介绍如何使用 SE16H 实现表连接查询,并提供一个实际的示例。 SE16H 介绍 SE16H 是 SAP ...

    Oracle外连接查询

    Oracle的外连接查询是数据库操作中的重要组成部分,它允许用户获取来自两个或更多表的数据,即使在某些情况下,这些表之间的连接条件不完全匹配。在理解外连接查询之前,我们首先要了解内连接,即最基础的相等连接。...

    数据库实验报告——数据库的简单查询和连接查询

    实验报告的主题聚焦于数据库的简单查询和连接查询,旨在通过SQL Server查询分析器来实践和深化对SQL语言的理解。实验的目的是让学生掌握SQL Server查询分析器的使用,熟悉SQL查询语句,特别是针对数据表的查询操作,...

    数据库连接查询相关外连接内连接

    【数据库连接查询详解】 在数据库管理系统中,查询是获取数据的核心操作。本篇文章将深入探讨数据库连接查询,包括内连接、外连接和交叉连接等,同时结合实例来帮助理解。 首先,了解数据库的基础架构。Oracle...

    SQL连接查询语句实例

    在SQL查询中,连接查询是将两个或多个表的数据结合在一起的重要操作,这对于数据分析和信息检索至关重要。本文将深入探讨几种主要的SQL连接查询类型,包括内连接(INNER JOIN)、外连接(FULL JOIN、LEFT JOIN、...

    数据库系统概论数据查询之连接查询.pdf

    数据库系统中的连接查询是SQL语言中的重要组成部分,用于从多个表中检索满足特定条件的数据。在数据查询过程中,连接查询允许我们从一个或多个表中提取相关联的信息,以满足复杂的业务需求。以下是对连接查询的详细...

    数据库实验报告-数据库的简单查询和连接查询

    根据给定的文件信息,以下是对“数据库实验报告-数据库的简单查询和连接查询”的详细解析,涵盖了实验目的、原理、步骤以及实验内容的关键知识点。 ### 实验目的 本实验旨在使学生掌握SQL Server查询分析器的使用...

    数据库原理及运用实验四SQL连接查询.doc

    数据库原理及运用实验四 SQL 连接查询 本实验报告主要探讨了数据库原理的应用,通过 SQL 连接查询实现了多种复杂的查询操作。以下是实验报告的详细解释: 一、数据库原理 数据库原理是数据库系统的基础理论,它...

    oracle连接查询SQL性能测试

    标题“Oracle连接查询SQL性能测试”涉及的是数据库管理和优化领域,特别是针对Oracle数据库系统的SQL查询性能分析。在Oracle中,连接查询(JOINs)是整合多个表数据的关键操作,其性能直接影响到数据库的整体效率。...

    第十一章连接查询和分组查询.zip

    在SQL(结构化查询语言)中,连接查询和分组查询是两个非常重要的概念,用于处理和分析数据库中的数据。本章将详细讲解这两个概念及其应用。 首先,我们来看连接查询。连接查询允许我们将多个表的数据结合在一起,...

    test_lesson07 SQL99语法连接查询.pdf

    在SQL99语法中,连接查询是数据库操作中不可或缺的一部分,它允许我们从多个表中检索数据,并将这些数据关联起来。在这个测试中,我们将探讨三个具体的查询需求,每个需求都涉及到了不同的连接类型和处理缺失值的...

    HQL连接查询和注解使用总结

    ### HQL连接查询和注解使用总结 #### HQL连接查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种更自然的方式查询对象,而不是直接查询底层数据库表。HQL支持多种连接查询...

    SQL多表连接查询优化的相关研究

    标题中的“SQL多表连接查询优化的相关研究”指的是在数据库管理中,如何高效地执行涉及多个数据表的SQL查询操作。在SQL(Structured Query Language)中,连接查询(JOIN)是用于合并两个或更多表中的数据的关键技术...

    mysql连接查询

    MySQL 连接查询详解 MySQL 连接查询是指在多个表之间进行查询操作,以获取所需的数据。根据连接的方式不同,可以将连接查询分为外连接和内连接两种类型。下面我们将详细介绍这两种类型的连接查询。 一、外连接 外...

    数据库实验---连接查询

    数据库实验——连接查询是数据库学习中的重要环节,它涉及到如何通过SQL语言进行高效的数据检索和综合分析。在本次实验中,我们将重点掌握SQL查询分析器的使用,深化对SQL语句的理解,并熟悉不同类型的查询操作。 ...

    Gbase 8s查询之连接查询

    Gbase 8s 查询之连接查询 Gbase 8s 查询之连接查询是关系数据库中的一种强大处理能力,能够将不同的数据按一定条件连接在一起。在 Gbase 8s 中,连接查询可以分为内连接、外连接和自连接三种类型。 内连接是将两个...

Global site tag (gtag.js) - Google Analytics