- 浏览: 1547734 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (532)
- 软件设计师 (7)
- PSP (5)
- NET MD (9)
- Hibernate (8)
- DIY (51)
- Work (43)
- GAME (24)
- 未分类 (44)
- iPod (6)
- MySQL (39)
- JSP (7)
- 日语能力考试 (36)
- 小说 (4)
- 豆包网 (23)
- 家用电脑 (7)
- DB2 (36)
- C/C++ (18)
- baby (9)
- Linux (13)
- thinkpad (23)
- OA (1)
- UML (6)
- oracle (24)
- 系统集成 (27)
- 脑梗塞 (6)
- 车 (8)
- MainFrame (8)
- Windows 7 (13)
- 手机 (8)
- git (12)
- AHK (2)
- COBOL (2)
- Java (9)
最新评论
-
安静听歌:
... ...
UUID做主键,好还是不好?这是个问题。 -
lehehe:
http://www.haoservice.com/docs/ ...
天气预报 -
lehehe:
[url http://www.haoservice.com/ ...
天气预报 -
liubang201010:
监控TUXEDO 的软件推荐用这个,专业,权威.并能提供报警和 ...
(转载)Tuxedo中间件简介 -
tinkame:
Next[j] =-1 当j=0时;=Max{k|0<k ...
KMP字符串模式匹配详解
http://kitesky.itpub.net/post/909/23464
SQL SERVER 关于外联接(Outer Join)及其他
一 使用外联接
以前在Oracle中用=(+)和(+)=来进行左外联接和右外联接;后来用SQL Server时用*=和=*进行外连接左外联接和右外联接;
现在决定用SQL-92的标准方法:[OUTER] JOIN,OUTER是可以省略的。
LEFT OUTER JOIN 或 LEFT JOIN 表示左外联接
RIGHT OUTER JOIN 或 RIGHT JOIN 表示左外联接
FULL OUTER JOIN 或 FULL JOIN 表示左外联接
外联接的意思不用多说,我们都懂,但是JOIN到底怎么用呢?没有找到很好的资料,只能从例子中学习了:
1、这个例子也许没有实际意义,只是为了说明问题:
CREATE TABLE orders(order_id int, firm_id int, p_id int) CREATE TABLE firms (firm_id int, f_name int) CREATE TABLE products(p_id int, p_name int) select a.order_id, b.f_name, c.p_name from orders a left join firms b on a.firm_id = b.firm_id left join products c on a.p_id = c.p_id
说明:orders表是主表,先和从表firms进行左联接,再和从表products进行左联接。
判断是外联接中的主表还是从表主要看from从句中各个表在LEFT JOIN或RIGHT JOIN两边的位置:LEFT JOIN左边的表是主表,RIGHT JOIN右边的表是主表;
ON表达了两个表连接的条件,一般外联接是等值联接,不等值联接意义不大;
在多个表的连接中,一个表既可以做主表又同时可以做从表,为了说明这个问题,我们修改以上SQL为:
select a.order_id, b.f_name, c.p_name from orders a left join firms b on a.firm_id = b.firm_id right join products c on a.order_id = c.p_id
这个SQL没有什么意义,但从中可以看出a表既是b的主表又是c的从表;到底怎么用,还是要根据实际情况来决定是左联接还是右联接;
那天,看到了这样一个例子:
create table tab1 (c1 int, c2 int, c3 int) create table tab2 (c1 int, c2 int, c3 int) create table tab3 (c1 int, c2 int, c3 int) create table tab4 (c1 int, c2 int, c3 int) SELECT * FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3 left OUTER JOIN tab3 right OUTER JOIN tab4 ON tab3.c1 = tab4.c1 ON tab2.c3 = tab4.c3
这种用法还真少见,具体怎么个意思,还在理解中...我把它改写成:
SELECT * FROM tab1 left JOIN tab2 ON tab1.c3 = tab2.c3 LEFT OUTER JOIN tab4 ON tab2.c3 = tab4.c3 RIGHT OUTER JOIN tab3 ON tab3.c1 = tab4.c1
也许它们是一个意思。我发现加个括号,看的更清楚一些(它是个嵌套)
SELECT * FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3 left OUTER JOIN (tab3 right OUTER JOIN tab4 ON tab3.c1 = tab4.c1) ON tab2.c3 = tab4.c3
二 外联接中 "ON + AND" 与 "ON + WHERE" 的区别
1、on条件是外联接时在生成临时表时使用的联结条件,不论从表是确定值还是NULL,主表所有的值都会出现;
如果再加上and条件; 如果and条件引用的是主表的列,则对结果毫无影响,主表的所有纪录依然会全部出现;如果and条件引用的是从表的列,则不符合条件的从表纪录显示NULL;
2、where条件是在临时表生成后,再对临时表进行过滤的条件。临时表中的所有纪录都受影响,不符合条件的纪录被过滤出结果集;
3、示例:
select a.module_id, a.name, b.module_name from fb_autocoding a left join fb_app_module b on a.module_id = b.module_id and b.module_internal_label <> 'LO'; select a.module_id, a.name, b.module_name from fb_autocoding a left join fb_app_module b on a.module_id = b.module_id where b.module_internal_label <> 'LO';
三 其他Join运算
merge join:在处理其他联结之前,先把相关两个表联结在一起;
hash join:把一个表join到已经被执行过join的结果上;
用括号改变join的顺序:
select catalog.item, catalog.item_color, product.item, color.color_name from catalog full outer join (product cross join color) on catalog.item = product.item and catalog.item_color = color.color_name;
posted on 2007-07-12 15:44 junky 阅读(848) 评论(1) 编辑 收藏 所属分类: SQL Server 、database
发表评论
-
MySQL配置文件my.cnf 例子最详细翻译
2009-07-20 11:58 1757http://www.blogjava.net/hunte ... -
MySQL :: @@Rowcount in MySQL
2009-03-02 15:39 2257@@Rowcount in MySQL? Posted ... -
MYSQL中删除重复记录的方法
2009-02-26 12:23 0MYSQL中删除重复记录的方法 2008 ... -
使用 MYSQLBINLOG 来恢复数据。
2009-02-26 12:21 0使用 MYSQLBINLOG 来恢复数据。 20 ... -
13.2.3. InnoDB Startup Options and System Variable
2009-02-20 13:37 1272http://dev.my ... -
mysql innodb 配置详解
2009-02-20 11:01 3593加为好友发送私信在线聊天 -
20.3.9 关于死锁 深入浅出MySQL——数据库开发、优化与管理维护
2009-02-20 10:50 3167深入浅出MySQL——数据库开发、优化与管理维护 回 ... -
mysql的临时表不支持自连接
2009-02-18 13:32 2372TEMPORARY TABLE ProblemsThe fol ... -
windows 下安装两个MySQL收藏
2009-02-03 16:28 2402由于两个MySQL进程需要不同的配置文件,以下所有操作均是在W ... -
1.4.1. What's New in MySQL 5.1
2009-02-03 16:25 11881.4.1. What's New in My ... -
查看mysql版本的四种方法
2009-02-02 10:57 9771:在终端下:mysql -V。 以下 ... -
Server SQL Modes
2009-02-01 11:06 14405.1.7. Server SQL Modes ... -
MySQL中的各种JOIN(CROSS JOIN, INNER JOIN, LEFT [OUTER]
2009-01-13 14:50 6228MySQL中的各种JOIN(CROSS JOIN, I ... -
[转]SQL Server 2000执行计划成本(5/5)
2009-01-09 15:26 1208[转]SQL Server 2000执行计划成本(5/5) ... -
SQL Server 2000执行计划成本(4/5)
2009-01-09 15:25 1110[转]SQL Server 2000执行计划成本(4/5) ... -
[转]SQL Server 2000执行计划成本(3/5)
2009-01-09 15:23 1540[转]SQL Server 2000执行计划成本(3/5) ... -
SQL Server 2000执行计划成本(1/5)
2009-01-09 14:52 1651[转]SQL Server 2000执行计划成本(1/5) ... -
浅谈MySQL数据库优化
2009-01-09 14:46 1352浅谈MySQL数据库优化 [收藏此页] [打印] ... -
sql server支持create table as ...建表么
2009-01-09 11:52 9051sql server支持create table as .. ... -
SQL Server如何识别自动创建的索引
2009-01-08 15:57 1323SQL Server如何识别自动创建的索引 http://w ...
相关推荐
SQL Server中的CROSS APPLY和OUTER APPLY是两种特殊的表运算符,它们在2005版本及以上引入,主要用于处理复杂的数据转换和联接操作。这些运算符的主要区别在于如何处理右表表达式的结果。 CROSS APPLY用于执行内联...
答案:可以使用JOIN关键字实现SQL语句的内联外联,例如INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN等。 4.3 SQL语句的内联外联有什么优缺点? 答案:SQL语句的内联外联可以提高查询效率和数据整合性,但也可能...
**定义**:`OUTER JOIN`(通常称为“外联接”)用于返回两个表中的所有匹配行。如果某个表中有行但另一个表中没有匹配行,则结果集中仍然会显示这些行,但未匹配的列将包含`NULL`值。 - **LEFT OUTER JOIN**(左外...
SQL外联接及其性质是数据库管理中的一个重要概念,它为数据库查询提供了强大的数据整合能力。本文将深入探讨SQL外联接的定义、类型、性质以及在实际应用中的重要性。 首先,SQL外联接是一种特殊的关系代数运算,它...
2.3.2 外联接(OUTER JOIN)/38 2.3.3 完全联接(FULL JOIN)/39 2.3.4 交叉联接(CROSS JOIN)/40 2.3.5 联接的替代写法/40 2.3.6 联合(UNION)/41 2.4 SQL数据类型/42 2.4.1 精确数字类型/43 2.4.2 近似数字类型/...
内联接返回两个表中匹配的记录,外联接分为左外(LEFT OUTER JOIN)、右外(RIGHT OUTER JOIN)和全外(FULL OUTER JOIN),分别返回左表、右表或两表所有记录,即使在另一表中没有匹配项。交叉联接则是两个表的...
外联查询分为三种主要类型:左外联(LEFT JOIN)、右外联(RIGHT JOIN)和全外联(FULL OUTER JOIN),每种都有其独特的用途和特性。 首先,我们来了解一下**内联查询**(INNER JOIN)。这是最基础的联接类型,它...
在关系数据库管理系统中,SQL 语言提供了多种类型的连接方式,如 inner join、left outer join、right outer join、full outer join、cross join 等。 inner join,也称为等值连接或自然连接,是最常见的一种连接。...
但对于外联接,如LEFT OUTER JOIN、RIGHT OUTER JOIN或FULL OUTER JOIN,ON与WHERE中的条件处理方式不同。在外联接中,如果左表(LEFT OUTER JOIN)或右表(RIGHT OUTER JOIN)的行在联接过程中找不到匹配项,这些行...
本文主要讨论了数据库中的连接类型,包括内联(Inner Join)、外联(Outer Join)以及它们的变体,如左外联(Left Outer Join)、右外联(Right Outer Join)和全外联(Full Outer Join)。这些概念对于理解和优化...
在SQL查询语言中,连接(Join)操作是十分常见的需求之一,主要用于将两个或多个表中的数据合并起来进行查询。连接类型多种多样,包括内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER ...
FROM子句关键字 相应的结果集 CROSS JOIN 笛卡尔乘积(所有可能的行对) INNER JOIN 仅对满足连接条件的CROSS中的列 LEFT OUTER JOIN 一个表满足条件的行,...FULL OUTER JOIN LEFT OUTER 和 RIGHT OUTER中所有行的超集
- 外联接:包括LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN,解释它们的用途和语法。 - 自联接:介绍如何在一个表内部进行联接。 ##### V. 使用子查询 - 单行子查询:教授如何使用单行子查询来增强查询的灵活性。 - ...
Select s.Stu_Name as '姓名', c.Course_name as '科目', sc.Score_Num from Students as s left outer join Scores as sc on s.Stu_ID=sc.Stu_ID left outer join Courses as c on sc.Course_Id=c.Course_Id ...
2. **连接操作**:`LEFT OUTER JOIN`, `RIGHT OUTER JOIN`, `FULL OUTER JOIN`用于连接多个表,根据连接条件选择不同的记录组合。 ### 扩展SQL功能 1. **插入空表**:通过`SELECT * INTO new_table FROM old_table...
SQL Server支持多种类型的联接,包括内联接(INNER JOIN)、外联接(LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)和交叉联接(CROSS JOIN)。正确选择联接类型对于获取准确的结果集至关重要。 #### 3. **窗口函数** ...
在IT行业中,外联接(Outer Join)是数据库查询中的一种关键操作,它允许我们从一个或多个表中检索数据,即使某些记录在另一个表中没有匹配。这与内联接(Inner Join)不同,内联接只返回两个表中都有匹配记录的结果...
15. **联接类型**:外联接(Outer Join)允许保留两侧关系中未匹配的元组,左外联接(Left Outer Join)保留左侧关系的所有元组。 16. **聚合函数**:`COUNT(*)`是正确的聚合函数,用于计算行数。 17. **空值操作*...
在SQL Server 2005中,外联结(Outer Join)是一种重要的查询技术,它允许用户获取关联表之间的所有数据,即使其中一方没有匹配的记录。外联结分为三种类型:左外联结(Left Outer Join)、右外联结(Right Outer ...