《SQL必知必會(huì)》第 7 課 創(chuàng)建計(jì)算字段

目標(biāo)

7.1 計(jì)算字段

7.2 拼接字段

7.3 執(zhí)行算術(shù)計(jì)算


這一課介紹什么是計(jì)算字段,如何創(chuàng)建計(jì)算字段科侈,以及如何從應(yīng)用程序中使用別名引用它們霉赡。

7.1 計(jì)算字段

存儲(chǔ)在數(shù)據(jù)庫表中的數(shù)據(jù)一般不是應(yīng)用程序所需要的格式,下面舉幾個(gè)例子颤陶。

1. 需要顯示公司名颗管,同時(shí)還需要顯示公司的地址,但這兩個(gè)信息存儲(chǔ)在不同的表列中指郁。

2. 城市忙上、州和郵政編碼存儲(chǔ)在不同的列中(應(yīng)該這樣),但郵件標(biāo)簽打印程序需要把它們作為一個(gè)有恰當(dāng)格式的字段檢索出來闲坎。

3. 列數(shù)據(jù)是大小寫混合的疫粥,但報(bào)表程序需要把所有數(shù)據(jù)按大寫表示出來。物品訂單表存儲(chǔ)物品的價(jià)格和數(shù)量腰懂,不存儲(chǔ)每個(gè)物品的總價(jià)格(用價(jià)格乘以數(shù)量即可)梗逮。但為打印發(fā)票,需要物品的總價(jià)格绣溜。

4. 需要根據(jù)表數(shù)據(jù)進(jìn)行諸如總數(shù)慷彤、平均數(shù)的計(jì)算。

在上述每個(gè)例子中,存儲(chǔ)在表中的數(shù)據(jù)都不是應(yīng)用程序所需要的底哗。我們需要直接從數(shù)據(jù)庫中檢索出轉(zhuǎn)換岁诉、計(jì)算或格式化過的數(shù)據(jù),而不是檢索出數(shù)據(jù)跋选,然后再在客戶端應(yīng)用程序中重新格式化涕癣。

字段(field)

基本上與列(column)的意思相同,經(jīng)城氨辏互換使用坠韩,不過數(shù)據(jù)庫列一般稱為列,而字段這個(gè)術(shù)語通常在計(jì)算字段這種場(chǎng)合下使用炼列。

提示:客戶端與服務(wù)器的格式

在 SQL 語句內(nèi)可完成的許多轉(zhuǎn)換和格式化工作都可以直接在客戶端應(yīng)用程序內(nèi)完成只搁。但一般來說,在數(shù)據(jù)庫服務(wù)器上完成這些操作比在客戶端中完成要快得多俭尖。



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

拼接(concatenate)

將值聯(lián)結(jié)到一起(將一個(gè)值附加到另一個(gè)值)構(gòu)成單個(gè)值氢惋。

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

FROM Vendors

ORDER BY vend_name;

分析▼

上面兩個(gè) SELECT 語句拼接以下元素:

1.存儲(chǔ)在 vend_name 列中的名字;

2.包含一個(gè)空格和一個(gè)左圓括號(hào)的字符串目溉;

3.存儲(chǔ)在 vend_country 列中的國(guó)家明肮;

4.包含一個(gè)右圓括號(hào)的字符串。

輸出:


/*RTRIM()函數(shù)去掉值右邊的所有空格缭付。通過使用 RTRIM()柿估,各個(gè)列都進(jìn) 行了整理。MySQL 貌似用不到陷猫。

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

FROM Vendors?

ORDER BY vend_name;*/

說明:TRIM 函數(shù)?

?大多數(shù) DBMS 都支持 RTRIM()(正如剛才所見秫舌,它去掉字符串右邊的 空格)、LTRIM()(去掉字符串左邊的空格)以及 TRIM()(去掉字符 串左右兩邊的空格)绣檬。


使用別名(AS)

SQL 支持列別名足陨。別名(alias)是一個(gè)字段或值的替換名。別名用 AS 關(guān)鍵字賦予娇未。

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

? ? ? ? ? ? ? ?AS vend_title

?FROM Vendors?

ORDER BY vend_name;

分析▼

SELECT 語句本身與以前使用的相同墨缘,只不過這里的計(jì)算字段之后跟了文本 AS vend_title。它指示 SQL 創(chuàng)建一個(gè)包含指定計(jì)算結(jié)果的名為vend_title 的計(jì)算字段零抬。從輸出可以看到镊讼,結(jié)果與以前的相同,但現(xiàn)在列名為 vend_title平夜,任何客戶端應(yīng)用都可以按名稱引用這個(gè)列蝶棋,就像它是一個(gè)實(shí)際的表列一樣。

