在书中 15.2.3 中,让查询订单编号为 20005 的订单中的物品信息。
由于查询列来自三个表,所以书中连接了三个表。
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 = 20005;
我合计改一下,是不是能更高效,改完查到的东西也一样,但改完就没法查 quantity 列了(来自 orderitems )
SELECT
prod_name,
prod_price,
(SELECT vend_name FROM vendors WHERE vendors.vend_id = products.vend_id) AS vend_name
FROM products WHERE prod_id IN
(SELECT prod_id FROM orderitems WHERE order_num = 20005)
- 我这样改,效率有变好吗?或者能更好吗?
- 怎么才能让我这种改法,能查到 quantity 列?
表信息:
CREATE TABLE orderitems
(
order_num int NOT NULL ,#订单号
order_item int NOT NULL ,
prod_id char(10) NOT NULL ,#产品 id
quantity int NOT NULL ,#产品数量
item_price decimal(8,2) NOT NULL ,
PRIMARY KEY (order_num, order_item)
) ENGINE=InnoDB;
CREATE TABLE products
(
prod_id char(10) NOT NULL,#产品 id
vend_id int NOT NULL ,#供应商 id
prod_name char(255) NOT NULL ,#产品姓名
prod_price decimal(8,2) NOT NULL ,#产品价格
prod_desc text NULL ,
PRIMARY KEY(prod_id)
) ENGINE=InnoDB;
CREATE TABLE vendors
(
vend_id int NOT NULL AUTO_INCREMENT,#供应商 id
vend_name char(50) NOT NULL ,#供应商姓名
vend_address char(50) NULL ,
vend_city char(50) NULL ,
vend_state char(5) NULL ,
vend_zip char(10) NULL ,
vend_country char(50) NULL ,
PRIMARY KEY (vend_id)
) ENGINE=InnoDB;
我把有用的信息都标注出来了。