在做牛腩新闻发布系统的时候,联结表用到的很频繁,其实在做机房收费系统时
很多查询语句就用到了在数据查询的执行中联结表(主要是因为涉及数据库时用到的三范式)
。觉得很是新奇,因为之前没有接触过,第一次机房的时候,数据库设计的很是啰嗦,所以也涉及不到联结表(因为
大多数的查询功能在一张表中就能完成了)
下面以例子形式介绍一下在数据查询的执行中联结表——这也是SQL最强大的功能之一
如果所需数据存储在多个表中,怎么用单条Select语句检索出数据?
答:使用联结!!联结是一种机制,使用特殊语法,用一条Select语句可以联结多个表,返回一组输出。
Vendors表(供应商信息表) |
|
字段名称 |
说明 |
Vend_id |
供应商ID |
Vend_name |
供应商名称 |
Products表(产品信息表) |
|
字段 |
说明 |
Vend_id |
供应商ID |
Prod_id |
产品ID |
Prod_name |
产品名称 |
Prod_Price |
产品价格 |
OrderItems表(订单信息表) |
|
字段名称 |
说明 |
Prod_id |
产品ID |
order_num |
订单编号 |
quantity |
订购数量 |
Vendors表:存储供应商信息(供应商ID—vend_id为主键)
Products表:存储产品信息——除了存储供应商ID(产品ID—prod_id为主键)外不存储其他任何供应商的信息
OderItems表:存储订单信息(订单编号—order_num为主键)
1,联结的创建很简单,规定要联结的表及联结条件(Where子句作为过滤条件)即可。
例子:从Vendors、Products表中查询供应商名称、产品名称、产品价格:
SELECT vend_name,prod_name,prod_price,FROM Vendors,Products
WHERE Vendors.vend_id=Products.vend_id;
2,内部联结
目前为止所用的联结称为等值联结,它基于两个表之间的相等测试(也成为内部联结。)
同上例:从Vendors、Products表中查询供应商名称、产品名称、产品价格:
SELECT vend_name,prod_name,prod_price FROMVendors INNER JOINProducts ON Vendors.vend_id=Products.Vend_id;
注:此Select语句与上例中的相同,但FROM子句不同。此处,两个表之间的关系是FROM
子句的组成部分,以INNER JOIN指定,并且联结条件用特定的ON子句而不是WEHER子句给出。但是:传递给ON的实际条件与传递给WHERE子句的相同。
3,联结多个表
(1)一条SELECT语句中可以联结的表的数目没有限制;
(2)创建联结的基本规则相同——先列出所有要联结的表,然后设置表之间的关系(即查询条件)
例子:
从订单表(OrderItems)、产品信息表(Products)、供应商信息表(Vendors)中查询订单编号为0001的产品名称、供应商名称、产品价格、订购数量
SELECT prod_name,vend_name,prod_price,quantity FROMOrderItems,Products,Vendors WHERE Products.vend_id=Vendors.vend_id AND OrderItems.prod_id=Products.prod_idAND order_num=0001
学习总结:学习是不断熟悉起来的一个过程!!