亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Mysql必知必會(huì)(5):計(jì)算字段的使用

高璐 / 3078人閱讀

摘要:計(jì)算字段是在檢索過程中建立的虛擬字段,他們并不實(shí)際存在于數(shù)據(jù)庫中。計(jì)算字段和程序處理之間關(guān)系數(shù)據(jù)庫這種臨時(shí)處理數(shù)據(jù),格式化輸出的結(jié)果,都可以使用編程語言來實(shí)現(xiàn)。之間多個(gè)值使用逗號分割。過濾字段上面使用來組合字段。

本文主要介紹Mysql中計(jì)算字段的使用方法

我博客文章地址:http://weiya.me/item/60.html

簡介

在創(chuàng)建數(shù)據(jù)庫表的時(shí)候,往往為了數(shù)據(jù)庫的各種性能,我們需要將字段拆分或者按照特定的類型存儲(chǔ)。而在讀取數(shù)據(jù)庫的時(shí)候,檢索出來的數(shù)據(jù)往往不是我們直接需要使用的數(shù)據(jù)。舉幾個(gè)例子:

我們在存儲(chǔ)省市區(qū)和街道信息時(shí)候會(huì)將他們多帶帶分別存儲(chǔ)在不同的列,而我們讀取時(shí)候需要完整地址信息

訂單表中,我們存儲(chǔ)單價(jià)和購買數(shù)量。但是,讀取信息往往需要用戶所有付款金額

我們存儲(chǔ)進(jìn)數(shù)據(jù)庫的所有單詞都是大小寫混合,而檢索出來需要全部小寫

這種情況下,就需要使用數(shù)據(jù)庫的計(jì)算字段功能了。簡單來說,就是在檢索數(shù)據(jù)的時(shí)候?qū)?shù)據(jù)進(jìn)行一定的操作。比如,格式化數(shù)據(jù)、拼接數(shù)據(jù)等操作。

計(jì)算字段是在SELECT檢索過程中建立的虛擬字段,他們并不實(shí)際存在于數(shù)據(jù)庫中。

字段

通常開發(fā)中,我們將數(shù)據(jù)庫檢索出來的列稱為字段,他們在大部分情況下是一個(gè)意思。但是在使用計(jì)算字段時(shí)候,字段包含了虛擬出來的字段和數(shù)據(jù)庫實(shí)際查詢到的列。

計(jì)算字段和程序處理之間關(guān)系

數(shù)據(jù)庫這種臨時(shí)處理數(shù)據(jù),格式化輸出的結(jié)果,都可以使用編程語言來實(shí)現(xiàn)。但是,如果可以,請盡量使用Mysql來操作,畢竟,數(shù)據(jù)庫的設(shè)計(jì)天生就是為了這些功能。簡而言之,就是數(shù)據(jù)庫處理比程序語言處理快,效率高。

演示操作 Concat拼接字段

下面先說說最常用的字段拼接。我們準(zhǔn)備了一張用戶姓名表

可以看到其中的用戶姓氏和名是分開存儲(chǔ)的,現(xiàn)在我們進(jìn)行常規(guī)檢索

SELECT * FROM user_name;

得到的結(jié)果也是用戶的姓氏和名是分開的。

但是現(xiàn)在我們需要輸出完整用戶名字。這個(gè)時(shí)候,我們可以使用計(jì)算字段函數(shù)concat來使得這兩個(gè)字段拼接起來,完整顯示。

SELECT CONCAT(first_name,last_name) FROM user_name;

結(jié)果如我們所愿。concat之間多個(gè)值使用逗號分割。同理,我們還可以在concat函數(shù)中加入其他內(nèi)容,比如短線。

SELECT CONCAT(first_name,"-",last_name) FROM user_name;

這樣就可以隨心所欲的組合我們需要顯示的數(shù)據(jù)

提醒:Mysql不同于其他數(shù)據(jù)庫使用+號或者||來實(shí)現(xiàn)字段的拼接,Mysql使用函數(shù)concat來進(jìn)行字段拼接。如果從別的數(shù)據(jù)庫轉(zhuǎn)換到Mysql時(shí)候需要格外的注意。

trim過濾字段

上面使用concat來組合字段。假設(shè),用戶姓氏和名字段中有個(gè)字段前后包含了空格,而我并不想要該空格,應(yīng)該如何解決?

辦法很簡單,在之前我們文章中曾經(jīng)提到過使用Rtrim來去除字段右側(cè)的空格。這里也同理可以使用

SELECT CONCAT(RTRIM(first_name),"-",last_name) FROM user_name;

這樣,姓氏的右側(cè)如果有空格,則會(huì)被過濾掉。同理,使用LTRIM可以過濾左側(cè)的空格,如果使用TRIM則可以過濾兩端的空格,更加省事。

使用別名

別名,如果用在人身上那么就相當(dāng)于人的小名。比如我們國家領(lǐng)導(dǎo)人也有人叫他習(xí)大大。數(shù)據(jù)庫中也是一樣可以給查詢的字段建立一個(gè)小名。

別名大概有兩種用途,第一個(gè)是給沒有名字的字段新建一個(gè)名字,或者給已經(jīng)有名字的字段重新取一個(gè)名字。

新建名稱

看下上面的一個(gè)例子結(jié)果:

