SQL

SQL 知识量:22 - 44 - 129

7.2 创建计算字段><

拼接字段- 7.2.1 -

拼接字段就是在查询中将不同的列数据联结到一起,成为单个字段。

例如:查询学生姓名和年龄,并用一句话来表述。

select concat(name,' is ',age,' years old.') from student;

结果:

+---------------------------------------+
| concat(name,' is ',age,' years old.') |
+---------------------------------------+
| Susan is 11 years old.                |
| Jame is 12 years old.                 |
| Bob is 11 years old.                  |
| Robot is 10 years old.                |
| Jen is 11 years old.                  |
| Toney is 10 years old.                |
| Jack is 13 years old.                 |
| Alice is 10 years old.                |
| Bonnie is 11 years old.               |
| Ella is 12 years old.                 |
+---------------------------------------+

如上所示,当使用MySQL进行这个查询时,使用concat()函数进行拼接。

如果使用Access和SQL Server时,应当使用“+”进行拼接,SQL语句为:

select name+' is '+age+' years old.' from student;

如果使用DB2、Oracle、SQLite等时,应当使用“||”进行拼接,SQL语句为:

select name||' is '||age||' years old.' from student;

如果结果中存在多余的空格,可以使用rtrim()、ltrim()和trim()函数去除这些空格。

使用别名- 7.2.2 -

从上面的拼接字段查询结果可以看到,查询的结果列名是concat(name,' is ',age,' years old.'),也就是SQL语句的查询字段部分,也就是说,查询结果其实没有名字,它只是一个值而已。问题是,一个未命名的列是不能被客户端应用程序引用的,需要给拼接的字段起一个名字。

为了解决这个命名问题,SQL使用as关键字给指定的列设置别名。别名就是一个字段或值的替换名。

例如:查询学生姓名和年龄,并用一句话来表述,将结果列命名为introduce。

select concat(name,' is ',age,' years old.') as introduce from student;

结果:

+-------------------------+
| introduce               |
+-------------------------+
| Susan is 11 years old.  |
| Jame is 12 years old.   |
| Bob is 11 years old.    |
| Robot is 10 years old.  |
| Jen is 11 years old.    |
| Toney is 10 years old.  |
| Jack is 13 years old.   |
| Alice is 10 years old.  |
| Bonnie is 11 years old. |
| Ella is 12 years old.   |
+-------------------------+

这样,客户端应用程序就可以使用introduce来引用这个拼接字段了,就像真的查询了一个叫introduce的表列一样。

注意:

  • 在多数DBMS中,as关键字是可选的,但是最好总是使用它。

  • 别名除了给未命名列命名外,还可以替换任何正常列名,包括替换不合法的字符(如空格)。

  • 别名可以是一个字符串,如果是字符串,记得在命名时使用引号括起来。因为客户端应用程序引用问题,最好不要使用字符串,简单的单词更合适。

  • 别名有时也称为导出列。

执行算术计算- 7.2.3 -

算术计算是计算字段另一种常见的用途。

例如:查询学生姓名和5年之后的年龄。

select name,age+5 as after5years from student;

结果:

+--------+-------------+
| name   | after5years |
+--------+-------------+
| Susan  |          16 |
| Jame   |          17 |
| Bob    |          16 |
| Robot  |          15 |
| Jen    |          16 |
| Toney  |          15 |
| Jack   |          18 |
| Alice  |          15 |
| Bonnie |          16 |
| Ella   |          17 |
+--------+-------------+

以上只是一个简单的加法计算,实际上,SQL支持常见的加、减、乘、除计算,分别使用“+”、“-”、“*”、“/”来表示。

测试计算- 7.2.4 -

select语句通常用于查询数据,如果省略掉from子句后,select语句就可以用于简单的访问和处理表达式了。

例如:计算6*365的结果:

select 6*365;

结果:

+-------+
| 6*365 |
+-------+
|  2190 |
+-------+

例如:查看当前DBMS的时间:

select now();

结果:

+---------------------+
| now()               |
+---------------------+
| 2018-05-22 19:29:57 |
+---------------------+