MySQL基础——子查询、联结表及高级联结

本文深入探讨MySQL中的子查询和联结技术。从子查询的过滤与计算字段应用,到联结表的概念,如内部联结、自联结、自然联结和外部联结,详细阐述了如何在SQL查询中高效地处理多表关系。同时,提到了表别名在简化查询中的作用,以及外部联结在包含无关联行场景的应用。
摘要由CSDN通过智能技术生成

子查询

查询(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值