《SQL必知必会》第 7 课 创建计算字段

目标

7.1 计算字段

7.2 拼接字段

7.3 执行算术计算


这一课介绍什么是计算字段,如何创建计算字段,以及如何从应用程序中使用别名引用它们。

7.1 计算字段

存储在数据库表中的数据一般不是应用程序所需要的格式,下面举几个例子。

1. 需要显示公司名,同时还需要显示公司的地址,但这两个信息存储在不同的表列中。

2. 城市、州和邮政编码存储在不同的列中(应该这样),但邮件标签打印程序需要把它们作为一个有恰当格式的字段检索出来。

3. 列数据是大小写混合的,但报表程序需要把所有数据按大写表示出来。物品订单表存储物品的价格和数量,不存储每个物品的总价格(用价格乘以数量即可)。但为打印发票,需要物品的总价格。

4. 需要根据表数据进行诸如总数、平均数的计算。

在上述每个例子中,存储在表中的数据都不是应用程序所需要的。我们需要直接从数据库中检索出转换、计算或格式化过的数据,而不是检索出数据,然后再在客户端应用程序中重新格式化。

字段(field)

基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为列,而字段这个术语通常在计算字段这种场合下使用。

提示:客户端与服务器的格式

在 SQL 语句内可完成的许多转换和格式化工作都可以直接在客户端应用程序内完成。但一般来说,在数据库服务器上完成这些操作比在客户端中完成要快得多。



7.2 拼接字段 [concat(  ,  ,  ,  )]

拼接(concatenate)

将值联结到一起(将一个值附加到另一个值)构成单个值。

SELECT Concat(vend_name, ' (', vend_country, ')')

FROM Vendors

ORDER BY vend_name;

分析▼

上面两个 SELECT 语句拼接以下元素:

1.存储在 vend_name 列中的名字;

2.包含一个空格和一个左圆括号的字符串;

3.存储在 vend_country 列中的国家;

4.包含一个右圆括号的字符串。

输出:


/*RTRIM()函数去掉值右边的所有空格。通过使用 RTRIM(),各个列都进 行了整理。MySQL 貌似用不到。

 SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')' 

FROM Vendors 

ORDER BY vend_name;*/

说明:TRIM 函数 

 大多数 DBMS 都支持 RTRIM()(正如刚才所见,它去掉字符串右边的 空格)、LTRIM()(去掉字符串左边的空格)以及 TRIM()(去掉字符 串左右两边的空格)。


使用别名(AS)

SQL 支持列别名。别名(alias)是一个字段或值的替换名。别名用 AS 关键字赋予。

SELECT Concat(vend_name, ' (', vend_country, ')') 

               AS vend_title

 FROM Vendors 

ORDER BY vend_name;

分析▼

SELECT 语句本身与以前使用的相同,只不过这里的计算字段之后跟了文本 AS vend_title。它指示 SQL 创建一个包含指定计算结果的名为vend_title 的计算字段。从输出可以看到,结果与以前的相同,但现在列名为 vend_title,任何客户端应用都可以按名称引用这个列,就像它是一个实际的表列一样。

输出:

7.3 执行算术计算

计算字段的另一常见用途是对检索出的数据进行算术计算。

SELECT prod_id,quantity,item_price,

              quantity*item_price AS expanded_price

FROM OrderItems

WHERE order_num = 20008;

分析▼

输出中显示的 expanded_price 列是一个计算字段,此计算为 quantity*item_price。客户端应用现在可以使用这个新计算列,就像使用其他列一样。

输出:

7.4 小结

本节课学习了字段的计算,分拼接(Concat关键词)和算术计算(+-*/)两种,以及别名AS。

-- ----------第7课 创建计算字段----------------------

-- ---------------------------------

-- 7.1 计算字段

-- 7.2 拼接字段

SELECT Concat(vend_name, ' (', vend_country, ')')

FROM Vendors

ORDER BY vend_name;

/*RTRIM()函数去掉值右边的所有空格。通过使用 RTRIM(),各个列都进

行了整理。MySQL 貌似用不到。

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'

FROM Vendors

ORDER BY vend_name;*/

SELECT Concat(vend_name, ' (', vend_country, ')')

              AS vend_title

FROM Vendors

ORDER BY vend_name;

-- 7.3 执行算术计算

SELECT prod_id, quantity, item_price

FROM OrderItems

WHERE order_num = 20008;

SELECT prod_id,quantity,item_price,

  quantity*item_price AS expanded_price

FROM OrderItems

WHERE order_num = 20008;

7.5 挑战题

1. 别名的常见用法是在检索出的结果中重命名表的列字段(为了符合特定的报表要求或客户需求)。编写 SQL 语句,从 Vendors 表中检索vend_id、vend_name、vend_address 和 vend_city,将 vend_name重命名为 vname,将 vend_city 重命名为 vcity,将 vend_address重命名为 vaddress。按供应商名称对结果进行排序(可以使用原始名称或新的名称)。

SELECT vend_id,

              vend_name AS vname,

              vend_address AS vaddress,

              vend_city AS vcity

FROM vendors

ORDER BY vname;

2. 我们的示例商店正在进行打折促销,所有产品均降价 10%。编写 SQL语句,从 Products 表中返回 prod_id、prod_price 和 sale_price。sale_price 是一个包含促销价格的计算字段。提示:可以乘以 0.9,得到原价的 90%(即 10%的折扣)

SELECT prod_id,prod_price,

               prod_price*0.9 AS sale_price

FROM products;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,717评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,501评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,311评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,417评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,500评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,538评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,557评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,310评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,759评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,065评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,233评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,909评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,548评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,172评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,420评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,103评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,098评论 2 352

推荐阅读更多精彩内容