- 浏览: 130492 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (84)
- Java (30)
- C/C++ (3)
- Linux (1)
- 数据库 (19)
- 搜索引擎 (1)
- 数据结构 (2)
- 杂七杂八 (4)
- WEB前端 (6)
- Spring (2)
- JavaScript (9)
- DHTMLX (3)
- 正则表达式 (1)
- JQuery (1)
- Report (2)
- PDF (2)
- Word (0)
- Excel (0)
- CSV (0)
- Test & QA (1)
- BI (Business Intelligence) (10)
- SQL (18)
- SAP Business Object (0)
- DataStage (3)
- CI (Continuous Integration) (1)
- Algorith (3)
- Portal (1)
- Struts (1)
- Oracle (9)
- MS SQL Server (3)
- Teradata (3)
- MySql (1)
- Data Warehouse (5)
- ETL (8)
希望大家通过我的文章能对链接表有一个全新的认识
主要说的三个多表链接查询的方法有如下三种
接下来我一个一个的给大家介绍
1.inner join on
只要两个表的公共字段有匹配值,就将这两个表中的记录组合起来。以一个共同的字段求两个表中符合要求的交集,并将每个表符合要求的记录以共同的字段为
准合并起来。其实就是取他们的交集
语法如下提示
INNER JOIN 操作包含以下部分:
部分 说明
假如我们有 table1, table2 两张表。
field1,field2 要联接的字段的名称。如果它们不是数字,则这些字段的数据类型必须相同,并且包含同类数据,但是,它们不必具有相同的名称。
compopr
任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或者“<>”。
说明
可以在任何 FROM 子句中使用 INNER JOIN 操作。这是最常用的联接类型。只要两个表的公共字段上存在相匹配的值,Inner 联接就会组合这些表中的记录。
可以将 INNER JOIN 用于 Departments 及 Employees 表,以选择出每个部门的所有雇员。而要选择所有部分(即使某些部门中并没有被分配雇员)或者所有雇员(即使某些雇员没有分配到任何部门),则可以通过 LEFT JOIN 或者 RIGHT JOIN 操作来创建外部联接。
如果试图联接包含备注或 OLE 对象数据的字段,将发生错误。
可以联接任何两个相似类型的数字字段。例如,可以联接自动编号和长整型字段,因为它们均是相似类型。然而,不能联接单精度型和双精度型类型字段。
下例展示了如何通过 CategoryID 字段联接 Categories 和 Products 表:
FROM Categories INNER JOIN Products
ON Categories.CategoryID = Products.CategoryID;
在前面的示例中,CategoryID 是被联接字段,但是它不包含在查询输出中,因为它不包含在 SELECT 语句中。若要包含被联接字段,请在 SELECT 语句中包含该字段名,在本例中是指 Categories.CategoryID。
也可以在 JOIN 语句中链接多个 ON 子句,请使用如下语法:
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];
也可以通过如下语法嵌套 JOIN 语句:
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;
LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 之中,但是 INNER JOIN 不能嵌套于 LEFT JOIN 或 RIGHT JOIN 之中。
2.操作实例
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
实验如下:
1.left join
sql语句如下:
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)
结果说明:
eft join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).B表记录不足的地方均为NULL.
2.right join
sql语句如下:
right join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
3.inner join
sql语句如下:
innerjoin B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
最后来一起总结一下吧
1.inner join on 就是说两个表中都有相关数据时才显示出来
2. left join on 左表中数据全部显示,右表根据条件显示
3. right join on 右表全部显示,左表根据条件显示
不知道大家对多表链接有没有一个新的认识。
发表评论
-
ORACLE ROLLUP和CUBE的使用
2014-09-12 21:29 604ROLLUP,是GROUP BY子句的一种扩展,可以为每个分 ... -
用Oracle的分析函数删除重复的数据
2014-08-13 15:52 705用Oracle的分析函数删 ... -
Oracle分析函数
2014-08-13 15:45 641Oracle分析函数 本文讲述Oracle分析 ... -
Oracle外连接中对非连接条件使用(+)需要注意的地方
2014-03-24 16:33 998Oracle外连接中对非连接条件使用(+)需要注意的地方 ... -
shell执行oracle存储过程,获得存储过程返回值【转】
2013-05-08 14:53 4832一个小的etl调度,需要将存储过程执行情况进行返回并控制其后 ... -
SQL server 与Oracle开发比较【转】
2013-04-03 22:03 1545SQL server 与Oracle开发比较 本文档主 ... -
SQL/Oracle取出第 m 条到第 n 条记录的方法
2013-03-17 21:22 1810用一句SQL取出第 m 条到第 n 条记录的方法从Table ... -
SQL Server中的行列转换问题
2013-03-04 14:16 1361SQL Server中的行列转换问题 -
TERADATA解决锁表的方法
2013-02-04 16:16 2402TERADATA的锁表问题一直很头疼,经常早上过来发现任务 ... -
Teradata数据库SQL命令
2013-01-30 15:11 1357HELP 帮助用户了解数据库中各种对象的结构 SHOW 帮 ... -
ETL的一些概念和问题(转)
2012-11-21 11:30 10501. What is a logical data mappi ... -
Teradata数据库中的求字段值的长度函数(即对应SQL中的Length()函数)
2012-06-28 12:57 3502公司的新项目用的是Teradata数据库,之前从未用过这个,所 ... -
用 IBM WebSphere DataStage 进行数据整合:第 3 部分: 实时数据整合
2012-05-15 14:08 929【转载】用 IBM WebSphere DataSta ... -
用 IBM WebSphere DataStage 进行数据整合:第 2 部分
2012-05-15 14:05 1014【转载】用 IBM WebSphere DataSta ... -
用 IBM WebSphere DataStage 进行数据整合:第 1 部分
2012-05-15 14:02 885【转载】用 IBM WebSphere DataSta ... -
(转载)SQL函数说明大全
2012-04-06 15:25 1840觉得该作者总结的很好,所以就转载过来了,想看原文的朋友请点击此 ... -
SQL Server CONVERT() 函数
2012-01-31 15:42 739SQL Server CONVERT() 函数 ... -
SELECT INTO FROM 与 INSERT INTO SELECT
2011-12-06 15:49 12501.INSERT INTO SELECT语句 ... -
常用DDL,DML,DCL SQL语句大全
2011-11-26 20:33 1153下列语句部分是Mssql语句,不可以在access中使用。 ... -
【转载】ETL构建企业级数据仓库五步法
2011-11-02 09:57 825一、什么是 ETL ETLETL是数据抽取(EXTR ...
相关推荐
inner join、 left join 、right join、 outer join之间的区别
SQL语句inner join,left join ,right join连接的不同之处, 非常实用
Join on/inner join on/full join on/full outer join on/left join on/right join on/cross join on; 在使用jion时,on和where条件的区别;
SQL中的left outer join,inner join,right outer join用法详解
Mysql之innerjoin,leftjoin,rightjoin详解.pdf
left join right join inner join 区别和联系
SQL语句left join/right join/inner join 的用法比较 SQL语句left join/right join/inner join 的用法比较
(Left join , Right Join, Inner Join)用法详解,对Left join , Right Join, Inner Join完全掌握,由浅入深,真正领悟。
比较实用的方法,已经用到项目里,很好用的一个方法
SQL 外链接操作小结 inner join left join right join
通俗易懂的分析关联查询left,right,inner join
表的数据有:一、内连接-inner jion :最常见的连接查询可能是这样,查出学生的名字和成绩:[sql] view plain copy select s.
NULL 博文链接:https://appofis.iteye.com/blog/467692
Left join , Right Join, Inner Join 的相关内容,非常实用
主要介绍了SQL之left join、right join、inner join的区别浅析,本文讲解了它们的区别并给出了实例,需要的朋友可以参考下
这三者的区别很多人都应该不是很清楚,包括我自己,下面我们一起来看看,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right join属于outer join,而outer join还包括full join....
主要介绍了inner join 内联与left join 左联的实例代码,需要的朋友可以参考下