SQL---DML---联结表のCROSS JOIN和INNER JOIN

关系表的设计就是要把信息分解成多个表,一类数据一个表。各表通过某些常用的值,即关系设计中的关系互相关联。关系数据库的可伸缩性比非关系数据库要好的多。

但是数据存储在多个表中,如果想使用单个SELECT语句检索出数据,则必须使用联结。联结不是物理实体,它在实际的数据库中不存在。


完全限定列名:在引用的列可能出现二义性时,必须使用完全限定列名(用一个句点分隔的表名和列名)。如果引用一个没有用表名限制的具有二义性的列名,大多数DBMS将返回错误。

WHERE子句的重要性:WHERE子句作为过滤条件,它只包含那些匹配给定条件的行。没有WHERE子句,第一个表中的每个行将与第二个表中的每个行配对,而不管它们逻辑上是否可以配对在一起。

  • 叉联结(CROSS JOIN)

笛卡尔积:由没有联结条件的表关系返回的结果为笛卡尔积,检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。这种联结称为 叉联结,CROSS JOIN。

叉联结的例子:

SELECT vend_name,prod_name,prod_price
FROM Vendors,Products;

应该保证所有联结都有WHERE子句!不然就是叉联结了。

  • 内部联结,等值联结(INNER JOIN)

等值联结称为内部联结,它基于两个表之间的相等测试。

ANSI SQL规范首选INNER JOIN语法。

例:

SELECT vend_name,prod_name,prod_price
FROM Vendors INNER JOIN Products
on Vendors.vend_id = Products.vend_id;

内部联结也可以使用下面的方式实现:

例:

SELECT vend_name,prod_name,prod_price
FROM Vendors,Products
WHERE Vendors.vend_id = Products.vend_id;

DBMS在运行时关联指定的每个表以处理联结,但是是非常耗资源的,因此不要联结不必要的表,联结的表越多,性能下降越厉害。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值