存儲在數據庫表中的數據一般不是應用程序所需要的格式。
下面舉幾個例子
- 如果想在一個字段中即顯示公司名,有顯示公司的地址,但這個信息一般包含在不同的列中。
- 城市,州和郵寄編碼存儲在不同的列中,但郵寄標簽打印程序卻需要將它們作為一個恰當格式字段表示出來
- 列數據是大小寫混合的,但報表程序需要把所有數據按照大寫表示出來
- 物品訂單表存儲物品的價格和數量,但不需要存儲每個物品的總價格。為打印發票,需要物品的總價格
- 需要根據表數據進行總數,平均計算或其他計算
字段(filed)
定義:“字段”基本上與列(column)的意思相同,經常互換使用,不過數據庫列一般稱為“列”,而術語字段通常用在計算字段連接上
客戶機與服務器的格式 :
可在SQL語句內完成的許多轉換和格式化工作都可以直接在客戶機應用程序內完成。但一般來說,在數據庫服務器上完成這些操作比在客戶機中完成要快得多,因為DBMS是設計來快速有效地完成這種處理的。
CONCAT :拼接(concatenate) 將值聯結到一起構成單個值
在MySQL的SELECT語句中,可使用Concat()函數來拼接兩個列。
MYsql的不同點:多數DBMS使用+或||來實現拼接,MySQL則使用Concat()函數來實現。當把SQL語句轉換成MySQL語句時一定要把這個區別銘記在心
舉例:
輸入:
select CONCAT(p.person_name,'(',p.biz_code ,')') FROM pi_trades.patient p
輸出:
分析:
Concat()拼接串,即把多個串連接起來形成一個較長的串,Concat()需要一個或多個指定的串,各個串之間用逗號分隔。
Trim函數()函數
定義:
- RTrim()函數:去掉值右邊的所有空格。
- LTrim()函數:支持左邊的所有空格。
- Trim()函數:去掉左右兩邊的空格。
舉例:
--- 基礎查詢
select CONCAT(p.person_name,'(',p.biz_code ,')') FROM pi_trades.patient p
WHERE p.person_name like'%郝忠平%'
--- 去除患者姓名右邊的空格
select CONCAT(RTRIM(p.person_name),'(',p.biz_code ,')') FROM pi_trades.patient p
WHERE p.person_name like'%郝忠平%'
--- 去掉患者姓名左邊的空格
select CONCAT(LTRIM(p.person_name),'(',p.biz_code ,')') FROM pi_trades.patient p
WHERE p.person_name like'%郝忠平%'
別名(alias)
定義:SQL支持列別名。別名(alias)是一個字段或值的替換名。別名用AS關鍵字賦予
輸入:
select CONCAT(LTRIM(p.person_name) ,'(',p.biz_code ,')') AS 患者姓名 FROM pi_trades.patient p
WHERE p.person_name like'%郝忠平%'
輸出:
分析:
SELECT語句本身與以前使用的相同,只不過這里的語句中計算字段之后跟了文本“患者姓名”。它指示SQL創建一個包含指定計算的名為“患者姓名”的計算字段。
執行算術計算
計算字段的另一個常見用途是對檢索出數據進行算術計算,
舉例:
orders表包含收到的所有訂單,orderitems表包含每個訂單中的各項物品。
輸入:檢索訂單號20005中的所有物品
select prod_id,quantity,item_price from orderitems where order_num=20005
輸出:
item_price列包含訂單中每項物品的單價。如下匯總物品的價格(單價乘以訂購數量):
輸入:
select prod_id,quantity,item_price ,quantityitem_price AS expanded_price from orderitems where order_num=20005
分析:
輸出中顯示的expanded_price列為一個計算字段,此計算為quantityitem_price。客戶機應用現在可以使用這個新計算列,就像使用其他列一樣