oracle sql 表连接,Oracle – SQL表的连接

Oracle – SQL表的连接

1. 笛卡尔连接(交叉连接)

● 笛卡尔(Descartes)乘积

又叫直积。假设集合A = {a, b},集合B = {0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

● 笛卡尔(Descartes)连接

笛卡尔连接是指在SQL语句中没有写出表连接的条件,优化器把第一个表的每一条记录和第二个表的所有纪录相连接。如果第一个表的纪录数为m,第二个表的纪录数为n,则会产生m*n条纪录数。

●语法:

SELECT*

FROMtable_1CROSS JOINtable_2

2. 外部连接(OUTER JOIN)

外连接的连接查询结果集中既包含那些满足条件的行,还包含其中某个表的全部行

●左(外)连接:LEFTOUTER JOIN

在连接查询中,左端的表中所有的元组都列出来,并且能在右端的表中找到匹配的元组,那么连接成功。如果在右端的表中,没能找到匹配的元组,那么对应的元组是空值(NULL)。

左外连接的含义是限制连接关键字右端的表中的数据必须满足连接条件,而不管左端的表中的数据是否满足连接条件,均输出左端表中的内容。

è语法

SELECTcolumns

FROMtable_1LEFTOUTER JOINtable_2ONcondition

SELECTstudent.no, name, class, course_no, grade

FROMstudentLEFT OUTER JOINcourse

ONstudent.no=course.no

●右(外)连接:RIGHTOUTERJOIN

右外连接与左外连接类似,只是右端表中的所有元组都列出,限制左端表的数据必须满足连接条件,而不管右端表中的数据是否满足连接条件,均输出表中的内容。

è语法:

SELECTcolumns

FROMtable_1RIGHTOUTER JOINtable_2ONcondition

SELECTstudent.no, name, class, course_no, grade

FROMstudentRIGHT OUTER JOINcourse

ONstudent.no=course.no

●全(外)连接:FULL OUTER JOIN

全外连接查询的特点是左、右两端表中的元组都输出,如果没能找到匹配的元组,就使用NULL来代替。

è语法:

SELECTcolumns

FROMtable_1FULLOUTER JOINtable_2ONcondition

SELECTstudent.no, name, class, course_no, grade

FROMstudentFULL OUTER JOINcourse

ONstudent.no=course.no

3. 内部连接(INNER JOIN)

内连接的连接查询结果集中仅包含满足条件的行,内连接是SQL Server缺省的连接方式。

●语法:

SELECTcolumns

FROMtable_1INNER JOINtable_2ONcondition

或者

SELECTcolumns

FROMtable_1,table_2

WHEREcondition

●等值连接:

在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

SELECT *

FROM authors, title_authors

WHERE authors.au_id=title_authors.au_id

对于两个表中都有的au_id在结果集中都会列出来

●自然连接:

在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

SELECT a.*, ta.title_id, ta.au_ord, ta.royaltyper

FROM authors a, title_authors ta

WHERE authors.au_id=title_authors.au_id

对于两个表中都有的au_id在结果集中只列出一个

●不等连接:

在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。

●自连接:

一个表连接内连接自身。使用同一个表的相同列进行比较,这时对于同一个表应给出不同的别名。

SELECT DISTINCT t1.title_id, author=CONVERT(char(8), au_fname) + ‘’ + CONVERT(char(15), au_lname)

FROM authors a, title_author t1, title_author t2

WHERE t1.title_id=t2.title_id AND

t1.au_id<>t2.au_id AND

t1.au_id=a.au_id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值