跳转至

查询入门

查询语句

select 语句由几个组建或者说子句构成。不过在 mysql 中,只有一种句子是必不可少的(select 子句),通常的查询语句会至少包含 6 个子句中的 2 ~ 3 个。 |子句名称 | 使用目的 | |---|---| |select | 确定结果集中应该包含那些列| |from|指明索要提取数据的表,以及这些表是如何连接的| |where|过滤不需要的数据| |group by | 用于对具有相同列值的行进行分组| |having| 过滤掉不需要的组| | order by | 按一个或多个列,对最后结果集中的行进行排序|

from 子句

from 子句定义了查询中所使用的表,以及连接这些表的方式。 表的宽泛定义下存在 3 中类型的表: - 永久表(使用 create table 语句创建的表) - 临时表(子查询所返回的表) - 虚拟表(使用 create view 子句所创建的视图)

子查询产生的表

子查询指的是包含在另一个查询中的查询。子查询可以出现在 select 语句中的各个部分并且被包含在圆括号中。

视图

视图是存储在数据字典中的查询,它的行为表现得像一个表,但实际上并不拥有任何数据。当发出一个对视图的查询时,该查询会被绑定到视图定义上,以产生最终被执行的查询。

表连接

对 from 子句定义的第 2 中偏差是:如果 from 子句中出现了多个表,那么要求同时包含各表之间的连接条件。

定义表别名

当在单个查询中连接多个表时,需要在 select, where, group by, having 以及 order by 子句中指明所引用的是哪个表。有两种在 from 子句之外引用表的方式: - 使用完整的表名称 - 为每个表指定别名,并在查询中需要的地方使用该别名。

where 子句

where 子句用于在结果集中过滤掉不需要的行。 在混合使用不同的操作符时,开发者应当总是使用圆括号来分隔成组的条件,这样确保开发者,数据库服务器以及在以后可能会修改代码的开发者都能够对其意义保持一致的理解。

group by 和 having 子句

有时候也会需要数据库服务器在返回结果集之前对数据进行一下提炼,其中一种方式是使用 group by 子句,它用于根据列值对数据进行分组。在使用 group by 子句时,可能还需要同时使用 having 子句,它能够以与 where 子句类似的方式对分组数据进行过滤。

order by 子句

order by 子句用于对结果集中的原始列数据或者是根据列数据计算的表达式结果进行排序。

升序或降序排序

在排序时,可以通过关键字 asc 和 desc 指定是升序还是降序。 默认情况下是升序排序,因此只需要在降序排序上加上 desc 关键字即可。

根据表达式排序

使用列数据对结果集进行排序十分有用,但有时或许还需要根据一些并非存放在数据库中的,甚至可能没有在查询中出现的内容进行排序,而在 order by 子句后增加表达式可以满足这种需求。

根据数字占位符排序

如果需要根据 select 子句中的列来排序,那么可以选择使用该列位于 select 子句中的位置号来替代列名。