
1、等值连接是最常见的一种连接查询,通常是在主外键关联关系的表间建立,并将连接条件设定为有关系的列,使用“=”连接相关的表。
2、非等值连接是指在多个表中使用非等号连接,查询在多个表中有非等值关联关系的数据,非等值连接 *** 作符包括>、>=、<、<=、<>以及BETWEENAND、LIKE、IN等。
3、自连接是一种比较特殊的连接查询,数据来源是一个表。
4、左外连接是内连接的一种扩展,不止会返回满足连接条件的记录,还会返回那些不满足连接条件的 *** 作符左边表的其他记录。
5、右外连接和左外连接相似,右外连接不止会返回满足连接条件的记录,还会返回那些不满足连接条件的 *** 作符右边表的其他记录。
假设有A,B两个表。
表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
--------------------------------------------
1left join
sql语句如下:
select from A
left join B
on AaID = BbID
结果如下:
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)只会显示符合搜索条件的记录(例子中为: AaID = BbID)
B表记录不足的地方均为NULL
--------------------------------------------
2right join
sql语句如下:
select from A
right join B
on AaID = BbID
结果如下:
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填充
--------------------------------------------
3inner join
sql语句如下:
select from A
innerjoin B
on AaID = BbID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 AaID = BbID的记录这说明inner join并不以谁为基础,它只显示符合条件的记录
--------------------------------------------
PS:
LEFT JOIN *** 作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。
语法:FROM table1 LEFT JOIN table2 ON table1field1 compopr table2field2
说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。
如果在INNER JOIN *** 作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误
注:left和right是外连接,Inner是内连接。
多看看SQL的帮助就明白了
A表 B表
a b a b
1 3 3 2
2 4 1 4
左连接:
select A,B from A LEFT JOIN B ON Ab=Bb;
结果
1 3
2 4 1 4
右连接:
select A,B from A RIGHT JOIN B ON Ab=Bb;
结果
2 4 1 4
3 2
一句话,左连接就是左边全部保留按条件查出右边,右连接就是右边全部保留按条件查出左边
简单说就是以谁为准就用谁!
以左数据为准去找满足条件的右数据,就用左外连;
以右数据为准去找满足条件的左数据,就用右外连;
INNER JOIN 就不用说了吧
比如A表有某些学生数据,B表部分A表内容中的一部分学生数据+A表没有的学生数据,
那么用左外连接 就是以A表学生数据为准,去找B表内容/或合并出另一个内容。
假设a表有两个字段,Aid、name, b 表也有两字段 Bid,nameid
其中 nameid是Aid在b 表中的外键。
a表有数据如下:
Aid name
1 a
2 b
3 c
b表有数据如下:
Bid nameid
1 1
2 1
3 1
4 2
5 2
用左连接,说白一点就是以左边那个表为标准,左边那表(表a)的所有记录必须得全部出现,例如:
select from a left join b on aAid=bnameid
结果应应该为:
Aid name Bid nameid
1 a 1 1
1 a 2 1
1 a 3 1
2 b 4 2
2 b 5 2
3 c NULL NULL
表a 的 Aid为1的出现了三次,Aid为2的出现了两次,Aid为3的出现了一次,全部都出现了。但因为在表b中没有以Aid为3对应的记录,所以用null来填充。
同样道理,用右连接,说白一点就是以右边那个表为标准,
例如:select from a right join b on aAid=bnameid
结果应该为:
Aid name Bid nameid
1 a 1 1
1 a 2 1
1 a 3 1
2 b 4 2
2 b 5 2
表b的记录必须全部出现,但没有出现 a表中Aid为3的记录,是因为b表中没有以之对应的记录,而且此时是以b表为标准的。这样的比喻不知你看不看得明。
来自>
数据库查询分为 单表查询、连接查询、嵌套查询、集合查询
其中连接查询指涉及两个及以上表的查询,有等值连接、非等值连接、自然连接、自身连接、外连接五种
等值连接和非等值连接指where子句的查询条件(由比较运算符连接起来的条件,比较运算符有= >= <= > < != 等)比如:
select student,sc from student,sc where studentsno=scsno
自身连接是对本身表的连接,即内连接,即给自己取一个别名,当作两张表使用
如查询每一们课的间接先修课
select firstcno,secondcpno from course first ,course second where firstcpno=secondcno
(其中cno为课程号,cpno为先修课号)
外连接为连接信息不全时使用,增加一个万能行,比如学生95003没有选课,那么在选课表(sc)中就没有相应的元组,但是我们想从student表为主体列出每个学生的基本情况及选课情况,若没个学生没有选课,只输出其基本情况,选课信息为空即可,这是就要用到外连接,比如:
select student,sccno,scgrade from studentsc
where studentsno=scsno();
其中scsno() 中的号就是右连接,若号出现在左边,就为左连接
自然连接指在广义笛卡儿积中去掉重复属性列的连接
具体资料请参阅一些数据库书籍:)
肯定是0啊,你的charche中,没有telephone=4210004的。
因为你是左连接,所以userlist表中的telephone=4210004的结果显示出来,可是charche中没有,按照道理应该是空,可是你不是nvl了么,所以就显示0了。
如果是等值连接inner join那么telephone=4210004这一行,应该是不显示的
以上就是关于oracle左连接查询和右连接查询随便举个例子谢谢!全部的内容,包括:oracle左连接查询和右连接查询随便举个例子谢谢!、数据库 *** 作:左连接和右连接到底怎么回事啊,我今天就没怎么搞明白、数据库 *** 作中,左连接,右连接是什么意思,举例说明等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)