mysql必知必會--創建計算欄位

来源:https://www.cnblogs.com/ygjzs/archive/2020/01/22/12229929.html
-Advertisement-
Play Games

計算欄位 存儲在資料庫表中的數據一般不是應用程式所需要的格式。下麵舉 幾個例子。 * 如果想在一個欄位中既顯示公司名,又顯示公司的地址,但這兩 個信息一般包含在不同的表列中。 * 城市、州和郵政編碼存儲在不同的列中(應該這樣),但郵件標簽 列印程式卻需要把它們作為一個恰當格式的欄位檢索出來。 * 列 ...


 計算欄位

存儲在資料庫表中的數據一般不是應用程式所需要的格式。下麵舉
幾個例子。
* 如果想在一個欄位中既顯示公司名,又顯示公司的地址,但這兩
個信息一般包含在不同的表列中。
* 城市、州和郵政編碼存儲在不同的列中(應該這樣),但郵件標簽
列印程式卻需要把它們作為一個恰當格式的欄位檢索出來。
* 列數據是大小寫混合的,但報表程式需要把所有數據按大寫表示
出來。
* 物品訂單表存儲物品的價格和數量,但不需要存儲每個物品的總
價格(用價格乘以數量即可)。為列印發票,需要物品的總價格。
* 需要根據表數據進行總數、平均數計算或其他計算。
在上述每個例子中,存儲在表中的數據都不是應用程式所需要的。
我們需要直接從資料庫中檢索出轉換、計算或格式化過的數據;而不是
檢索出數據,然後再在客戶機應用程式或報告程式中重新格式化。
這就是計算欄位發揮作用的所在了。與前面各章介紹過的列不同,
計算欄位並不實際存在於資料庫表中。計算欄位是運行時在 SELECT 語句
內創建的。

欄位(field) 基本上與列(column)的意思相同,經常互換使
用,不過資料庫列一般稱為列,而術語欄位通常用在計算欄位的
連接上。
重要的是要註意到,只有資料庫知道 SELECT 語句中哪些列是實際的
表列,哪些列是計算欄位。從客戶機(如應用程式)的角度來看,計算
欄位的數據是以與其他列的數據相同的方式返回的。

客戶機與伺服器的格式 可在SQL語句內完成的許多轉換
和格式化工作都可以直接在客戶機應用程式內完成。但一
般來說,在資料庫伺服器上完成這些操作比在客戶機中完
成要快得多,因為DBMS是設計來快速有效地完成這種處
理的。

拼接欄位

拼接(concatenate) 將值聯結到一起構成單個值。
解決辦法是把兩個列拼接起來。在MySQL的 SELECT 語句中,可使用
Concat() 函數來拼接兩個列

MySQL的不同之處 多數DBMS使用 + 或 || 來實現拼接,
MySQL則使用 Concat() 函數來實現。當把SQL語句轉換成
MySQL語句時一定要把這個區別銘記在心。

Concat() 拼接串,即把多個串連接起來形成一個較長的串。
Concat() 需要一個或多個指定的串,各個串之間用逗號分隔。
上面的 SELECT 語句連接以下4個元素:

  • 存儲在 vend_name 列中的名字;
  • 包含一個空格和一個左圓括弧的串;
  • 存儲在 vend_country 列中的國家;
  • 包含一個右圓括弧的串。
    從上述輸出中可以看到, SELECT 語句返回包含上述4個元素的單個列
    (計算欄位)。

通過刪除數據右側多餘的空格來整理數據,這可以
使用MySQL的 RTrim() 函數來完成,如下所示:

Trim 函數 MySQL除了支持 RTrim() (正如剛纔所見,它去掉
串右邊的空格),還支持 LTrim() (去掉串左邊的空格)以及
Trim() (去掉串左右兩邊的空格)。

使用別名

從前面的輸出中可以看到, SELECT 語句拼接地址欄位工作得很好。
但此新計算列的名字是什麼呢?實際上它沒有名字,它只是一個值。如
果僅在SQL查詢工具中查看一下結果,這樣沒有什麼不好。但是,一個未
命名的列不能用於客戶機應用中,因為客戶機沒有辦法引用它。
為瞭解決這個問題,SQL支持列別名。別名(alias)是一個欄位或值
的替換名。別名用 AS 關鍵字賦予。請看下麵的 SELECT 語句

