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

时间:2023-03-08 22:55:27
读书笔记--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]>