zoukankan      html  css  js  c++  java
  • SQL 入门教程:拼接字段

    目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程

    为了说明如何使用 计算字段,我们来举一个简单例子,创建由两列组成的标题。

    Vendors 表包含供应商名和地址信息。假如要生成一个供应商报表,需要在格式化的名称(位置)中列出供应商的位置。

    此报表需要一个值,而表中数据存储在两个列 vend_namevend_country 中。此外,需要用括号将 vend_country 括起来,这些东西都没有存储在数据库表中。这个返回供应商名称和地址的 SELECT 语句 很简单,但我们是如何创建这个组合值的呢?

    拼接(concatenate)

    将值联结到一起(将一个值附加到另一个值)构成单个值。

    解决办法是把两个列拼接起来。在 SQL 中的 SELECT 语句中,可使用一个特殊的操作符来拼接两个列。根据你所使用的 DBMS,此操作符可用加号(+)或两个竖杠(||)表示。在 MySQL 和 MariaDB 中,必须使用特殊的函数。

    说明:是 + 还是 ||

    SQL Server 使用 + 号。DB2、Oracle、PostgreSQL 和 SQLite 使用 ||。详细请参阅具体的 DBMS 文档。

    下面是使用加号的例子(多数 DBMS 使用这种语法):

    输入▼

    SELECT vend_name + '(' + vend_country + ')'
    FROM Vendors
    ORDER BY vend_name;
    

    输出▼

    -----------------------------------------------------------
    Bear Emporium                                (USA        )
    Bears R Us                                   (USA        )
    Doll House Inc.                              (USA        )
    Fun and Games                                (England    )
    Furball Inc.                                 (USA        )
    Jouets et ours                               (France     )
    

    下面是相同的语句,但使用的是 || 语法:

    输入▼

    SELECT vend_name || '(' || vend_country || ')'
    FROM Vendors
    ORDER BY vend_name;
    

    输出▼

    -----------------------------------------------------------
    Bear Emporium                                (USA        )
    Bears R Us                                   (USA        )
    Doll House Inc.                              (USA        )
    Fun and Games                                (England    )
    Furball Inc.                                 (USA        )
    Jouets et ours                               (France     )
    

    下面是使用 MySQL 或 MariaDB 时需要使用的语句:

    输入▼

    SELECT Concat(vend_name, ' (', vend_country, ')')
    FROM Vendors
    ORDER BY vend_name;
    

    分析▼

    上面两个 SELECT 语句拼接以下元素:

    • 存储在 vend_name 列中的名字;
    • 包含一个空格和一个左圆括号的字符串;
    • 存储在 vend_country 列中的国家;
    • 包含一个右圆括号的字符串。

    从上述输出中可以看到,SELECT 语句返回包含上述四个元素的一个列(计算字段)。

    再看看上述 SELECT 语句返回的输出。结合成一个计算字段的两个列用空格填充。许多数据库(不是所有)保存填充为列宽的文本值,而实际上你要的结果不需要这些空格。为正确返回格式化的数据,必须去掉这些空格。这可以使用 SQL 的 RTRIM() 函数来完成,如下所示:

    输入▼

    SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
    FROM Vendors
    ORDER BY vend_name;
    

    输出▼

    -----------------------------------------------------------
    Bear Emporium (USA)
    Bears R Us (USA)
    Doll House Inc. (USA)
    Fun and Games (England)
    Furball Inc. (USA)
    Jouets et ours (France)
    

    下面是相同的语句,但使用的是 ||

    输入▼

    SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'
    FROM Vendors
    ORDER BY vend_name;
    

    输出▼

    -----------------------------------------------------------
    Bear Emporium (USA)
    Bears R Us (USA)
    Doll House Inc. (USA)
    Fun and Games (England)
    Furball Inc. (USA)
    Jouets et ours (France)
    

    分析▼

    RTRIM() 函数去掉值右边的所有空格。通过使用 RTRIM(),各个列都进行了整理。

    说明:TRIM 函数

    大多数 DBMS 都支持 RTRIM()(正如刚才所见,它去掉字符串右边的空格)、LTRIM()(去掉字符串左边的空格)以及 TRIM()(去掉字符串左右两边的空格)。

    使用别名

    从前面的输出可以看到,SELECT 语句可以很好地拼接地址字段。但是,这个新计算列的名字是什么呢?实际上它没有名字,它只是一个值。如果仅在 SQL 查询工具中查看一下结果,这样没有什么不好。但是,一个未命名的列不能用于客户端应用中,因为客户端没有办法引用它。

    为了解决这个问题,SQL 支持列别名。别名(alias)是一个字段或值的替换名。别名用 AS 关键字赋予。请看下面的 SELECT 语句:

    输入▼

    SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
     AS vend_title
    FROM Vendors
    ORDER BY vend_name;
    

    输出▼

    vend_title
    -----------------------------------------------------------
    Bear Emporium (USA)
    Bears R Us (USA)
    Doll House Inc. (USA)
    Fun and Games (England)
    Furball Inc. (USA)
    Jouets et ours (France)
    

    下面是相同的语句,但使用的是 || 语法:

    输入▼

    SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'
     AS vend_title
    FROM Vendors
    ORDER BY vend_name;
    

    下面是 MySQL 和 MariaDB 中使用的语句:

    输入▼

    SELECT Concat(RTrim(vend_name), ' (',
           RTrim(vend_country), ')') AS vend_title
    FROM Vendors
    ORDER BY vend_name;
    

    分析▼

    SELECT 语句本身与以前使用的相同,只不过这里的计算字段之后跟了文本 AS vend_title。它指示 SQL 创建一个包含指定计算结果的名为 vend_title 的计算字段。从输出可以看到,结果与以前的相同,但现在列名为 vend_title,任何客户端应用都可以按名称引用这个列,就像它是一个实际的表列一样。

    说明:AS 通常可选

    在很多 DBMS 中,AS 关键字是可选的,不过最好使用它,这被视为一条最佳实践。

    提示:别名的其他用途

    别名还有其他用途。常见的用途包括在实际的表列名包含不合法的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它。

    注意:别名

    别名的名字既可以是一个单词,也可以是一个字符串。如果是后者,字符串应该括在引号中。虽然这种做法是合法的,但不建议这么去做。多单词的名字可读性高,不过会给客户端应用带来各种问题。因此,别名最常见的使用是将多个单词的列名重命名为一个单词的名字。

    说明:导出列

    别名有时也称为导出列(derived column),不管怎么叫,它们所代表的是相同的东西。

    请参阅

    (完)

  • 相关阅读:
    jsp mysql 配置线程池
    服务端 模拟 检测 攻击。。乱写
    硕思闪客精灵 7.2 破解版
    unity UnityAwe 插件
    smartfoxserver 2x 解决 Math NAN
    unity 断点下载
    java 监听文件目录修改
    wind7 64 setup appjs
    sfs2x 修改jvm 内存
    unity ngui 解决图层问题
  • 原文地址:https://www.cnblogs.com/vin-c/p/15146454.html
Copyright © 2011-2022 走看看