SQL必知必会 第12课 联结表

忘是亡心i 2022-11-07 11:58 80阅读 0赞

12.1 联结

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

关系表

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

为什么使用联结

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

12.2 创建联结

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

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

where子句的重要性

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

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

内联结

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

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

在这里插入图片描述

联结多个表

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

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

在这里插入图片描述

  1. # 列出订购物品RGAN01的所有顾客
  2. select cust_name, cust_contact
  3. from customers
  4. where cust_id IN (
  5. select cust_id
  6. from orders
  7. where order_num IN(
  8. select order_num
  9. from orderitems
  10. where prod_id = 'RGAN01'));
  11. # 列出订购物品RGAN01的所有顾客(使用联结)
  12. select cust_name, cust_contact
  13. from customers, orders, orderitems
  14. where customers.cust_id = orders.cust_id
  15. and orderitems.order_num = orders.order_num
  16. and prod_id = 'RGAN01';

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,80人围观)

还没有评论,来说两句吧...

相关阅读