关于SQL中的交叉连接到底有什么实际的用途呢?刚刚学习数据库

关于SQL中的交叉连接到底有什么实际的用途呢?刚刚学习数据库,第1张

1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录)

2.交叉连接:cross join (where...)

3.sql语句

select * from table1 cross join table2 (where ...)

实际应用中很少这样去设计表,所以查询时也很少这样查询。

查询出来的结果是,俩张表的所有组合情况。

总共分为:全连接(all join),内连接(inner join)和外连接(out join),而join left join和 right join是在内连接里面的交叉连接的原理是:假如a表有3条数据,b表有4条数据,用了交叉连接之后产生的新表(虚表)就有3*4=12条数据了。如果你想要的是这样的结果,那么就可以使用交叉连接了

JOIN分为:内连接、相等连接、自然连接、交叉连接,如下:

a、显式的内连接与隐式连接(inner join == join )

显示连接:SELECT * from employee join department on employee.DepartmentID = department.DepartmentID

等价于:

隐式连接:SELECT * from employee,department WHERE employee.DepartmentID = department.DepartmentID

注:当DepartmentID不匹配,就不会往结果表中生成任何数据。

b、相等连接

提供了一种可选的简短符号去表达相等连接,它使用 USING 关键字。

SELECT * from employee join department using (DepartmentID)

注:与显式连接不同在于:DepartmentID只显示一列

c、自然连接

比相等连接的进一步特例化。两表做自然连接时,两表中的所有名称相同的列都将被比较,这是隐式的。

自然连接得到的结果表中,两表中名称相同的列只出现一次.

select * from employee natural join department

注:在 Oracle 里用 JOIN USING 或 NATURAL JOIN 时,如果两表共有的列的名称前加上某表名作为前缀,

则会报编译错误: "ORA-25154: column part of USING clause cannot have qualifier"

或 "ORA-25155: column used in NATURAL join cannot have qualifier".

d、交叉连接(又称笛卡尔连接)

如果 A 和 B 是两个集合,它们的交叉连接就记为: A × B.

显示连接:

select * from employee cross join department

等价于

隐式连接:

select * from employee,department


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9788874.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存