子查询
查询(query) 任何SQL语句都是查询,但此术语一般指SELECT语句。
利用子查询进行过滤
# 查询订购了TNT2的所有客户的客户信息
mysql> SELECT cust_name, cust_contact
-> FROM customers
-> WHERE cust_id IN (SELECT cust_id # 查询订单号中的客户ID
-> FROM orders
-> WHERE order_num IN (SELECT order_num # 查询订购了TNT2的订单号
-> FROM orderitems
-> WHERE prod_id = 'TNT2'));
+----------------+--------------+
| cust_name | cust_contact |
+----------------+--------------+
| Coyote Inc. | Y Lee |
| Yosemite Place | Y Sam |
+----------------+--------------+
作为计算字段使用子查询
当需要输出的记录都在同一个表中,可以使用上一节的子查询完成。若需要输出的记录在不同表中,可以作为计算字段使用子查询。
# 查询customers表中每个客户的订单总数(在orders表中)
mysql> SELECT cust_name, cust_state,
-> (SELECT COUNT(*) FROM orders
-> WHERE orders.cust_id = customers.cust_id) AS orders
-> FROM customers
-> ORDER BY cust_name;
+----------------+------------+--------+
| cust_name | cust_state | orders |
+----------------+------------+--------+
| Coyote Inc. | MI | 2 |
| E Fudd | IL | 1 |
| Mouse House | OH | 0 |
| Wascals | IN | 1 |
| Yosemite Place | AZ | 1 |
+----------------+------------+--------+
联结表
SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表。
关系表
关系表的设计是要保证把信息分解成多个表,一类数据一个表,降低信息重复和记录错误,易于更改。
假如有由多个供应商的多种物品的信息,此时建立两个表,一个存储供应商信息,一个存储产品信息。vendors表包含所有供应商信息,每个供应商占一行,具有唯一的标识(主键);products表只存储产品信息&#x