SQL必知必会 第12课 联结表

12.1 联结

SQL中最强大的功能之一就是在数据查询的执行中联结表。

关系表

关系表的设计就是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联。

为什么使用联结

联结是一种机制,用来在一条select语句中关联表,它可以将数据分解为多个表能更有效地存储,更方便地处理,并且伸缩性更好。

12.2 创建联结

# 创建联结
select vend_name, prod_name, prod_price
from vendors, products
where vendors.vend_id = products.vend_id;

在这里插入图片描述
这里所指定的两列(prod_name 和 prod_price)在一个表中,而第一列(vend_name)在另一个表中。
这两个表用where子句正确地联结。

where子句的重要性

在数据库表的定义中没有指示DBMS如何对表进行联结的内容,所以必须自己来完成这件事。在联结两个表时,要做的就是将第一个表中的每一行与第二个表中的每一行配对。

因此,要保证所有联结都有where子句,并且要保证where子句的正确性。

内联结

目前使用的联结为等值联结,基于两个表之间的相等测试。这种联结也叫内联结。

# 指定联结方式,查询结果同上
select vend_name, prod_name, prod_price
from vendors
inner join products on vendors.vend_id = products.vend_id;

在这里插入图片描述

联结多个表

SQL不限制一条select语句中可以联结的表的数目。创建联结的基本规则同上,列出所有表,然后定义表之间的关系。

# 联结多个表 
select prod_name, vend_name, prod_price, quantity
from orderitems, products, vendors
where products.vend_id = vendors.vend_id
and orderitems.prod_id = products.prod_id
and order_num = 20007;

在这里插入图片描述

# 列出订购物品RGAN01的所有顾客
select cust_name, cust_contact 
from customers 
where cust_id IN (
	select cust_id 
    from orders
    where order_num IN(
		select order_num 
        from orderitems
        where prod_id = 'RGAN01'));
        
# 列出订购物品RGAN01的所有顾客(使用联结)
select cust_name, cust_contact 
from customers, orders, orderitems
where customers.cust_id = orders.cust_id
and orderitems.order_num = orders.order_num
and prod_id = 'RGAN01';

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值