MYSQL必知必會讀書筆記第十和十一章之使用函數(shù)處理數(shù)據(jù)
mysql簡介
MySQL是一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),MySQL數(shù)據(jù)庫系統(tǒng)使用最常用的數(shù)據(jù)庫管理語言--結(jié)構(gòu)化查詢語言(SQL)進(jìn)行數(shù)據(jù)庫管理。

拼接字段
存儲在數(shù)據(jù)庫表中的數(shù)據(jù)一般不是應(yīng)用程序所需要的格式。我們需要直接從數(shù)據(jù)庫中檢索出轉(zhuǎn)換、計(jì)算或格式化過的數(shù)據(jù);而不是檢索出數(shù)據(jù),然后再在客戶機(jī)應(yīng)用程序或報(bào)告程序中重新格式化。
計(jì)算字段(字段 = 列,不過數(shù)據(jù)庫列一般稱為列,而字段通常用于計(jì)算字段中)并不實(shí)際存在于數(shù)據(jù)庫表中,計(jì)算字段是運(yùn)行時(shí)在select語句內(nèi)創(chuàng)建的。
拼接 concatenate 將值聯(lián)結(jié)到一起構(gòu)成單個(gè)值
在MySQL的select語句中,可使用Concat()函數(shù)來拼接兩個(gè)列。
如創(chuàng)建由兩列組成的標(biāo)題:生成一個(gè)供應(yīng)商報(bào)表,需要在供應(yīng)商的名字中按照name(location)這樣的格式列出供應(yīng)商的位置。此報(bào)表需要單個(gè)值,而表中數(shù)據(jù)存儲的兩個(gè)列vend_name和vend_country中。還需要用括號將vend_country括起來。

新創(chuàng)建的列用AS賦一個(gè)別名

去除空白
Ltrim() RTrim() Trim()
執(zhí)行算術(shù)計(jì)算
比如物品單單表存儲物品的價(jià)格和數(shù)量,但是不需要存儲每個(gè)物品的總價(jià)格(用價(jià)格乘以數(shù)量即可)。 為打印發(fā)票,需要物品的總價(jià)格。即需要增加一列,根據(jù)已有的列計(jì)算出來。

文本函數(shù)
left() 串左邊字符
length() 串長度
locate() 找出串的一個(gè)子串
lower() 轉(zhuǎn)為小寫
ltrim() 去掉左邊空格
right() 返回串右邊字符
rtrim() 去掉串右邊空格
soundex() 返回字符串soundex值
upper() 大寫
將選擇的文本轉(zhuǎn)換成大寫
select Upper(vend_name)from vendors;

Soundex()函數(shù):將任何文本傳轉(zhuǎn)換為描述其語音表示的字母數(shù)字模式的算法。(語音匹配?對發(fā)音比較而不是對字幕比較)

日期函數(shù)
日期和時(shí)間函數(shù)
adddate() 增加一個(gè)日期-天或周
addtime() 增加一個(gè)時(shí)間
curdate() 返回當(dāng)前日期
curtime() 返回當(dāng)前時(shí)間
date() 返回日期時(shí)間的日期部分
datediff() 計(jì)算兩個(gè)日期差
date_add() 高度靈活的日期運(yùn)算函數(shù)
date_format() 返回一個(gè)格式化的日期或時(shí)間串
day() 返回一個(gè)日期的天數(shù)部分
dayofweek() 對于一個(gè)日期,返回對應(yīng)的星期幾
hour()
minute()
month()
now() 當(dāng)前日期和時(shí)間
second()
time() 當(dāng)前日期時(shí)間的時(shí)間部分
year()
一般,應(yīng)用程序不使用用來存儲日期和時(shí)間的格式,因此日期和時(shí)間函數(shù)總是被用來讀取,統(tǒng)計(jì)和處理這些值。
MySQL的日期格式:yyyy-mm-dd。 比如 2005-09-01

但是這樣的where order_date = '2005-09-01'不可靠。因?yàn)閛rder_date存儲的數(shù)據(jù)類型是datatime. 這種類型存儲日期及時(shí)間值。比如存儲的order_date值為2005-09-01 11:30:05,則where order_date = '2005-09-01'就會匹配失敗。

所以最安全的方法是Date()函數(shù),Date(order_date)指示MySQL提取列的日期部分。
select cust_id, order_num from orders where Date(order_date) = '2005-09-01';
再比如想要檢索出2005年9月下的所有訂單。
select cust_id, order_num from orders where Year(order_date) = 2005 and Month(order_date) = 9;
聚集函數(shù)
我們經(jīng)常需要匯總函數(shù),而不是把它們實(shí)際檢索出來。
這種類型的檢索例子:
1. 確定表中行數(shù)
2. 獲得表中行組的和
3. 找出表列(or 所有行某些特定的行)的最大值,最小值和平均值
聚集函數(shù)(aggregate function) 運(yùn)行在行組上,計(jì)算和返回單個(gè)值的函數(shù)。
AVG() 返回某列的平均值
COUNT() 返回某列的行數(shù)
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值的和
求某一列的平均值
select avg(prod_price) as avg_pricefrom products;

- 計(jì)數(shù)
使用count(*)對表中行的數(shù)目進(jìn)行計(jì)數(shù)(whether null or not)


使用count(column)對特定列具有值的行進(jìn)行計(jì)數(shù),忽略null

求和
使用sum()返回指定列值的和

以上所述是小編給大家介紹的MYSQL必知必會讀書筆記第十和十一章之使用函數(shù)處理數(shù)據(jù)的相關(guān)知識,希望對大家有所幫助!
相關(guān)文章
MySQL中的insert set 和 insert values用法
這篇文章主要介紹了MySQL中的insert set 和 insert values用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
MySQL觸發(fā)器學(xué)習(xí)總結(jié)
創(chuàng)建觸發(fā)器,當(dāng)往order表中添加記錄是,更新goods表,大家可以看下語句即可2012-09-09
MySQL之dense_rank()分組排序函數(shù)的使用
Node.js下向MySQL數(shù)據(jù)庫插入批量數(shù)據(jù)的方法

