玖叶教程网

前端编程开发入门

基础篇,4步让你彻底明白数据库子查询

假定有三张表

1 订单表Order 包含: 订单编号 客户编号 订单日期

2 订单详情表OrderItems 包含:订单详情编号 订单编号 产品编号 产品名称 产品价格等

3 客户表 Customers 包含: 客户编号 客户姓名 客户性别 联系电话等

如果已知产品编号RGAN01

那么现在要列出订购RGAN01产品的所有顾客

怎么做?

1 在订单详情表中查询出订购产品编号为RGAN01产品的所有的订单编号 比如有200007,200008两个订单

2 在订单表中查询出这些订单编号对应的所有的客户编号 比如有10000004,100000005两个客户

3 在客户表中查询出这些客户编号对应的所有的客户信息 比如分别叫张三和李四的两个客户

4 从后向前进行整合

第一步

在订单详情表中查询出订购产品编号为RGAN01产品的所有的订单编号

SELECT order_num

FROM OrderItems

WHERE prod_id="RGAN01"

查询结果可能是这样:

order_num

----------

2000007

2000008

第二步

在订单表中查询出这些订单编号对应的所有的客户编号

SELECT cust_id

FROM Orders

WHERE order_id IN(2000007,2000008)

查询结果可能是这样:

cust_id

------------

1000000004

1000000005

第三步

在客户表中查询出这些客户编号对应的所有的客户信息

SELECT cust_name,cust_phone

FROM Customer

WHERE cust_id IN(1000000004,1000000005)

查询结果可能是这样:

cust_name cust_phone

---------- -----------

张三 13145678900

李四 13556789000

第四步

从后向前进行整合:

SELECT cust_name,cust_phone

FROM Customer

WHERE cust_id IN(SELECT cust_id

FROM Orders

WHERE order_num IN(SELECT order_num

FROM OrderItems

WHERE prod_id="RGAN01"))

当在一张表中需要的信息没有时

就只能通过编号联系其他表

例如

这里在订单详情表中是没有顾客的任何信息的

同时

已知的产品编号在这三个表里只存在于订单详情表中

要想仅仅通过产品编号就获得相关的所有顾客信息

就只能通过编号进行与其他表进行联系

先通过产品编号查询到对应的所有订单编号

再通过订单编号查询到对应的所有顾客编号

最后通过顾客编号查询到对应的顾客信息

编号是表进行联系的桥梁

通过表和表的联系就能查询到本表所没有的信息

当要查询的信息本表没有时

一定要通过编号对表与表进行联系

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言