- 浏览: 994639 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
上节我们介绍了表连接,更确切的说是inner joins內连接.
內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。
为更好的理解这个概念,我们介绍两个表作演示。苏格兰议会中的政党表(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查询前10条记录(SqlServer/mysql/oracle/sybase)[语法分析] (转)
2011-04-22 00:45 5410这篇文章主要是分析下 ... -
SQL Group by Having 学习(转)
2011-04-19 10:33 1489在select 语句中可以使 ... -
使用PreparedStatement防止SQL注入(转)
2011-04-18 14:58 1784一条效率差的sql语句, ... -
JDBC Class.forName作用(转)
2011-04-13 14:53 1194使用JDBC时,我们都会很自然得使用下列语句: ... -
关于数据库内连接外连接左连接右连接(转)
2011-03-26 19:04 1574内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础 ... -
数据库事务隔离级别与锁(转)
2011-03-26 18:57 1249一,事务的4个基本特征 Atomic(原子性): 事务中包含的 ... -
PreparedStatement效率为什么高/为什么要使用PreparedStatement代替Statement(转)
2011-03-25 09:28 2773在JDBC应用中,如果你 ... -
浅谈数据库索引(转)
2011-03-23 10:10 1183数据库索引是为了增加查询速度而对表字段附加的一 ... -
漫谈数据库索引(转)
2011-03-23 10:00 1024一、引言 对数据库索引的关注从未淡出我的们的讨论,那 ... -
用SQL语句去掉重复的记录(转)
2011-03-23 01:25 6803海量数据(百万以上) ... -
数据库范式(转)
2011-03-23 01:18 1415当前我们使用的主流数 ... -
mysql中limit的用法详解[数据分页常用] (转)
2011-01-08 16:44 1395在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据, ... -
查询优化的必要性(转)
2010-12-19 09:55 1470查询优化的最终目的是为了提高数据库系统的性能 ... -
Oracle导出数据(转)
2010-12-14 15:33 14801.1 exp 使用方法及 ... -
oracle初次使用
2010-12-14 13:06 1084以前都习惯了使用MySQL ... -
Mysql连接字符串大全(转)
2010-08-15 21:25 4830mysql JDBC 驱动常用的有两个,一个是gj ... -
Mysql的transaction实现(转)
2010-08-15 15:02 1942transaction在数据库编程 ... -
Hibernate 各种数据库的配置(转)
2010-07-22 20:27 16111. MySql连接配置 MySql数据库的hib ... -
查询重复记录sql (转)
2010-05-16 15:23 1236这是我的一次笔试题,是查询一个表(id,name)中重复的记录 ... -
我的面试题总结之三:海量数据查询优化(精)(转)
2010-05-16 15:21 2404这是我面试的 ...
相关推荐
SQL 连接 JOIN 例解左连接,右连接,全连接,内连接,交叉连接,自连接
SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
sql左连接,右连接,内连接,全连接详细讲解
右连接、左连接、全连接、内连接、交叉连接、自连接
SQL 左外连接,右外连接,全连接,内连接 。联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定联接条件。WHERE和HAVING子句也可以包含搜索条件,以进一步筛选联接条件所选的行。
mysql全连接、左连接与右连接
SQL 左外连接,右外连接,全连接,内连接 四种连接的差异
oracle数据库表左连接右连接全连接的认识
等值连接 不等连接 自然连接 外连接 交叉连接 全连接 右连接 左连接 外连接
好东西爱上对方的身份的是否受到辐射的发生大幅爱谁谁地方爱对方说的打算放大身份的爽肤水爱上对方是地方大师傅爱上对方说的飞洒
SQL之左连接、右连接和全连接,全面讲述表与表见的链接关系、区别
sql左外连接、右外连接、内连接、全外连接的区别
SQL连接JOIN例解 (左连接,右连接,全连接,内连接,交叉连接,自连接)pdf
右连接、左连接、全连接、内连接、交叉连接、自连接.pdf
SQL左外连接,右外连接,全连接,内连接4种连接的区别[归类].pdf
SQL左外连接,右外连接,全连接,内连接四种连接的差异[参照].pdf
SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
SQL的四种连接-左外连接、右外连接、内连接、全连接 今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULL OUT JOIN的,导致平时的数据记录要进行一些限制性处理,其实也可以设置视图各表为右外连接并在...
由浅入深sql语句(外键,左关联,右关联,全关联) 内连接,外连接