在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、子查询 MySQL 4.1版本及以上支持子查询 子查询:嵌套在其他查询中的查询。 子查询的作用: 1、进行过滤: 实例1:检索订购物品TNT2的所有客户的ID = + 一般,在WHERE子句中对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。 示例2:返回订购产品TNT2的客户列表 该实例更为有效的方法是采用联结进行查询: 注意:具体关于联结的内容下文会整理到。 2、创建计算字段: 相关子查询:涉及外部查询的子查询。当列名可能有多义性时必须使用该语法。 总结: 二、联结表 联结表是SQL最强大的功能之一 1、一些相关的基础知识储备: 关系表:保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系(relational))互相关联。节省时间和存储空间,同时方便数据的修改、更新。因此,关系数据库的可伸缩性远比非关系数据库要好。 联结不是物理实体——它在实际的数据库表中不存在。联结由MySQL根据需要建立,它存在于查询的执行当中。 2、基础联结: 实例1: 这两个表用WHERE子句正确联结:WHERE子句指示MySQL匹配vendors表中的vend_id和products表中的vend_id。注意:在引用的列可能出现二义性时,必须使用完全限定列名(用一个点分隔的表名和列名)。 笛卡儿积:由没有联结条件的表关系返回的结果。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。有时也被称为叉联结。 实例2:显示编号为20005的订单中的物品 应该保证所有联结都有WHERE子句,否则MySQL将返回比想要的数据多得多的数据。 等值联结:基于两个表之间的相等测试,也被称为内部联结。(最经常使用的联结方式) 实例: ANSI SQL规范首选INNER JOIN语法。此外,尽管使用WHERE子句定义联结的确比较简单,但是使用明确的联结语法能够确保不会忘记联结条件,有时候这样做也能影响性能。 3、高级联结: 实例1:给表起别名(同给列起别名用法一样) 注意:表别名只在查询执行中使用。与列别名不一样,表别名不返回到客户机。 使用表别名的主要原因之一是能在单条SELECT语句中不 止一次引用相同的表 上述解决方法为自联结,自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。该实例也可用子查询来解决。虽然最终的结果是相同的,但有时候处理联结远比处理子查询快得多。在解决问题时,可以试一下两种方法,以确定哪一种的性能更好。 自然联结:排除多次出现,使每个列只返回一次。一般我们用到的内部联结都是自然联结 。 实例3:自然联结 自然联结一般是通过对表使用通配符(SELECT *),对所有其他表的列使用明确的子集来完成的。 外部联结:联结包含了那些在相关表中没有关联行的行。 实例4:检索所有客户,包括那些没有订单的客户 用法与内部联结相似,使用了关键字OUTER JOIN来指定联结的类型。但是,与内部联结关联两个表中的行不同的是,外部联结还包括没有关联行的行。 存在两种基本的外部联结形式:左外部联结和右外部联结。在使用OUTER JOIN语法时,必须使用RIGHT或LEFT关键字指定包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT 指出的是OUTER JOIN左边的表)。上面的例子使用LEFT OUTER JOIN从FROM 子句的左边表(customers表)中选择所有行。 实例5:检索所有客户及每个客户所下的订单数(包括没有下任何订单的客户 聚集函数可以方便地与各种联结类型一起使用 使用联结和联结条件:
三、组合查询 组合查询:执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)或复合查询。 为何需要组合查询?
1、创建组合查询 关键字:UNION操作符 实例1:得到价格小于等于5的所有物品的一个列表,并且包括供应商1001和1002生产的所有物品(不考虑价格)。 UNION指示MySQL执行两条SELECT语句,并把输出组合成单个查询结果集。该解法与where prod_price<=5 OR vend_id in(1001,1002);等效
在一些简单的例子中,使用UNION可能比使用WHERE子句更为复杂。 但对于更复杂的过滤条件,或者从多个表(而不是单个表)中检索数据的情形,使用UNION可能会使处理更简单。 注意:UNION几乎总是完成与多个WHERE条件相同的工作。UNION ALL为UNION的一种形式,它完成WHERE子句完成不了的工作。如果确实需要每个条件的匹配行全部出现(包括重复行),则必须使用UNION ALL而不是WHERE 实例2:对组合查询结果排序 在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条ORDER BY子句。该ORDER BY子句对所有SELECT语句返回的所有结果进行排序。 以上所述是小编给大家介绍的MySQL子查询(嵌套查询)、联结表、组合查询详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对极客世界网站的支持! |
请发表评论