學習SQL的第十天(11月18日~11月19日)

SQL Date(日期) 函數

MySQL Date 函數

下表為 MySQL 中最重要的內建日期函數

圖片來自W3C

SQL Server Date 函數

下表列出了 SQL Server 中最重要的內建日期函數

圖片來自W3C

SQL Date 數據類型

MySQL 使用下列數據類型在數據庫中存儲日期或日期/時間值:

DATE - 格式 YYYY-MM-DD

DATETIME - 格式: YYYY-MM-DD HH:MM:SS

TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS

時間戳(timestamp),一個能表示一份數據在某個特定時間之前已經存在的、 完整的、 可驗證的數據,通常是一個字符序列,唯一地標識某一刻的時間。

YEAR - 格式 YYYY 或 YY

SQL Server 使用下列數據類型在數據庫中存儲日期或日期/時間值:

DATE - 格式 YYYY-MM-DD

DATETIME - 格式: YYYY-MM-DD HH:MM:SS

SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS

TIMESTAMP - 格式: 唯一的數字

* smalldatetime 和 datetime 的區別

smalldatetime不能到秒.

不過它占的空間小(4位),datetime(8位);而且兩者的時間范圍不一樣,datetime占8字節,精度3.33毫秒,時間從1753.1.1到9999.12.31,smalldatetime占4字節,精度1分鐘,時間從1900.1.1到2079.6.6


SQL 日期處理

圖片來自W3C

從上表 Orders 中,篩選時間在 2008-12-26的數據

SELECT * FROM Orders WHERE OrderDate='2008-12-26'

提示:如果希望使查詢簡單且更易維護,那么就不要在日期中使用時間部分


SQL NULL 值

NULL 值是遺漏的未知數據。默認地,表的列可以存放 NULL 值。

如果表中的某個列是可選的,那么我們可以在不向該列添加值的情況下插入新記錄或更新已有的記錄。這意味著該字段將以 NULL 值保存。

* NULL 和 0 的區別

NULL表示指針為空的宏,0是沒有任何特殊含義的值。也就是說,理論上來講NULL可以是任意數值,雖然目前所有編譯器都將其設為0。

*空指針值,一般的文檔中傾向于用 NULL 表示,而沒有直接說成 0。但是我們應該清楚:對于指針類型來說,返回 NULL 和 返回 0 是完全等價的,因為 NULL 和 0 都表示 “null pointer”(空指針)。因此,空指針是什么,就是一個被賦值為0的指針,在沒有被具體初始化之前,其值為0。

SQL IS NULL

eg.在下表中,列出"Address" 列中帶有 NULL 值的記錄

圖片來自W3C

SELECT Lastname,Firtsname,Address FROM Persons?

WHERE Address IS NULL

SQL IS NOT NULL

列出"Address" 列中沒有 NULL 值的記錄

SELECT Lastname,Firtsname,Address FROM Persons

WHERE Address IS NOT NULL

SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函數

表“Products”,圖片來自W3C

假如 "UnitsOnOrder" 是可選的,而且可以包含 NULL 值。

SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)?

FROM Products

注釋: 單價 * 乘以 (庫存 + 訂購量)

在上面的例子中,如果有 "UnitsOnOrder" 值是 NULL,那么結果是 NULL。

微軟的 ISNULL() 函數用于規定如何處理 NULL 值。

NVL(), IFNULL() 和 COALESCE() 函數也可以達到相同的結果。

在這里,我們希望 NULL 值為 0。如果 "UnitsOnOrder" 是 NULL,則不利于計算,因此如果值是 NULL 則 ISNULL() 返回 0。

SQL Server / MS Access

SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))

FROM Products

Oracle

Oracle 沒有 ISNULL() 函數。可以使用 NVL() 函數達到相同的結果

SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))

FROM Products

注釋:NVL(字段名,'判斷字段如果為空的話這里填你想要替換的值')

MySQL

SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))

FROM Products

或者使用 COALESCE() 函數:

SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))

FROM Products

注釋:COALESCE是一個函數, (expression_1, expression_2, ...,expression_n)依次參考各參數表達式,遇到非null值即停止并返回該值。如果所有的表達式都是空值,最終將返回一個空值。使用COALESCE在于大部分包含空值的表達式最終將返回空值。


SQL 數據類型

Microsoft Access 數據類型

圖片來自W3C

MySQL 數據類型

在 MySQL 中,有三種主要的類型:文本、數字和日期/時間類型。

圖片來自W3C
圖片來自W3C
圖片來自W3C

UTC :協調世界時

SQL Server 數據類型(省略)

圖片來自W3C

SQL 服務器 - RDBMS

DBMS - 數據庫管理系統(Database Management System)。

數據庫管理系統是一種可以訪問數據庫中數據的計算機程序。DBMS 使我們有能力在數據庫中提取、修改或者存貯信息。不同的 DBMS 提供不同的函數供查詢、提交以及修改數據。

RDBMS - 關系數據庫管理系統(Relational Database Management System)

關系數據庫管理系統 (RDBMS) 也是一種數據庫管理系統,其數據庫是根據數據間的關系來組織和訪問數據的。20 世紀 70 年代初,IBM 公司發明了 RDBMS。RDBMS 是 SQL 的基礎,也是所有現代數據庫系統諸如 Oracle、SQL Server、IBM DB2、Sybase、MySQL 以及 Microsoft Access 的基礎。


好像很重要的一部分要來啦!??(???)

SQL 函數

內建 SQL 函數的語法:SELECT function(列) FROM 表

在 SQL 中,基本的函數類型和種類有若干種。函數的基本類型是:Aggregate 函數 (合計函數) 和 Scalar 函數(單一函數)

合計函數(Aggregate functions)

Aggregate 函數的操作面向一系列的值,并返回一個單一的值。

注釋:如果在 SELECT 語句的項目列表中的眾多其它表達式中使用 SELECT 語句,則這個 SELECT 必須使用 GROUP BY 語句

圖片來自W3C
圖片來自W3C

Scalar 函數

Scalar 函數的操作面向某個單一的值,并返回基于輸入值的一個單一的值。

圖片來自W3C
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容