MySQL: 表的联结

大型的系统中涉及的数据库表之间是存在关系的,如订单表的商品信息会与商品表产生关系,商品表中的供应商列会与供应商信息表产生关系,分开存储有助于数据的一致性和存储空间的节省。那么怎么保证关系的有效?怎么方便地联结多个表进行查询呢?就往下看吧~

1、外键

外键是表中的某一列,包含另一个表的主键值。vendors表的主键就可以作为products表的外键,将两张表相关联。

如果插入/更新products表中的vend_id不是另一个表的主键,非法数据插入/更新不成功。

2、where语句创建联结

例1:查找商品表中商品名称和相应供应商的名字等。

select vend_name,prod_name,prod_price from vendors,products where vendors.vend_id=products.vend_id

例2:讲解子查询时有一个问题是列出订购物品TNT2的所有客户信息,这一问题也可以用多表联结来解决。

子查询:

SELECT cust_id,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='TNT2' 

                  )        

        )

多表联结:

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='TNT2'

注意:实际使用时究竟子查询性能好还是联结好可以测试选择,与具体的数据量,索引设置等都有关系,不建议联结特别多的表。

3、笛卡儿积

如果例1中的where条件省略了将发生什么?

select vend_name,prod_name,prod_price from vendors,products 

将返回第一个表的行数乘以第二个表的行数那么大的数据表,即两张表的结果两两组合的所有情况都会给出,是没有意义的。

4、内联结

内联结可以替代例1中的等值联结,而且更有助于展示联结关系,语法如下:

select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id=products.vend_id

猜你喜欢

转载自www.cnblogs.com/july23333/p/11802203.html