SQL高階語法4
SQL NULL 值
NULL 值是遺漏的未知資料。
預設地,表的列可以存放 NULL 值。
SQL NULL 值
如果表中的某個列是可選的,那麼我們可以在不向該列新增值的情況下插入新記錄或更新已有的記錄。這意味著該欄位將以 NULL 值儲存。
NULL 值的處理方式與其他值不同。
NULL 用作未知的或不適用的值的佔位符。
註釋:無法比較 NULL 和 0;它們是不等價的。
SQL 的 NULL 值處理
假如 "Persons" 表中的 "Address" 列是可選的。這意味著如果在 "Address" 列插入一條不帶值的記錄,"Address" 列會使用 NULL 值儲存。
那麼我們如何測試 NULL 值呢?
無法使用比較運算子來測試 NULL 值,比如 =, <, 或者 <>。
我們必須使用 IS NULL 和 IS NOT NULL 操作符。
SQL IS NULL
我們如何僅僅選取在 "Address" 列中帶有 NULL 值的記錄呢?
我們必須使用 IS NULL 操作符:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL
提示:請始終使用 IS NULL 來查詢 NULL 值。
SQL IS NOT NULL
我們如何選取在 "Address" 列中不帶有 NULL 值的記錄呢?
我們必須使用 IS NOT NULL 操作符:
SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NOT NULL
SQL NULL 函式
請看下面的 "Products" 表:假如 "UnitsOnOrder" 是可選的,而且可以包含 NULL 值。
我們使用如下 SELECT 語句:
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
MySQL
MySQL 也擁有類似 ISNULL() 的函式。不過它的工作方式與微軟的 ISNULL() 函式有點不同。
在 MySQL 中,我們可以使用 IFNULL() 函式,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函式,就像這樣:SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
SQL 資料型別
Microsoft Access、MySQL 以及 SQL Server 所使用的資料型別和範圍。
Microsoft Access 資料型別
MySQL 資料型別
在 MySQL 中,有三種主要的型別:文字、數字和日期/時間型別。
Text 型別:
Number 型別:
* 這些整數型別擁有額外的選項 UNSIGNED。通常,整數可以是負數或正數。如果新增 UNSIGNED 屬性,那麼範圍將從 0 開始,而不是某個負數。
Date 型別:
* 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它們的工作方式很不同。在 INSERT 或 UPDATE 查詢中,TIMESTAMP 自動把自身設定為當前的日期和時間。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
SQL Server 資料型別
SQL 伺服器 - RDBMS
現代的 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 的基礎。