————介绍什么是联结,为什么使用联结,如何编写使用联结的SELECT语句
相同的数据出现多次绝不是一件好事,这是关系数据库设计的基础。关系表的设计就是要把信息分解成多个表,一类数据一个表。各表通过某些共同的值互相关联(所以才叫关系型数据库)。
SELECT vend_name, prod_name, prod_price FROM Vendors, Products WHERE Vendors.vend_id = Products.vend_id;
几个概念
- 完全限定列名:Vendors.vend_id
- 笛卡儿积:由没用联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中行数乘以第二个表中的行数
- 叉联结:有时,返回笛卡儿积的联结,也称为叉联结
内联结:有时也称为等值联结,基于两个表之间的相等测试。
SELECT vend_name, prod_name, prod_price FROM Vendors INNER JOIN Products ON Vendors.vend_id = Products.vend_id; /*内联结,效果与WHERE一致*/联结多个表
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;联结的表越多,性能下降的越厉害
- DBMS中有联结表数量的限制
-
子查询和联结方式
子查询方式
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'));联结方式
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';
