`
心动音符
  • 浏览: 340075 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

左右链接的区别!

阅读更多
为了从两个或多个表中选出数据,我们一般使用表连接来实现这个功能。

本节介绍join(连接)的概念. 为此我们准备了两个试验用表: album(专辑表) 和 track(曲目表).

专辑表:包含200首来自Amazon的音乐CD的概要信息。

  album(asin, title, artist, price, release, label, rank)

  曲目表:每张专辑中的曲目(因为是音乐CD,所以也可叫歌曲)的详细信息。

  track(album, dsk, posn, song)

  SQL短语 FROM album JOIN track ON album.asin=track.album 表示连接album和track表。

  其中,album.asin表示专辑的惟一标识号,track.album表示曲目表中和专辑关联的专辑号。

  连接后,得到一个临时表,该临时表中每条记录包含的字段由两部分组成,

  除了专辑表中的对应字段album(title, artist ...),还包含曲目表的所有字段track(album, disk, posn and song)。

  有了这张临时表,很多查询就容易实现了。

  看看一些具体的实例,

  一、列出歌名为'Alison'的专辑名称和作者



SELECT title, artist
FROM album JOIN track
ON (album.asin=track.album)
WHERE song = 'Alison'


  显然,歌名、专辑名称和作者分别在两个表中,必需使用表连接来完成这个查询。

  二、哪个artist录制了歌曲'Exodus'

SELECT artist
FROM album JOIN track ON (asin=album)
WHERE song = 'Exodus'

  用作连接的两个字段asin,album因为在两个表中都是惟一的,所以不一定要加表名作为前缀。

  但为了方便理解,建议使用前缀,形如:album.asin=track.album

  三、列出曲目表中所有属于'Blur'专辑的歌曲

SELECT song
FROM album JOIN track ON (asin=album)
WHERE title = 'Blur'


  如果我们把 album JOIN track ON (asin=album) 看成一个临时表的话,join的概念就很好理解了。



內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。

  为更好的理解这个概念,我们介绍两个表作演示。苏格兰议会中的政党表(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

分享到:
评论

相关推荐

    SQL内左右自连接.doc

    SQL连接是数据库操作中的重要概念,它允许我们合并来自两个或更多表的数据。在这个文档中,主要介绍了四种类型的SQL连接:内连接、...在编写SQL查询时,理解不同连接的区别至关重要,以确保能够准确地获取所需的数据。

    SQL关于内连接,外连接(左右连接)等的总结

    当我们需要从多个表中获取数据并合并它们时,SQL提供了不同类型的连接操作,包括内连接、外连接(左连接和右连接)。以下是这些连接方式的详细说明。 **内连接(Inner Join)** 内连接返回两个表中存在匹配的记录。...

    oracle数据库表左连接右连接全连接的认识

    * 全连接:简单说就是左右连接的全部表示,根据连接条件在任意一方表中出现无法匹配的情况,不满足条件的部分均用空值代替。 左连接和右连接 左连接和右连接的区别在于基准表的选择,左连接将左边的表作为基准表,...

    MYSQL 左连接右连接和内连接的详解及区别

    主要介绍了MYSQL 左连接右连接和内连接的详解及区别的相关资料,需要的朋友可以参考下

    SQL左外连接,右外连接,全连接,内连接4种连接的区别[归类].pdf

    全连接返回左右两个表的所有行,如果某行在另一个表中没有匹配项,相应列的值将为NULL。全连接显示了所有可能的组合,无论是否在另一个表中有对应项。 在使用外连接时,表的顺序非常重要,因为连接类型决定了哪个...

    mysql的左右内连接用法实例

    总结,左连接和右连接主要区别在于哪一侧的表被视为主表,决定哪些记录会被完全展示出来。而内连接则只保留两个表中都有的匹配记录。在实际应用中,根据业务需求选择合适的连接方式,可以有效地获取所需的数据。

    UC384X系列芯片的细微区别与测试!!!.docx

    在检查UC3842好坏时,可以在7、5脚间施加17V左右的直流电压,如果8脚有稳定的5V电压,1、2、4、6脚也有不同的电压,那么基本可以确认UC3842工作正常。 UC3842的一个常见故障原因是电源开关管短路导致高电压直接加到...

    winscp FTP连接工具

    这款工具无需安装,解压后即可直接使用,体积仅为2M左右,充分体现了其轻量化的设计理念。** WinsCP的主要功能是提供一个图形化的界面,让用户能够方便地与FTP(文件传输协议)服务器进行交互。它支持SFTP(安全...

    linux远程连接工具ftp下载(xftp)

    3. **同步浏览**:左右两个窗口可以同步显示目录结构,方便对比和移动文件。 4. **拖放操作**:支持在本地和远程目录间直接拖放文件,操作直观简便。 5. **断点续传**:如果上传或下载过程中中断,可以从上次停止的...

    音箱线怎么连接电脑?.docx

    4. 焊接完成后,将左右音箱的地线统一焊接到插头的地线上,而另一根线则分别焊接到左右声道的引脚上。 5. 安装好插头外壳,完成自制的连接线。 对于数字音频连接,无源音箱还可以通过S/PDIF(数字音频接口)连接到...

    MySQL常见面试题(表连接类型,count(*),count(列),count(1)的区别,索引,存储引擎,锁,优化)

    全外连接会返回左右两表的所有记录,没有匹配的部分两边都会用NULL填充。 2. **COUNT函数的区别** - **COUNT(*)**:统计表中的所有行数,包括NULL值。 - **COUNT(列)**:统计指定列中非NULL的行数。 - **COUNT(1...

    hdmi 1.3 1.4区别

    HDMI 1.4 版本标准化了 Micro HDMI 接口,使其比现在的 19 针普通接口小 50%左右,可以为便携设备带来最高 1080p 的分辨支持。 7. 汽车连接系统(Automotive Connection System, ACS) HDMI 1.4 版本特别加入了为...

    基础电子中的VCD、DVD影碟机与电视机的连接线的介绍

    值得注意的是,尽管白色和红色线在功能上有明确的区分,但由于它们的结构相同,所以如果在实际连接过程中交换了两者的颜色,实际上并不会影响音频的播放,只是左右声道会互换位置,但仍然可以正常工作。 在连接过程...

    NPN和PNP的区别

    标题中的“NPN和PNP的区别”主要涉及电子元器件中的两种晶体管类型,NPN和PNP,它们是双极型晶体管的两种基本结构。这两种类型的晶体管广泛应用于开关电路、放大器和逻辑电路中,特别是在传感器和工业自动化设备中。...

    SQL-SELECT(任明汉).doc

    - **完全外连接 (Full Outer Join)**:返回左右表中的所有行,无论是否匹配。 - **内连接 (Inner Join)**:仅返回两个表中匹配的行。 #### 11. 示例 - **示例一:快速排名次**:通过适当的 SQL 语句可以实现对...

    RS232与RS485的区别_161智能弱电_海康付费资料弱电方案.ppt

    从传输距离方面来看,RS232传输距离有限,最大传输距离标准值为15米,实际上也只能用在25米左右。而RS485最大传输距离标准值为120米,实际上可达3000米。 从多站通讯能力方面来看,RS232接口在总线上只允许连接1个...

    V.24和V.35电缆的主要区别

    相反,V.35电缆即使在较高的数据传输速率下,如2Mbps,其有效传输距离仍可保持在30米左右,显示出更强的信号完整性控制能力和更远的传输距离。 综上所述,V.24和V.35电缆在连接器类型、支持的数据链路层协议、数据...

    交换机,路由器,HUB区别

    "交换机、路由器、HUB区别" 在计算机网络中,交换机、路由器和HUB都是常见的网络设备,但是它们之间有什么不同呢?本文将对这三者的区别进行介绍,并详细解释它们的优缺点。 首先,HUB是一种集线器,所有连接到HUB...

    R232与R485的区别

    当电缆的电容负载达到2500pF时,通信距离缩短至15米左右,且无法有效抑制共模干扰,限制了其在长距离通信中的应用。 **电平问题与局限性**:RS232的信号电平较高,约为±12V至±15V,这可能导致接口芯片的损坏,...

Global site tag (gtag.js) - Google Analytics