请采用不相关子查询、相关子查询、连接查询等多种方法实现以下查询:查询顾客名为“zbowen”所购买的图书的订购信息,包括图书编号,数量及售价。并叙述以上每条查询语句的执行过程。
时间: 2024-09-30 21:08:33 浏览: 10
以下是使用不同方法实现的查询语句:
1. **不相关子查询** (嵌套查询):
```sql
SELECT book_id, quantity, price
FROM orders
WHERE customer_name = 'zbowen'
AND EXISTS (
SELECT 1
FROM books b
WHERE b.id = orders.book_id
);
```
执行过程:首先查询所有`customer_name`为`zbowen`的订单信息,然后对每个订单,再通过子查询检查是否有对应的图书记录。
2. **相关子查询** (内联子查询):
```sql
SELECT book_id, quantity, price
FROM orders o
JOIN (
SELECT id, customer_name
FROM customers
WHERE customer_name = 'zbowen'
) c ON o.customer_id = c.id
JOIN books b ON o.book_id = b.id;
```
执行过程:先从`customers`表中找到`zbowen`的id,然后在这个id对应的所有`orders`上,直接关联到`books`表获取图书信息。
3. **连接查询**:
```sql
SELECT o.book_id, o.quantity, b.price
FROM orders o
JOIN books b ON o.book_id = b.id
JOIN customers c ON o.customer_id = c.id
WHERE c.customer_name = 'zbowen';
```
执行过程:将`orders`, `books`和`customers`三个表通过`book_id`和`customer_id`字段关联起来,并过滤出`customer_name`为`zbowen`的记录。
以上三种查询方式都达到了同样的目标,即查找顾客名“zbowen”所购买的图书的订购信息,但执行效率和复杂度略有差异,相关子查询和连接查询通常更高效。
阅读全文