sql必知必会7-创建计算字段

作者: liluchang 分类: 数据库 发布时间: 2018-04-01 23:08

1,计算字段

计算字段并不实际存在于数据库表中,计算字段是运行时在select语句内创建的。

请注意,大部分情况下,如果不是sql内置而且最效率的那些字段,那么请在应用层面完成计算。(个人理解)在应用层面的计算大部分情况下还是比db层面要更快一些。

2,拼接字段

在sql中我们可以使用+或者||,access和sql server使用+,DB2,Oracle,PostgreSQL,SQLite和Open Office Base使用||,而mysql 和mariadb则使用特殊符号。例如

//access,sql server
select vend_name + '('+ vend_countrat+')' from vendors order by vend_name;
//DB2,Oracle,postgresql,sqlite,open office base
select vend_name || '(' || vend_country || ')' from vendors order by vend_name;
//mysql和mariadb
select Concat( vend_name, '(', vend_country, ')') from vendors order by vend_name;

还是让你们知道了,我最常用的是mysql,所以我的实际写法还是concat,哈哈。

虽然我上面语句是那么操作的,但是我们实际中的话,如果真的有输出在web端的数据,其实直接查询和用输出也一点不会错,而且效率可能会更高,毕竟数据库的效率,我个人还是认为不如应用层面比较快,举个例子,如果上面我们直接查询出来两个字段,不用任何计算,那么在web端输出的话,我们会

echo $vend_name . '(' . $vend_country . ')';

结果完全是一样的,而且我们在应用层面并没有做计算,只是一个正常字符串拼接。又暴露了我使用php!

许多数据库(不是所有)保存填充为列宽的文本值。—但是刚才在使用mysql的时候,我的输出是没有空格的。这个就是mysql比较诡异的地方了。如果有兴趣了解这方面的知识的童鞋可以看看这篇文章https://dev.mysql.com/doc/refman/5.5/en/char.html (英文的哦)

我们可以在sql中去掉我们不需要的空格,用trim()函数,这个函数有三种形式,RTRIM()去掉字符串右边的空格,LTRIM() 去掉字符串左边的空格,TRIM()去掉字符串左右两边的空格。例

select CONCAT( RTRIM(vend_name), '(', vend_country, ')' ) from vendors order by vend_name; 

原谅我上面直接用了mysql的写法,只是它的写法比较特别,如果使用access或者DB2之类的,请参考上面的例子。

3,使用别名,as

上面的例子中,我们直接在console中输出是没有任何问题的。但是这个仅仅是一个值。请参考上面的数据库输出截图,但是应用层面确实无法使用,为了解决这个问题,sql可以支持使用别名。别名(alias)是一个字段或者值的替换名,别名用AS关键词赋予。例如

select CONCAT( vend_name, '(' , vend_country , ')' ) AS vend_title from vendors order by vend_name;

可以看见,数据结果列名作为vend_title输出。认可客户端应用都是用vendi_title引用这个列,就像它实际存在一样。

大多数DBMS中,as是可选的,但是我们建议使用as,这被视为一条最佳实践。它可以替换实际列名让我们更容易理解这个数据是什么。

4,执行算数计算。

简单东西,举例说明

select prod_id,quantity,item_price,quantity*item_price as expanded_price from orderitems where order_num = '20008';

可以看出我们的计算结果作为expanded_price列输出了。

select算数操作符为 + – * / 。

可以试试直接select 3*2;或者select trim(‘   dkfjdlkj   ‘);看看结果。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

标签云