這個(gè)是剛剛使用concat查詢數(shù)據(jù)庫得到的結(jié)果。我們仔細(xì)看下他最上面的一行名字:CONCAT(RTRIM(first_name),"-",last_name)?;蛘哒f這根本就不是一個(gè)名字,只是Mysql將那個(gè)表達(dá)式用到這里標(biāo)識了一下。

在Mysql中直接看沒什么大問題,但是如果到了程序語言中,根本無法引用該字段的內(nèi)容。所以我們得給這個(gè)字段重新取一個(gè)名字。

Mysql中取別名需要一個(gè)關(guān)鍵字AS

SELECT CONCAT(RTRIM(first_name),"-",last_name) AS `nickname` FROM user_name;

現(xiàn)在再來看,名字是不是變得非常簡潔了。該字段的名字nickname就是我們剛剛給取的位于AS后面的名字。

當(dāng)然如果你寫的特別熟練了之后,你也可以省略該AS關(guān)鍵字,直接這么寫。

SELECT CONCAT(RTRIM(first_name),"-",last_name) `nickname` FROM user_name;

結(jié)果也是一樣。

取一個(gè)別名

上面我們說的是給一個(gè)沒有名字的字段取一個(gè)名字,當(dāng)然Mysql還可以給已經(jīng)有名字的字段重新取一個(gè)名字。當(dāng)然這個(gè)也不是吃飽了撐的。

當(dāng)數(shù)據(jù)庫字段名字特別長時(shí)候,可以取一個(gè)簡短的名字來縮短語句長度和書寫復(fù)雜度

后面章節(jié)會(huì)講到,當(dāng)關(guān)聯(lián)多個(gè)表查詢的時(shí)候,如果遇到兩張表具有相同字段時(shí)候,我們需要給每個(gè)字段前面加上一個(gè)數(shù)據(jù)庫別名來區(qū)分字段

當(dāng)數(shù)據(jù)庫原本列名中包含不符合規(guī)范的字符,比如空格。檢索數(shù)據(jù)時(shí)候,就需要重新命名

或者當(dāng)原本數(shù)據(jù)庫名不足以表達(dá)當(dāng)前字段含義時(shí)候,就需要重新取名以防混淆

別名有時(shí)候也被成為導(dǎo)出列,意思是一樣的

我們舉個(gè)例子:

假設(shè)一個(gè)數(shù)據(jù)庫名叫yy_user_base_info。假設(shè)我們需要查詢表中用戶名稱和年齡:

SELECT yy_user_base_info.`name`,yy_user_base_info.`age` FROM `yy_user_base_info`;

這樣寫起來很是繁瑣,所以我們可以給數(shù)據(jù)庫取個(gè)別名,用來簡化查詢語句。

SELECT u.`name`,u.`age` FROM `yy_user_base_info` AS u;

這樣是不是就簡化了許多?

算術(shù)運(yùn)算

前面應(yīng)用場景中我們還提到一個(gè)例子。就是訂單表中我們保存了單價(jià)和購買數(shù)量,而我們需要直接輸出訂單總價(jià)。這個(gè)時(shí)候就需要我們的算術(shù)計(jì)算功能上線了。

我們先準(zhǔn)備一個(gè)數(shù)據(jù)表:

SELECT pro_id,quantity,item_price,quantity*item_price AS total_amount FROM orders;

可以看到,原本只有3列的數(shù)據(jù)庫,如今變?yōu)榱?列,其中最后一個(gè)字段total_amount只是一個(gè)虛擬的字段,是我們使用item_pricequantity相乘得來的。這樣我們就得到了所有我們需要的字段。

在編程語言中,你使用total_amount就和其他幾個(gè)實(shí)際存在的字段一樣引用。

Mysql中不僅僅可以使用乘號,還可以使用其他運(yùn)算符,包含加減乘除所有運(yùn)算符。

Mysql顯示計(jì)算結(jié)果

Mysql其實(shí)和編程語言一樣,也是可以做計(jì)算,直接處理函數(shù),并且輸出。

比如:

SELECT 3*2;

直接返回了計(jì)算結(jié)果6

再比如:

SELECT NOW();

直接返回了當(dāng)前時(shí)間。

所以在Mysql中,如果直接使用SELECT后面跟上需要計(jì)算的內(nèi)容,則可以直接返回的值。

星空幻穎,嚴(yán)穎

個(gè)人主頁:segmentfault

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/22332.html

相關(guān)文章

  • MySQL必知必會(huì)(6):常用文本字符串處理函數(shù)

    摘要:編程語言中經(jīng)常使用函數(shù)來處理一些字符串,數(shù)字或者其他內(nèi)容。所以如果需要移植要慎重使用函數(shù)。該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)為字符串,第二個(gè)參數(shù)為字符串長度。還有另外兩個(gè)相似函數(shù)去除字符串左側(cè)空格去除字符串右側(cè)空格字符串截取函數(shù)。 編程語言中經(jīng)常使用函數(shù)來處理一些字符串,數(shù)字或者其他內(nèi)容。MySQL也是一樣,可以使用函數(shù)來快速達(dá)到一系列的目的。 在上一篇文章《計(jì)算字段的使用》中,我們提前使用...

    xuxueli 評論0 收藏0

發(fā)表評論

0條評論

高璐

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<