初识MySQL(5)表的联结

1.外键

表的联结就是将两个不同的表通过他们公共的列属性合成一个表,方便我们对其中的属性进行更进一步的操作,而在表的联结的过程中就会出现一个我们之前没有接触过的概念:外键。
外键指的就是B表中的属性中如果有A表的主键属性,那么称这个属性为B表的外键。

2.创建联结

现在假设有两个表,vendors和products表,分别存储供应商信息和产品信息,vend_id是vendors表的主键,也存在于products表中,也就是products表的外键,因此我们可以利用下列语句来进行表的联结:

SELECT vend_name,prod_name,prod_price FROM vendors,products WHERE
vendors.vend_id = products.prod_id;

以上语句表达的意思不难理解,就是通过vendors和products两个表共有的属性id作为联结两个表的桥梁,联结成一个总表,然后再查询出需要的三个属性。
记住,创建联结的时候一定要有WHERE语句,不然会返回很多我们并不需要的数据。

到目前位置我们所使用的表的联结方式都是等值联结,即通过两个表中的两个共同的属性的属性值相等来建立两个表之间的关系,联结成一个大的表,这种联结也称为内部联结。但是我们可以使用内部联结专有的表达方式来实现上面语句的功能:

SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON 
vendors.vend_id = products.prod_id;

创建联结的时候并不一定只有两个表,可以有多个表,这个时候的条件肯定也就不只一个,我们可以用AND排列所有的实现表的联结操作的条件。

3.自联结

自联结顾名思义就是表自己与自己联结,这个时候因为联结的是自己本身,因此就应该为表设置别名,为表设置别名的方式同样是使用AS关键字来实现的。下面是一个需要运用自联结的具体例子:
如果发现某一ID为AA的产品存在问题,因此想知道生产该产品的供应商生产的其他物品是否也存在问题。此查询要求首先找到生产该ID产品的供应商,然后找到这个供应商生产的其他产品。

SELECT prod_id,prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE
 prod_id = 'AA');

这是第一种实现的方法,他运用了子查询。

SELECT p1.prod_id,p1.prod_name FROM products AS p1,products AS p2
WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'A';

这种方式采用的就是对于products的自连接,并分别命名为p1和p2。

4.外部联结

有时候我们需要在两个表联结的时候包括那些只出现在其中一个表中的行,这就成为外部联结。
例如我们有一张用户表和一张订单表,如果使用内部联结,那么没有订单的用户永远不会出现在联结的表中,这个时候如果需要联结的表中包含没有订单的用户,就需要使用外部联结。

SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders ON
customers.cust_id = orders.cust_id;

这与内部联结的第二种表示方法类似,但是值得注意的是,使用外部联结的时候需要指定LEFT还是RIGHT,意思就是选择左边的表的所有行还是右边的表的所有行,这个时候我们需要的是所有的用户而不是所有的订单,所以当然应该使用左关联。

发布了12 篇原创文章 · 获赞 0 · 访问量 239

猜你喜欢

转载自blog.csdn.net/weixin_41902922/article/details/104081122