- 浏览: 579767 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
拯救各种不开心:
多谢博主分享,已经收藏:http://www.iwwenbo. ...
java反射机制详解 及 Method.invoke解释 -
Santer.Zhang:
你好,我用的是ireport4.5.1,子表一直无法显示
ireport 的一些技巧 -
Ginger90:
ireport实用性上没有帆软报表好用
ireport 的一些技巧 -
lenghongliang001:
破解版不行了,要注册才行
java实现tts(语音开发) -
best_programmer:
得到某个类的静态属性好像用你的方法不对啊,只能使用暴力反射吗? ...
java反射机制详解 及 Method.invoke解释
join 是inner join的简写形式
一、NATURAL JOIN(自然连接)
两张表通过NATURAL JOIN连接的时候,相当于有个隐含的WHERE子句,对两张表中同名的对应列相比较看是否相等。
二、CROSS JOIN(创建笛卡尔积)
对两张表通过交叉联合产生第三张返回结果集的表。相当于普通的连接。
三、INNER JOIN(内连接)
内连接就相当于普通的CROSS JOIN,只是格式不一样,INNER JOIN在后面有一个ON子句(相当于WHERE)的搜索条件,用于过滤返回的行。
四、OUTER JOIN (外连接)
select * from ta outer join tb on (ta.c1=tb.c1)
outer join告诉DBMS生成结果表,在此表中不仅带有相关(ta.c1=tb.c1)行对,而且还有来自两个源表中任一表的不匹配的行。
五、LEFT OUTER JOIN(左连接) RIGHT OUTER JOIN(右连接)
select * from ta left outer join tb on (ta.c1=tb.c1)
select * from ta right outer join tb on (ta.c1=tb.c1)
left outer join(left join) 告诉DBMS生成包括联合行和任何不匹配的行的结果表,但是不匹配的行系来自查询的FROM子句中LEFT OUTER JOIN关键词左边的表中。
right outer join(right join)与left outer join(left join)刚好相反。
六、FULL OUTER JOIN(全连接)
FULL OUTER JOIN 返回组合了LEFT OUTER JOIN 和RIGHT OUTER JOIN结果的表。
以下是Inner Join及Outer Join的具体介绍:
在一个正规化的数据库环境中, 我们常会碰到这款情形: 所需的资料并不是放在同一个资料表中, 在这个时候, 你就要用到 Join。
当然 Join 如何将不同的数据库的资料结合, 还要看你如何使用它, 一共有四种不同的 Join 的方式, 在这篇文章中我们将为你介绍 Inner Join 及 Outer Join 以及其应用。
Inner Join
Inner Join 应该是最常用的 Join 方式, 它只会传回符合 Join 规则的纪录, 还是先来看看语法:
Select <要选择的字段> From <主要资料表> <Join 方式> <次要资料表> [On <Join 规则>]
现在我们利用 MS SQL 内建的北风数据库来实际练习一下! 想多了解 MS SQL 的内建数据库, 你可以看看 SQL Server 的内建数据库这篇文章。
请打开 QA (Query Analyzer), 为了使用北风数据库, 请先执行 Use Northwind, 然后执行
Select ProductId, ProductName, SupplierId From Products
从 Products 产品资料表中取出三个字段, 分别是产品代码, 产品名称, 供货商代码, 但查询出来的结果保证让你的老板很不满意, 因为供货商代码对于人类实在是无什么意义, 这个时候 Join 就可以帮上忙了, 藉由 Join Suppliers 这个资料表我们便可以查询到供货商名称
Select ProductId, ProductName, Suppliers.SupplierId
From Products
Inner Join Suppliers on
Products.SupplierId= Suppliers.SupplierId
这款的查询结果是不是清楚呢! Inner Join 的主要精神就是 exclusive , 叫它做排他性吧! 就是讲 Join 规则不相符的资料就会被排除掉, 譬如讲在 Product 中有一项产品的供货商代码 (SupplierId), 没有出现在 Suppliers 资料表中, 那么这笔记录便会被排除掉
Outer Join
这款的 Join 方式是一般人比较少用到的, 甚至有些 SQL 的管理者也从未用过, 这真是一件悲哀的代志, 因为善用 Outer Join 是可以简化一些查询的工作的, 先来看看 Outer Join 的语法
Select <要查询的字段> From <Left 资料表> <Left | Right> [Outer] Join <Right 资料表> On <Join 规则>
语法中的 Outer 是可以省略的, 例如你可以用 Left Join 或是 Right Join, 在本质上, Outer Join 是 inclusive, 叫它做包容性吧! 不同于 Inner Join 的排他性, 因此在 Left Outer Join 的查询结果会包含所有 Left 资料表的资料, 颠倒过来讲, Right Outer Join 的查询就会包含所有 Right 资料表的资料, 接下来我们还是来做些实际操作, 仍然是使用北风数据库, 但要先做一些小小的修改, 才能达到我们要的结果。
首先要拿掉 Products 资料表的 Foreign Key, 否则没有法度在 Products 资料表新增一笔 SupplierId 没有对映到 Suppliers 资料表的纪录, 要知影一个资料表的 Constraint 你可以执行 SQL 内建的 sp_helpconstraint , 在 QA 执行
sp_helpconstraint Products
接下来删除 FK_Products_Suppliers 这个 Foreign Key
Alter Table Products
Drop Constraint FK_Products_Suppliers
再来新增一笔纪录于 Products 资料表, SupplierId 使用 50 是因为它并没有对映到 Suppliers 资料表中的记录
Insert Into Products (ProductName,SupplierId,CategoryId)
values ('Test Product','50','1')
现在我们再执行头前的查询, 只是将 Inner Join 改为 Left Outer Join
Select ProductId, ProductName, Suppliers.SupplierId
From Products
Left Outer Join Suppliers
Products.Suppliers = Suppliers.SupplierId
比较一下两种 Join 方式的查询结果, 你应该就会知影其中的差别!
再来看看 Right Outer Join, 请新增下底这笔记录
Insert Into Suppliers (CompanyName)
values ('LearnASP')
现在请使用 Right Out Join 来作查询, 比较看看查询的结果和 Inner Join 有什么不同!
寻找不相符纪录
这里我们来看看如何使用 Out Join 来找不相符纪录, 可能是有子纪录却没有父纪录或是颠倒过来
Select Suppliers.CompanyName From Products
Right Join Suppliers
On Products.SupplierId = Suppliers.SupplierId
Where Products.SupplierId is Null
执行结果你会找到一笔资料为 LearnASP, 该笔供货商资料存在, 但基本上已经没有产品是来自这个供货商, 想象一下如果不用 Outer Join 你要怎么以一个 SQL 指令完成同一查询结果! 知道 Outer Join 的好用了吧! 再执行
Select Products.ProductName
From Products
Left Join Suppliers
On Products.SupplierId = Suppliers.SupplierId
Where Suppliers.SupplierId is Null
这个查询结果你会发现 Test Product 这项产品竟然找不到供货商的资料!
发表评论
-
oracle出现这种奇怪的表***$***==$0
2011-01-21 12:48 1387最近发现oracle中出现了这些奇怪的表名,上网查找后发现是o ... -
oracle函数 总结(使用及在什么情况下使用)
2010-12-28 19:58 16581、union --可以把两个不同的表的数据汇总到一个结果集 ... -
Oracle日期函数与应用(转)
2010-11-03 16:39 2470Oracle日期函数与应用(转) 相信很多人都有过 ... -
oracle 获取周末 及trunc的用法
2010-11-03 09:58 3209一、trunc的用法 1.trunc(for dates) ... -
Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法
2010-10-15 15:02 2048oracle分析函数rank(),row_ ... -
left join on、where后面的条件的区别
2010-10-14 15:26 14401left join on 即左连接,把left join左边的 ... -
oracle中merge into..using..on..when..when..用法
2010-09-09 17:37 11924语法: MERGE INTO [your table-nam ... -
解决oralce的Enterprise Manager console丢失问题
2010-09-07 13:55 1608今天在所有程序进入oracle菜单选项,突然找不到了,就自己想 ... -
彻底删除oracle 9i
2010-07-24 22:34 2009每次都要上网找,太麻烦了,所以就收藏了个。 一、Linu ... -
oracle中用start with...connect by prior子句实现递归查询
2010-06-03 08:39 3072今天在做权限这一块 ... -
oracle 表空间创建及说明
2010-04-29 22:58 3265//创建临时表空间 create temporary ta ... -
视图的好处
2010-04-28 22:50 4156视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包 ... -
oracle数据恢复
2010-04-26 20:03 1419今天不小心把数据库表的记录更改了。所以利用了下面的语句 ... -
oracle中给表和字段添加注释
2010-04-26 10:44 3708COMMENT ON COLUMN TABLE ... -
orcale的导入导出
2010-04-20 14:37 1461这里介绍的是导入导出的实例。 注意命令是在dos下输入,而不 ... -
解决ORA-12560: TNS: 协议适配器错误
2010-04-18 22:40 3938今天在sqlplus下输入用户名密码居然出现了ORA-1256 ... -
oracle 事务
2010-04-01 16:13 2003先了解下以下的名字 DDL 数据定义语言 - 建 ... -
sql语句有什么时候要commit,有时候不用commit的原因
2009-12-23 13:42 5342DML需要提交(insert、update、delete)DD ... -
sql server 左连接、右连接和全连接
2009-10-19 14:21 4777确切的说是inner joins內 ... -
sql isnull函数的使用
2009-10-19 13:45 1592sql isnull函数的使用 ISNULL使用指定的替 ...
相关推荐
* FULL OUTER JOIN:LEFT OUTER 和 RIGHT OUTER 中所有行的超集。 内连接(Inner Join) 内连接是最常见的一种连接,它也被称为普通连接,而 E.FCodd 最早称之为自然连接。例如: SELECT * FROM t_institution i ...
### inner join、left join、right join、outer join之间的区别 在数据库操作中,连接(Join)是一种非常重要的操作,用于组合两个或多个表中的数据。根据连接的方式不同,可以分为几种类型:`INNER JOIN`、`LEFT ...
根据不同的连接方式,`JOIN`可以分为几种类型,包括`INNER JOIN`、`OUTER JOIN`(左外联接`LEFT JOIN`、右外联接`RIGHT JOIN`以及全外联接`FULL JOIN`)和`CROSS JOIN`。每种类型的`JOIN`都有其独特的应用场景和特点。...
综上所述,理解并熟练运用INNER JOIN和OUTER JOIN是提升SQL查询能力的关键步骤。在实际工作中,根据需求选择合适的JOIN类型,能帮助我们更高效地处理多表数据,从而提高数据处理的效率和准确性。《数据库表连接和...
总之,LEFT JOIN、RIGHT JOIN、INNER JOIN和OUTER JOIN是SQL语言中的核心部分,理解和熟练运用它们对于任何数据库开发人员都至关重要。通过不断的实践和学习,你可以更好地掌握这些JOIN类型,并在解决复杂数据查询...
对于开发使用到数据库的应用,免不了就要使用联合查询,SQL中常用的联合查询有inner join、outer join和cross join;这三者的区别很多人都应该不是很清楚,包括我自己,下面我们一起来看看,如果你使用join连表,...
### Inner Join 和 Outer Join 的详细解析 #### 一、引言 在数据库管理与查询语言(如 SQL)中,连接(Join)是一项重要的技术,用于从两个或多个表中提取数据,并基于某些条件将这些数据合并在一起。连接类型主要...
在SQL语言中,连接(Join)操作是一种非常重要的数据整合方式,主要用于从两个或多个表中提取数据。根据连接方式的不同,可以分为多种类型,包括内连接(Inner Join)、左连接(Left Join)以及右连接(Right Join)...
根据连接方式的不同,可以分为内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN 和 FULL JOIN)以及交叉连接(CROSS JOIN)。下面我们将详细探讨每种连接方式的特点、适用场景及其具体的实现方法。 #### 内...
文章目录SQL 连接(JOIN)不同的 SQL JOINSQL INNER JOIN 关键字SQL LEFT JOIN 关键字SQL RIGHT JOIN 关键字SQL FULL OUTER JOIN 关键字 SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来。 下图展示了 ...
此外,JOIN操作(如INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)用于合并多个表的数据。 五、事务与并发控制 SQL Server支持事务处理,确保数据的一致性和完整性。事务由BEGIN TRANSACTION、COMMIT ...
SQL Server 2008支持多种类型的JOIN,包括INNER JOIN、LEFT JOIN(OUTER JOIN)、RIGHT JOIN和FULL OUTER JOIN。这些操作用于合并来自两个或更多表的数据,根据指定的匹配条件。 3. **子查询**: 子查询是嵌套在...
1. INNER JOIN:返回两个表中匹配的记录,如 `SELECT * FROM Table1 INNER JOIN Table2 ON Table1.KeyColumn = Table2.KeyColumn`。 2. LEFT JOIN(或LEFT OUTER JOIN):返回左表的所有记录,即使右表没有匹配的...
在本文中,我们将详细介绍SQL Left Join的使用方法、特点和区别,以及与Right Join和Inner Join的比较。 一、SQL Left Join的定义和使用 SQL Left Join也称为左外连接,它可以将左表中的所有记录与右表中的记录...
2. **联接操作**:书中会详细介绍INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN等不同类型的联接,以及如何使用JOIN关键字组合多个表的数据。 3. **子查询**:子查询可以在SELECT、FROM和WHERE子句中嵌套,...
### (Left join , Right Join, Inner Join)用法详解 #### 一、基本概念与应用场景 在数据库查询语言SQL中,连接(Join)是一种非常重要的操作,它允许我们结合两个或多个表的数据来检索信息。根据不同的连接方式,...
2. **JOIN操作**:T-SQL支持INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN等不同类型的连接,用于合并来自两个或更多表的数据。 3. **子查询**:嵌套在其他查询中的查询,可以作为表达式的一部分或者在WHERE...
在SQL Server中,有多种类型的JOIN,包括INNER JOIN、LEFT JOIN (或LEFT OUTER JOIN)、RIGHT JOIN (或RIGHT OUTER JOIN)以及FULL JOIN (或FULL OUTER JOIN)。每种JOIN类型都有其特定的应用场景和功能: 1. INNER ...