SELECT 語句本身與以前使用的相同,只不過這裡的語句中計算
欄位之後跟了文本 AS vend_title 。它指示SQL創建一個包含
指定計算的名為 vend_title 的計算欄位。從輸出中可以看到,結果與以
前的相同,但現在列名為 vend_title ,任何客戶機應用都可以按名引用
這個列,就像它是一個實際的表列一樣

別名的其他用途 別名還有其他用途。常見的用途包括在實際
的表列名包含不符合規定的字元(如空格)時重新命名它,在
原來的名字含混或容易誤解時擴充它,等等

導出列 別名有時也稱為導出列(derived column),不管稱為
什麼,它們所代表的都是相同的東西

執行算術計算

計算欄位的另一常見用途是對檢索出的數據進行算術計算

如何測試計算 SELECT 提供了測試和試驗函數與計算的一個
很好的辦法。雖然 SELECT 通常用來從表中檢索數據,但可以
省略 FROM 子句以便簡單地訪問和處理表達式。例如, SELECT
3*2; 將返回 6 , SELECT Trim('abc'); 將返回 abc ,而 SELECT
Now() 利用 Now() 函數返回當前日期和時間。通過這些例子,
可以明白如何根據需要使用 SELECT 進行試驗。

本章介紹了計算欄位以及如何創建計算欄位。我們用例子說明瞭計
算欄位在串拼接和算術計算的用途。此外,還學習瞭如何創建和使用別
名,以便應用程式能引用計算欄位。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這是該系列的第二篇文章: "在ASP.NET Core 3.0中使用Serilog.AspNetCore" 。 1. "第1部分 使用Serilog RequestLogging來簡化ASP.NET Core的日誌輸出" 2. "第2部分 用Serilog記錄所選終結點的附加屬性" (本文) 3. ...
  • 基礎教程之導出Pdf收據 說明 本教程主要說明如何使用Magicodes.IE.Pdf完成Pdf收據導出 要點 導出PDF數據 自定義PDF模板 導出單據 如何批量導出單據 導出特性 PdfExporterAttribute + Orientation : 方向(橫向或縱向) + PaperKind ...
  • 本文介紹調用Spire.Cloud.Word.SDK提供的介面shapesApi來操作Word形狀,包括添加形狀AddShape(),添加形狀時,可設置形狀類型、顏色、大小、位置、傾斜、輪廓、文本環繞方式、順序);刪除形狀DeleteShape()和讀取形狀屬性GetShapeProperties( ...
  • NuGet微軟官方中國鏡像地址: https://nuget.cdn.azure.cn/v3/index.json 打開Visual Studio => 工具 => NuGet包管理器 => 程式包管理器設置 找到“Net包管理器” => “程式包源”,點擊“+”新建項,將地址https://nug ...
  • 要點 導出特性 如何導出Excel表頭 如何導出數據、如何進行數據的切割、如何使用篩選器 導出特性 ExporterAttribute + Name : 名稱(當前Sheet 名稱) + HeaderFontSize :頭部字體大小 + FontSize :正文字體大小 + MaxRowNumber ...
  • 首先在左下角輸入cmd搜索->命令提示符->以管理員身份運行->然後複製下麵一段命令: dism /online /norestart /add-package:%SystemRoot%\servicing\Packages\Microsoft-Windows-IIS-WebServer-AddOn ...
  • https://sqlserver.code.blog/2020/01/22/failed-to-restart-polybase-data-movement-after-running-sp_polybase_join_group/ ...
  • 函數 與其他大多數電腦語言一樣,SQL支持利用函數來處理數據。函數 一般是在數據上執行的,它給數據的轉換和處理提供了方便。 在前一章中用來去掉串尾空格的 RTrim() 就是一個函數的例子 函數沒有SQL的可移植性強 能運行在多個系統上的代碼稱 為可移植的(portable)。相對來說,多數SQL ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...