详解MySQL子查询(嵌套查询),联结表,组合查询

  

  

MySQL 4.1版本及以上支持子查询

  

<强>子查询:嵌套在其他查询中的查询。
  

  

子查询的作用:

  

<强> 1,进行过滤:

  

实例1:检索订购物品TNT2的所有客户的ID

  

详解MySQL子查询(嵌套查询),联结表,组合查询”>=<img src=

  

一般,在子句中对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。
  注意:列必须匹配,在子句中使用子查询(如这里所示),应该保证选择语句具有与在子句中相同数目的列。通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列。

  

示例2:返回订购产品TNT2的客户列表
  

  <中心> 详解MySQL子查询(嵌套查询),联结表,组合查询   

该实例更为有效的方法是采用联结进行查询:
  

  <中心> 详解MySQL子查询(嵌套查询),联结表,组合查询   

注意:具体关于联结的内容下文会整理到。

  

<强> 2,创建计算字段:

  

相关子查询:涉及外部查询的子查询。当列名可能有多义性时必须使用该语法。
  实例:显示客户表中每个客户的订单总数
  

  <中心> 详解MySQL子查询(嵌套查询),联结表,组合查询   

总结:
  子查询最常见的使用是在哪里子句的在操作符中,以及用来填充计算列
  子查询建立(和测试)查询的最可靠的方法是逐渐进行,这与MySQL处理它们的方法非常相同。首先,建立和测试最内层的查询。然后,用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入子查询。这时,再次测试它。对于要增加的每个查询,重复这些步骤。这样做仅给构造查询增加了一点点时间,但节省了以后(找出查询为什么不正常)的大量时间,并且极大地提高了查询一开始就正常工作的可能性。
  

  

  

联结表是SQL最强大的功能之一

  

<强> 1,一些相关的基础知识储备:

  

关系表:保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系(关系)互相关联。节省时间和存储空间,同时方便数据的修改,更新。因此,关系数据库的可伸缩性远比非关系数据库要好。
  可伸缩性(规模):能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称之为可伸缩性好。
  联结:联结是一种机制,用来在一条选择语句中关联表,可以联结多个表返回一组输出。

  

联结不是物理实体——它在实际的数据库表中不存在。联结由MySQL根据需要建立,它存在于查询的执行当中。
  在使用关系表时,仅在关系列中插入合法的数据非常重要。为防止这种情况发生,需要维护引用完整性,它是通过在表的定义中指定主键和外键来实现的。

  

<强> 2,基础联结:

  

,实例1:
  

  <中心> 详解MySQL子查询(嵌套查询),联结表,组合查询   

这两个表用在子句正确联结:在子句指示MySQL匹配厂商表中的vend_id和产品表中的vend_id。注意:在引用的列可能出现二义性时,必须使用完全限定列名(用一个点分隔的表名和列名)。
  在一条选择语句中联结几个表时,相应的关系是在运行中构造的,在数据库表的定义中不存在能指示MySQL如何对表进行联结的东西。在联结两个表时,实际上是将第一个表中的每一行与第二个表中的每一行配对其中子句作为过滤条件,它只包含那些匹配给定条件(这里是联结条件)的行。没有在子句,第一个表中的每个行将与第二个表中的每个行配对,而不管它们逻辑上是否可以配在一起。

  

笛卡儿积:由没有联结条件的表关系返回的结果。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。有时也被称为叉联结。

详解MySQL子查询(嵌套查询),联结表,组合查询