SQL多表关联! inner join,left join ,right join
2007-08-06 20:35
我对多表关联的总结://以下若有理解错误请指出,谢谢! 内连接 INNER JOIN:只显示多表之间与关联条件相匹配的列.
外连接: LEFT JOIN :以左表为基础,显示左表中的所有列,不管是否与关联条件相匹配,而右表中的数据只显示与关联条件相匹配的列,不匹配的列以NULL字符填充.
RIGHT JOIN:以右表为基础,显示右表中的所有列,不管是否与关联条件相匹配,而左表中的数据只显示与关联条件相匹配的列,不匹配的列以NULL字符填充.
FULL JOIN :显示多个表中的所有的列,不匹配关联条件的列以NULL字符填充.
下面是我写的关于sql 多表关联的sql语句,大家可以在SQL SERVER中操作下试下,是否与上面的对于sql关联的总结相同,查询结果我就不结了,大家试下就知道了!
create database mydb;
use mydb;
create table customers ( cust_id int not null identity(1,1) primary key, cust_name varchar(100) not null, cust_tel varchar(50) not null, cust_address varchar(100) not null )
create table books ( isbn int not null identity(700001,1), book_name varchar(100) not null, price money not null )
create table orders ( order_id int not null identity(1001,1), isbn int not null, cust_id int not null, order_date datetime not null )
insert into customers(cust_name,cust_tel,cust_address) values('书店a','0553-2451466','江苏省'); insert into customers(cust_name,cust_tel,cust_address) values('书店b','0553-2215266','江苏省'); insert into customers(cust_name,cust_tel,cust_address) values('书店c','0553-8754466','江苏省'); insert into customers(cust_name,cust_tel,cust_address) values('书店d','0553-4563466','江苏省'); insert into customers(cust_name,cust_tel,cust_address) values('书店e','0553-2145212','江苏省');
insert into books(book_name,price) values('php',78); insert into books(book_name,price) values('java',72); insert into books(book_name,price) values('c++',72); insert into books(book_name,price) values('C语言',56); insert into books(book_name,price) values('sql',53); insert into books(book_name,price) values('asp.net',69); insert into books(book_name,price) values('asp',43);
insert into orders(isbn,cust_id,order_date) values(700001,1,getdate()); insert into orders(isbn,cust_id,order_date) values(700002,1,getdate()); insert into orders(isbn,cust_id,order_date) values(700003,2,getdate()); insert into orders(isbn,cust_id,order_date) values(700001,1,getdate()); insert into orders(isbn,cust_id,order_date) values(700003,1,getdate()); insert into orders(isbn,cust_id,order_date) values(700006,1,getdate()); insert into orders(isbn,cust_id,order_date) values(700001,2,getdate()); insert into orders(isbn,cust_id,order_date) values(700001,2,getdate()); insert into orders(isbn,cust_id,order_date) values(700002,2,getdate()); insert into orders(isbn,cust_id,order_date) values(700003,1,getdate()); insert into orders(isbn,cust_id,order_date) values(700003,9,getdate());--我下面是故意的,让大家看到效果 insert into orders(isbn,cust_id,order_date) values(7000025,9,getdate());
select a.order_id,a.isbn,b.book_name,b.price,c.cust_name,c.cust_tel,c.cust_address,a.order_date from orders as a inner join books as b on a.isbn=b.isbn inner join customers as c on a.cust_id=c.cust_id;
select a.order_id,a.isbn,b.book_name,b.price,c.cust_name,c.cust_tel,c.cust_address,a.order_date from orders as a left join books as b on a.isbn=b.isbn left join customers as c on a.cust_id=c.cust_id;
select a.order_id,a.isbn,b.book_name,b.price,c.cust_name,c.cust_tel,c.cust_address,a.order_date from orders as a right join books as b on a.isbn=b.isbn right join customers as c on a.cust_id=c.cust_id;
左表右表指哪些表? select * from table_1 as a left join table_2 as c on a.id=b.id leftjoin table_3 as c on b.isbn=c.isbn
疑问中............ 第一种认为: 认为最左边的表左表 table_1 右表就是除了左表的其它表,而不是最右边的表 所以这里的左表是 table_1,那右表是table_2,table_3
第二种认为: table_1 是table_2的左表,table_2是table_3的左表
CSDN SQL专区提问,竟请您的加盟:http://community.csdn.net/Expert/topic/5696/5696608.xml?temp=.4501764
还请牛人指点!
最终答案: table_1 左连接 table_2 以table_1为基础进行连接运算,得到新表即临时表(#table)。 #table 左连接 table_3 以table# 为基础进行连接运算,得到最终结果。 与我的总结一致!
以下是来自网上的关于关联说的比较好的文章(易懂) 来自:http://www.cnblogs.com/temptation/archive/2006/05/23/407328.aspx 表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语句如下:
SELECT * FROM A 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 行) 结果说明: left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的. 换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID). B表记录不足的地方均为NULL.2. right joinsql语句如下:
SELECT * FROM A 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 joinsql语句如下:
SELECT * FROM A 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并不以谁为基础,它只显示符合条件的记录.
-----------------[以下为网上的一点资料]------------------ LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。
语法: FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2
说明: ① table1, table2参数用于指定要将记录组合的表的名称。 ② field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。 ③ compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。 ④ 如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误。
|
分享到:
相关推荐
在SQL查询中,JOIN操作是连接...在实际数据库设计中,JOIN操作是构建复杂查询的重要工具,尤其在处理多表关系时。理解并熟练掌握LEFT JOIN、RIGHT JOIN和INNER JOIN的使用,能帮助我们更有效地从数据库中提取所需信息。
`INNER JOIN`仅返回匹配的行,而`LEFT JOIN`和`RIGHT JOIN`分别优先考虑左侧和右侧的表,即使另一侧没有匹配也会返回数据。`FULL OUTER JOIN`则返回所有记录,无论是否有匹配。正确理解这些连接方式有助于更有效地...
* RIGHT OUTER JOIN:与 LEFT 相同,但两个表的角色互换。 * FULL OUTER JOIN:LEFT OUTER 和 RIGHT OUTER 中所有行的超集。 内连接(Inner Join) 内连接是最常见的一种连接,它也被称为普通连接,而 E.FCodd 最...
在SQL语言中,连接(Join)操作是一种非常重要的数据整合方式,主要用于从两个或多个表中提取数据。根据连接方式的不同,可以分为多种类型,包括内连接(Inner Join)、左连接(Left Join)以及右连接(Right Join)...
总之,LEFT JOIN、RIGHT JOIN、INNER JOIN和OUTER JOIN是SQL语言中的核心部分,理解和熟练运用它们对于任何数据库开发人员都至关重要。通过不断的实践和学习,你可以更好地掌握这些JOIN类型,并在解决复杂数据查询...
在SQL中,主要有四种类型的连接查询:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。下面将详细解释这四种连接方式。 1. 内连接(INNER JOIN): 内连接返回两个表中...
### (Left join , Right Join, Inner Join)用法详解 #### 一、基本概念与应用场景 在数据库查询语言SQL中,连接(Join)是一种非常重要的操作,它允许我们结合两个或多个表的数据来检索信息。根据不同的连接方式,...
左连接(LEFT JOIN)、右连接(RIGHT JOIN)和内连接(INNER JOIN)是三种最基本的连接类型。在本节中,我们将详细介绍左连接、右连接和内连接的区别和联系。 左连接(LEFT JOIN) 左连接返回左表中的所有行,右表...
SQL 外链接操作小结 inner join left join right join SQL 外链接操作是关系型数据库管理系统中的一种基本操作,用于从多个表中检索数据。外链接操作可以分为三种:inner join、left join 和 right join。 inner ...
### 数据库关联查询(Left, Right, Inner Join) 在数据库管理与操作中,关联查询是一项极为重要的技术,它能够帮助我们高效地从多个表中提取数据,并根据特定条件进行匹配和整合。本文将通过通俗易懂的方式,详细...
sql多表连接查询inner join, left join , right join ,full join ,cross join Posted on 2008-05-07 21:55 我开始懂了 阅读(21431) 评论(9) 编辑 收藏 inner join,full outer join,left join,right jion 内部连接 ...
SQL Left Join、Right Join和Inner Join都是用于组合表数据的查询操作,但它们之间存在着明显的区别。 * Left Join:以左表为基础,返回左表中的所有记录和右表中符合条件的记录。 * Right Join:以右表为基础,...
在实际工作中,根据需求选择合适的JOIN类型,能帮助我们更高效地处理多表数据,从而提高数据处理的效率和准确性。《数据库表连接和查询分析.doc》这样的文档很可能包含了这些概念的详细解释和示例,有助于进一步学习...
**INNER JOIN** 是SQL中最常用的连接类型之一,主要用于从两个或多个表中提取数据,其中仅返回那些满足连接条件的记录。简单来说,INNER JOIN返回的是两个表中匹配部分的数据。 #### 二、INNER JOIN的语法结构 ...
### Hive SQL Left Join 数据缺失问题解析 #### 一、问题背景 在大数据处理场景中,Hive 是一种广泛使用的工具,用于对存储在 Hadoop 文件系统中的数据进行数据汇总、查询和分析。随着Hive版本的不断更新,部分用户...
"Merge Join" Step就是其中之一,它允许用户实现类似SQL中的各种类型关联查询,包括INNER JOIN、LEFT JOIN、RIGHT JOIN以及FULL JOIN。 INNER JOIN是SQL中的一种基本联接类型,它返回两个表中存在匹配的记录。在...
根据不同的连接方式,`JOIN`可以分为几种类型,包括`INNER JOIN`、`OUTER JOIN`(左外联接`LEFT JOIN`、右外联接`RIGHT JOIN`以及全外联接`FULL JOIN`)和`CROSS JOIN`。每种类型的`JOIN`都有其独特的应用场景和特点。...
JOIN 通常与 ON 关键字搭配使用,基本语法如下:`FROM table1 INNER|LEFT|RIGHT JOIN table2 ON condition`,其中 `table1` 通常称为左表,`table2` 称为右表。ON 关键字用于设定匹配条件,用于限定在结果集合中想要...
SQL语句优化对于大型数据库系统至关重要,特别是在涉及多表查询时,JOIN、LEFT JOIN 和 RIGHT JOIN 的高效运用能显著提升查询速度。以下将详细探讨这些JOIN类型以及相关的优化策略。 JOIN原理: JOIN操作实际上是...
在SQL查询中,JOIN操作是用于合并两个或更多表中的数据的关键部分,它允许你在不同表之间建立联系,以便从多个源获取所需的信息。这里我们将深入探讨几种JOIN类型及其使用,以及ON和WHERE子句的区别。 1. INNER ...