MySQL:数据检索

761 阅读3分钟

前言

检索数据,是我们日常在使用MySQL数据库时最常使用的。

这篇文章的内容,是之前对这部分学习的一些总结。

内容

基础检索

SELECT 语法用于从一个或多个表中检索指定的行。

FROM子句用于指定SELECT所要检索的表。

使用上两者,我们就得到了检索语句的基础骨架。

    # column_name: 结果集包含的列名
    # table_name: 所检索的表名称

    SELECT [column_name] FROM [table_name];

上面的例子是我们数据检索的一个常用的语句骨架,它是针对某个表的单个列的检索。

除此之外,还支持对多列和全部列的检索。

  • 多列:使用逗号将每个列名分隔;

  • 全部列:使用通配符星号 ( * )指代表中的全部列;

    # 检索表的多个列
    SELECT [column_name_1], [column_name_2] FROM [table_name];

    # 检索表的全部列
    SELECT * FROM [table_name];

应该只检索所需要的列,不要贪图方便直接使用通配符星号( * ),对语句的性能提升有一定的好处。

使用别名

AS关键词能够给检索出来的结果集的列定义别名,这个别名会替换结果集的列名。

    # column_alias: 列别名

    # 给列定义别名
    SELECT [column_name] AS [column_alias] FROM [table_name];

除了定义列的别名,还能定义表的别名。

    # table_alias: 表别名

    #给表定义别名
    SELECT [table_alias].[column_name] FROM [table_name] AS [table_alias];

别名的合理使用能够让我们所书写的语句更加的直观化和语义化。

限定

MySQL作为DBMS可能在一台主机上承载着多个数据库,多个数据库之间可能存在相同的表名的表,另外,同一个数据库的表之间也可能存在相同的列名的列。而对列名和表名做限定,即使为了处理这种二义性。

限定分为表名限定和列名限定。限定的基本格式,是在表名前添加数据库名加英文句号[database_name].或者在列名前添加表名加英文句号[table_name].

    # 限定表名
    SELECT * FROM [database_name].[table_name];
    
    # 限定列名
    SELECT [table_name].[column_name] FROM [table_name];
    
    # 限定表名、限定列名
    SELECT [table_name_1].[column_name_1], [table_name_2].[column_name_2]
    FROM [database_name_1].[table_name_1], [database_name_2].[table_name_2];

限定在做不同数据库的表格之间的连接操作的时候会很有用。

计算字段

在大多数情况下,我们都会接触静态字段的检索,也就是从表格中检索出来就直接使用。

但在部分情况下,我们可能需要对表格的部分列进行计算得到一个新的字段并做作为结果集的列返回,这时候就要使用计算字段。

创建计算字段,有几种方式:

  • 对列使用函数进行计算;

  • 对列进行算数计算;

    # 使用函数,以串拼接函数LOCATE函数为例子
    SELECT CONCAT([column_name_1, column_name_2, colum_name_3]) AS [computed_column_alias]
    FROM [table_name];
    
    # 算数运算
    SELECT [column_name_1] + [column_name_2] AS [computed_column_alias] FROM [table_name];

所创建计算字段的默认字段名称是表达式字符串(上面的例子为'CONCAT([column_name_1, column_name_2, colum_name_3])'和'[column_name_1] + [column_name_2]'),使用AS关键字给所创建计算字段定义别名,使返回的结果集的列名更加简介清晰。

MySQL支持+-*/%等常见的算数运算符的使用。

去重

DISTINCT关键字用于行去重,得到每个都不同的行。例如:计算产品表省份列的列表,这个列表需要去除重复(可能多个产品一个省份)。

    SELECT DISTINCT [column_name] FROM [table_name];

其实,ALL是这个功能位的默认关键词,不使用DISTINCT关键词的时候,ALL会默认添加上。

    # ALL为默认
    SELECT ALL [column_name] FROM [table_name];
    
    # 等同于
    SELECT [column_name] FROM [table_name];

资料参考