纲发
一.盘算字段
两.拼接字段2.1 运用小名
三.推行算术盘算
四.小结
本文推荐什么是盘算字段,怎么样建立盘算字段,咋们用按例讲清晰盘算字段在字符串拼接和算术盘算中的用途呀。和怎么样从运用程-序中运用小名援用你们呀。
一.盘算字段
存储在数据库表中的数据一样平常不-是运用程-序所需要的样式,下面举几个按例呀。
需要展现公司名,同时还需要展现公司的位置,但这两个信息存储在区别的表列中呀。
都市.州和邮政编码存储在区别的列中(应当这样),但邮件标签打印程-序需要把你们做为一位有适当样式的字段检索进去呀。
列数据是长短写混淆的,但报表程-序需要把所有数据按大写表现进去呀。
物品定单表存储物品的价和数目,不存储每逐一位物品的总价(用价乘以数目即可)呀。但为打印发,需要物品的总价呀。
需要依照表数据举行诸如总数.平均数的盘算呀。
在上述每逐一位按例中,存储在表中的数据都不-是运用程-序所需要的呀。咋们需要直-接从数据库中检索出转换.盘算或者样式化过的数据,而不-是检索出数据,然后再在客户端运用程-序中重新样式化呀。
这即是盘算字段能够派上用处的场所了呀。盘算字段一开始不现实存在于数据库表中呀。盘算字段是运转时在 SELECT 语句内建立的呀。
字段(field)
普遍与列(column)的意义相似,经常交换运用,可是数据库列一样平常称为列,而字段这个术语平时在盘算字段这类场所下运用呀。
需要希奇注重,仅有数据库知道 SELECT 语句中哪些列是现实的表列,哪些列是盘算字段呀。从客户端(如运用程-序)来看,盘算字段的数据与其余列的数据的返回办法相似呀。
提醒客户端与处事器的样式
在 SQL 语句内可完结的许多转换和样式化工做都能够直-接在客户端运用程-序内完结呀。但一样平常来说,在数据库处事器上完结这些操做比在客户端中完结要快许多呀。
两.拼接字段
为了声明怎么样运用盘算字段,咋们来举一位简易按例,建立由两列组成的题目呀。
Vendors 表-面包罗供应商名和位置信息呀。如果要变成一位供应商报表,需要在样式化的称呼(职位)中列出供应商的职位呀。
此报表需要一位值,而表中数据存储在两个列 vend_name 和 vend_country 中呀。另外,需要用括号将 vend_country 括起身,这些东-西都有无存储在数据库表中呀。
这个返回供应商称呼和位置的 SELECT 语句很简易,但咋们是怎么样建立这个组合值的呢?
拼接(concatenate)
将值结合到一块(将一位值附加到另一位值)组成单个值呀。
处置办法是把两个列车拼接起身呀。在 SQL 中的 SELECT 语句中,可运用一位希奇的操做符来拼接两个列呀。依照你所运用的 DBMS,此操做符可用加号(+)或者两个竖杠(||)表现呀。
在 MySQL 和 MariaDB 中,必须运用希奇的函数呀。
声明是 + 仍然 ||呢?
SQL Server 运用 + 号呀。DB2.Oracle.PostgreSQL 和 SQLite 运用 ||呀。一五一十请参阅详细的 DBMS 文档呀。
下面是运用加号的按例(大大部-分 DBMS 运用这类语法)
SELECT vend_name + '(' + vend_country + ')'FROM VendorsORDER BY vend_name;
输入
-----------------------------------------------------------Bear Emporium (USA )Bears R Us (USA )Doll House Inc. (USA )Fun and Games (England )Furball Inc. (USA )Jouets et ours (France )
下面是相似的语句,可是运用的是 || 语法
SELECT vend_name || '(' || vend_country || ')'FROM VendorsORDER BY vend_name;
输入
-----------------------------------------------------------Bear Emporium (USA )Bears R Us (USA )Doll House Inc. (USA )Fun and Games (England )Furball Inc. (USA )Jouets et ours (France )
下面是运用 MySQL 或者 MariaDB 经常需要运用的语句
SELECT Concat(vend_name, ' (', vend_country, ')')FROM VendorsORDER BY vend_name;
上面两个 SELECT 语句拼接成以下元素
存储在 vend_name 列中的名字阿;
包罗一位空格和一位左圆括号的字符串阿;
存储在 vend_country 列中的国家阿;
包罗一位有圆括号的字符串呀。
从上述输入中能够看到,SELECT 语句返回包罗上述四个元素的一位列(盘算字段)呀。
再看看上述 SELECT 语句返回的输入呀。联形成一位盘算字段的两个列用空格填充呀。太大部-分据库(不-是所有)保留填充为列宽的文本值,而现实上你要的结局不需要这些空格呀。
为准确返回样式化的数据,必须去掉这些空格呀。这能够运用 SQL 的 RTRIM() 函数来完结,以下所示
SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'FROM VendorsORDER BY vend_name;
输入
-----------------------------------------------------------Bear Emporium (USA)Bears R Us (USA)Doll House Inc. (USA)Fun and Games (England)Furball Inc. (USA)Jouets et ours (France)
下面是相似的语句,可是运用的是 ||
SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'FROM VendorsORDER BY vend_name;
输入
-----------------------------------------------------------Bear Emporium (USA)Bears R Us (USA)Doll House Inc. (USA)Fun and Games (England)Furball Inc. (USA)Jouets et ours (France)
RTRIM() 函数去掉值右侧的所得空格呀。通过运用 RTRIM(),各个列都举行了整理呀。
声明TRIM 函数
大大部-分 DBMS 都支持 RTRIM()(正如适才所见,他去掉字符串右侧的空格).LTRIM()(去掉字符串左侧的空格)和 TRIM()(去掉字符串差一点双方的空格)呀。
2.1 运用小名
以前面的输入能够看到,SELECT 语句能够很好地拼接位置字段呀。可是,这个新盘算列的名字是什么呢?现实上他有无名字,他不过一位值呀。
如果仅在 SQL 盘器械中检察一下结局,这样有无什么不佳呀。可是,一位未命名的列不行以用于客户端运用中,由于客户端有无办法援用他呀。
为理处置这个疑,SQL 支持列小名呀。小名(alias)是一位字段或者值的调换名呀。小名用 AS 主要字赋予呀。请看下面的 SELECT 语句
SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')' AS vend_titleFROM VendorsORDER BY vend_name;
输入
vend_title-----------------------------------------------------------Bear Emporium (USA)Bears R Us (USA)Doll House Inc. (USA)Fun and Games (England)Furball Inc. (USA)Jouets et ours (France)
下面是相似的语句,但运用的是 || 语法
SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')' AS vend_titleFROM VendorsORDER BY vend_name;
下面是 MySQL 和 MariaDB 中运用的语句
SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') AS vend_titleFROM VendorsORDER BY vend_name;
SELECT 语句自身与以前运用的相似,只可是这里的盘算字段以后跟了文本 AS vend_title呀。
他指点 SQL 建立一位包罗指定盘算结局的名为 vend_title 的盘算字段呀。
从输入能够看到,结局与以前的相似,但现在列名为 vend_title,任何客户端运用都能够按称呼援用这个列,就像他是一位现实的表列一样呀。
声明AS 平时可选
在许多 DBMS 中,AS 主要字是可选的,可是最运气用他,这被视为一条最好实践呀。
提醒小名的其余用途
小名另有其余用途呀。罕见的用途包罗在现实的表列名包罗分歧法的字符(如空格)时重新命名他,在一开始的名字迷糊或者简易误解时扩大他呀。
注重小名
小名的名字既可于是一位单词,也可于是一位字符串呀。如果是后者,字符串应当括在引号中呀。只管这类做法是正当的,但不建议这么去做呀。
多单词的名字可读性高,可是会给客户端运用带来种种疑呀。因而,小名常罕见的到的运用是将多个单词的列名重命名为一位单词的名字呀。
声明导入列
小名有一些时刻也称为导入列(derived column),岂论怎样叫,你们所代表的是相似的东-西呀。
三.推行算术盘算
盘算字段的另一罕见用途是对检索出的数据举行算术盘算呀。举个按例,Orders 表包罗收到的所有定单,OrderItems 表包罗每逐一位定单中的各项物品呀。
下面的 SQL 语句检索定单号 20008 中的所有物品
SELECT prod_id, quantity, item_priceFROM OrderItemsWHERE order_num = 20008;
输入
prod_id quantity item_price---------- ----------- ---------------------RGAN01 5 4.9900BR03 5 11.9900BNBG01 10 3.4900BNBG02 10 3.4900BNBG03 10 3.4900
item_price 列包罗定单中每一项物品的单价呀。以下汇总物品的价(单价乘以订购数目)
SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_priceFROM OrderItemsWHERE order_num = 20008;
输入
prod_id quantity item_price expanded_price---------- ----------- ------------ -----------------RGAN01 5 4.9900 24.9500BR03 5 11.9900 59.9500BNBG01 10 3.4900 34.9000BNBG02 10 3.4900 34.9000BNBG03 10 3.4900 34.9000
输入中展现的 expanded_price 列是一位盘算字段,此盘算为 quantity*item_price呀。客户端运用现在能够运用这个新盘算列,就像运用其余列一样呀。
SQL 支持表 1 中列出的基本算术操做符呀。另外,圆括号可用来分辩优先顺着纪律呀。关于优先顺着纪律的推荐,请参阅 怎么样运用 SQL AND.OR.IN 和 NOT 过滤返回的数据呀。
表 1 SQL 算术操做符
操做符
声明
+
加
-
减
*
乘
/
除
提醒怎么样尝试盘算
SELECT 语句为尝试.检查函数和盘算供应了很好的办法呀。
只管 SELECT 平时用于从表中检索数据,可是省掉了 FROM 子句后即是简易地会见和处置讲明式,比如 SELECT 3 * 2; 将返回 6,SELECT Trim(' abc '); 将返回 abc,SELECT Curdate(); 运用 Curdate() 函数返回现在日期和时刻呀。
现在你明确了,能够依照需要运用 SELECT 语句举行检查呀。
发表评论