拼接字段
举一个创建由两列组成的标题的简单例子。vendors表包含供应商名和位置信息。
假如要生成一个供应商报表,需要在供应商的名字中按照name(location)这样的格式列出供应商的位置。
此报表需要单个值,而表中数据存储在两个列vend_name和vend_ country中。此外,需要用括号将vend_country括起来,这些东西都没有明确存储在数据库表中。我们来看看怎样编写返回供应商名和位置的 SELECT语句。
select concat(vend_name,' (',vend_country,')')
from vendors
order by vend_name
Concat()拼接串,即把多个串连接起来形成一个较长的串。 Concat()需要一个或多个指定的串,各个串之间用逗号分隔。 上面的SELECT语句连接以下4个元素: 存储在vend_name列中的名字; 包含一个空格和一个左圆括号的串; 存储在vend_country列中的国家; 包含一个右圆括号的串
Concat()拼接串,即把多个串连接起来形成一个较长的串。Concat()需要一个或多个指定的串,各个串之间用逗号分隔。 上面的SELECT语句连接以下4个元素:
存储在vend_name列中的名字;
包含一个空格和一个左圆括号的串;
存储在vend_country列中的国家;
包含一个右圆括号的串。
从上述输出中可以看到,SELECT语句返回包含上述4个元素的单个列 (计算字段)。 曾提到通过删除数据右侧多余的空格来整理数据,这可以使用MySQL的RTrim()函数来完成
Trim函数 MySQL除了支持RTrim()(正如刚才所见,它去掉 串右边的空格),还支持LTrim()(去掉串左边的空格)以及 Trim()(去掉串左右两边的空格)。
使用别名
从前面的输出中可以看到,SELECT语句拼接地址字段工作得很好。 但此新计算列的名字是什么呢?实际上它没有名字,它只是一个值。如 果仅在SQL查询工具中查看一下结果,这样没有什么不好。但是,一个未 命名的列不能用于客户机应用中,因为客户机没有办法引用它。
为了解决这个问题,SQL支持列别名。别名(alias)是一个字段或值 的替换名。别名用AS关键字赋予。
select concat(RTRIM(vend_name),' (',vend_country,')') as vend_title
from vendors
order by vend_name
从输出中可以看到,结果与以 前的相同,但现在列名为vend_title,任何客户机应用都可以按名引用 这个列,就像它是一个实际的表列一样。
别名的其他用途 别名还有其他用途。常见的用途包括在实际的表列名包含不符合规定的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它,等等。
导出列 别名有时也称为导出列(derived column),不管称为 什么,它们所代表的都是相同的东西。