读书笔记--SQL必知必会07--创建计算字段

7.1 计算字段

字段(field),基本与列(column)含义相同。
利用计算字段可以直接从数据库中检索出转换、计算或格式化过的数据。
计算字段不实际存在于数据库表中,是运行时在SELECT语句内创建的。
需要特别注意:从客户端来看,计算字段的数据与实际表列的返回方式相同。只有DBMS能够区分SELECT语句中的实际表列和计算字段。

7.2 拼接字段

拼接(concatenate),将值联结到一起(将一个值附加到另一个值)构成单个值。
在一些DBMS的SELECT语句中,可使用加号“+”或两个竖杠“||”来拼接两个列。
但在MySQL和MariaDB中,必须使用特殊的函数。

新计算列实际上没有名字,只是一个值,可利用AS关键字赋予别名来引用它。
别名(alias),有时也叫导出列(derived column),是一个字段或值的替换名。
建议使用一个含义清楚的单词,或者将多个单词的列名重命名为一个词汇当作别名

MariaDB [sqlbzbh]> SELECT * FROM Vendors;
+---------+-----------------+-----------------+------------+------------+----------+--------------+
| vend_id | vend_name       | vend_address    | vend_city  | vend_state | vend_zip | vend_country |
+---------+-----------------+-----------------+------------+------------+----------+--------------+
| BRE02   | Bear Emporium   | 500 Park Street | Anytown    | OH         | 44333    | USA          |
| BRS01   | Bears R Us      | 123 Main Street | Bear Town  | MI         | 44444    | USA          |
| DLL01   | Doll House Inc. | 555 High Street | Dollsville | CA         | 99999    | USA          |
| FNG01   | Fun and Games   | 42 Galaxy Road  | London     | NULL       | N16 6PS  | England      |
| FRB01   | Furball Inc.    | 1000 5th Avenue | New York   | NY         | 11111    | USA          |
| JTS01   | Jouets et ours  | 1 Rue Amusement | Paris      | NULL       | 45678    | France       |
+---------+-----------------+-----------------+------------+------------+----------+--------------+
6 rows in set (0.00 sec)

MariaDB [sqlbzbh]> 
MariaDB [sqlbzbh]> 
MariaDB [sqlbzbh]> SELECT Concat(vend_name, '---', vend_country) FROM Vendors;
+----------------------------------------+
| Concat(vend_name, '---', vend_country) |
+----------------------------------------+
| Bear Emporium---USA                    |
| Bears R Us---USA                       |
| Doll House Inc.---USA                  |
| Fun and Games---England                |
| Furball Inc.---USA                     |
| Jouets et ours---France                |
+----------------------------------------+
6 rows in set (0.00 sec)

MariaDB [sqlbzbh]> 
MariaDB [sqlbzbh]> SELECT Concat(vend_name, '---', vend_country) AS vend_title FROM Vendors;
+-------------------------+
| vend_title              |
+-------------------------+
| Bear Emporium---USA     |
| Bears R Us---USA        |
| Doll House Inc.---USA   |
| Fun and Games---England |
| Furball Inc.---USA      |
| Jouets et ours---France |
+-------------------------+
6 rows in set (0.00 sec)

MariaDB [sqlbzbh]> 

7.3 执行算术计算

可以利用计算字段对检索出的数据进行算术计算。
SQL支持基本算术操作符:+ - * /
圆括号可用来区分优先顺序。

MariaDB [sqlbzbh]> SELECT prod_id, quantity, item_price  FROM OrderItems WHERE order_num = 20008;
+---------+----------+------------+
| prod_id | quantity | item_price |
+---------+----------+------------+
| RGAN01  |        5 |       4.99 |
| BR03    |        5 |      11.99 |
| BNBG01  |       10 |       3.49 |
| BNBG02  |       10 |       3.49 |
| BNBG03  |       10 |       3.49 |
+---------+----------+------------+
5 rows in set (0.00 sec)

MariaDB [sqlbzbh]> SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM OrderItems WHERE order_num = 20008;
+---------+----------+------------+----------------+
| prod_id | quantity | item_price | expanded_price |
+---------+----------+------------+----------------+
| RGAN01  |        5 |       4.99 |          24.95 |
| BR03    |        5 |      11.99 |          59.95 |
| BNBG01  |       10 |       3.49 |          34.90 |
| BNBG02  |       10 |       3.49 |          34.90 |
| BNBG03  |       10 |       3.49 |          34.90 |
+---------+----------+------------+----------------+
5 rows in set (0.00 sec)

MariaDB [sqlbzbh]> 

没有FROM子句的SELECT语句,可以简单地访问和处理表达式。

MariaDB [sqlbzbh]> SELECT 3*2;
+-----+
| 3*2 |
+-----+
|   6 |
+-----+
1 row in set (0.00 sec)

MariaDB [sqlbzbh]> 
MariaDB [sqlbzbh]> SELECT Now();
+---------------------+
| Now()               |
+---------------------+
| 2016-12-22 23:14:40 |
+---------------------+
1 row in set (0.00 sec)

MariaDB [sqlbzbh]> 
posted @ 2016-12-22 23:20  Anliven  阅读(443)  评论(0编辑  收藏  举报