輸出:

7.3 執(zhí)行算術(shù)計(jì)算

計(jì)算字段的另一常見用途是對(duì)檢索出的數(shù)據(jù)進(jìn)行算術(shù)計(jì)算忽妒。

SELECT prod_id,quantity,item_price,

? ? ? ? ? ? ? quantity*item_price AS expanded_price

FROM OrderItems

WHERE order_num = 20008;

分析▼

輸出中顯示的 expanded_price 列是一個(gè)計(jì)算字段玩裙,此計(jì)算為 quantity*item_price兼贸。客戶端應(yīng)用現(xiàn)在可以使用這個(gè)新計(jì)算列吃溅,就像使用其他列一樣溶诞。

輸出:

7.4 小結(jié)

本節(jié)課學(xué)習(xí)了字段的計(jì)算,分拼接(Concat關(guān)鍵詞)和算術(shù)計(jì)算(+-*/)兩種决侈,以及別名AS很澄。

-- ----------第7課 創(chuàng)建計(jì)算字段----------------------

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

-- 7.1 計(jì)算字段

-- 7.2 拼接字段

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

FROM Vendors

ORDER BY vend_name;

/*RTRIM()函數(shù)去掉值右邊的所有空格。通過使用 RTRIM()颜及,各個(gè)列都進(jìn)

行了整理。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 執(zhí)行算術(shù)計(jì)算

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 挑戰(zhàn)題

1. 別名的常見用法是在檢索出的結(jié)果中重命名表的列字段(為了符合特定的報(bào)表要求或客戶需求)俏站。編寫 SQL 語句,從 Vendors 表中檢索vend_id痊土、vend_name肄扎、vend_address 和 vend_city,將 vend_name重命名為 vname赁酝,將 vend_city 重命名為 vcity犯祠,將 vend_address重命名為 vaddress。按供應(yīng)商名稱對(duì)結(jié)果進(jìn)行排序(可以使用原始名稱或新的名稱)酌呆。

SELECT vend_id,

? ? ? ? ? ? ? vend_name AS vname,

? ? ? ? ? ? ? vend_address AS vaddress,

? ? ? ? ? ? ? vend_city AS vcity

FROM vendors

ORDER BY vname;

2. 我們的示例商店正在進(jìn)行打折促銷衡载,所有產(chǎn)品均降價(jià) 10%。編寫 SQL語句隙袁,從 Products 表中返回 prod_id痰娱、prod_price 和 sale_price。sale_price 是一個(gè)包含促銷價(jià)格的計(jì)算字段菩收。提示:可以乘以 0.9梨睁,得到原價(jià)的 90%(即 10%的折扣)

SELECT prod_id,prod_price,

? ? ? ? ? ? ? ?prod_price*0.9 AS sale_price

FROM products;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市娜饵,隨后出現(xiàn)的幾起案子坡贺,更是在濱河造成了極大的恐慌,老刑警劉巖箱舞,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遍坟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡褐缠,警方通過查閱死者的電腦和手機(jī)政鼠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來队魏,“玉大人公般,你說我怎么就攤上這事万搔。” “怎么了官帘?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵瞬雹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我刽虹,道長(zhǎng)酗捌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任涌哲,我火速辦了婚禮胖缤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阀圾。我一直安慰自己哪廓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布初烘。 她就那樣靜靜地躺著园骆,像睡著了一般抗斤。 火紅的嫁衣襯著肌膚如雪茅特。 梳的紋絲不亂的頭發(fā)上娇斑,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音吗铐,去河邊找鬼东亦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛唬渗,可吹牛的內(nèi)容都是我干的讥此。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼谣妻,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼萄喳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹋半,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤他巨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后减江,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體染突,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年辈灼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了份企。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巡莹,死狀恐怖司志,靈堂內(nèi)的尸體忽然破棺而出甜紫,到底是詐尸還是另有隱情,我是刑警寧澤骂远,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布囚霸,位于F島的核電站,受9級(jí)特大地震影響激才,放射性物質(zhì)發(fā)生泄漏拓型。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一瘸恼、第九天 我趴在偏房一處隱蔽的房頂上張望劣挫。 院中可真熱鬧,春花似錦东帅、人聲如沸揣云。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至刘莹,卻和暖如春阎毅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背点弯。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工扇调, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抢肛。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓狼钮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捡絮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熬芜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容