SQL SELECT 語句
一疤祭、查詢SQL SELECT 語法
(1)SELECT 列名稱 FROM 表名稱
(2)SELECT *? FROM 表名稱
注釋:SQL 語句對大小寫不敏感播赁。SELECT 等效于 select入偷。
=======================================================
二城侧、查詢?nèi)ブ?SQL SELECT DISTINCT
在表中愚屁,可能會包含重復(fù)值截型。這并不成問題蚕泽,不過陶冷,有時您也許希望僅僅列出不同(distinct)的值钙姊。關(guān)鍵詞 DISTINCT 用于返回唯一不同的值
(1)語法:SELECT DISTINCT 列名稱 FROM 表名稱
===========================================================
三、SQL WHERE:WHERE 子句
如需有條件地從表中選取數(shù)據(jù)埂伦,可將 WHERE 子句添加到 SELECT 語句
(1)語法:SELECT 列名稱 FROM 表名稱 WHERE ?列 運(yùn)算符 值
(2)下面的運(yùn)算符可在 WHERE 子句中使用:
注釋:在某些版本的 SQL 中煞额,操作符 <> 可以寫為 !=
=========================================================
四、SQL AND & OR
AND 和 OR 運(yùn)算符用于基于一個以上的條件對記錄進(jìn)行過濾。
AND 和 OR 運(yùn)算符
AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結(jié)合起來膊毁。
如果第一個條件和第二個條件都成立胀莹,則 AND 運(yùn)算符顯示一條記錄。
如果第一個條件和第二個條件中只要有一個成立婚温,則 OR 運(yùn)算符顯示一條記錄描焰。
========================================================
五、SQL ORDER BY
? ? ?ORDER BY 語句用于對結(jié)果集進(jìn)行排序栅螟。
ORDER BY 語句
(1)ORDER BY 語句用于根據(jù)指定的列對結(jié)果集進(jìn)行排序荆秦。
ORDER BY 語句默認(rèn)按照升序?qū)τ涗涍M(jìn)行排序。
(2)如果您希望按照降序?qū)τ涗涍M(jìn)行排序力图,可以使用 DESC 關(guān)鍵字步绸。
=============================================================
六、INSERT INTO
INSERT INTO 表名稱 VALUES (值1, 值2,....)
我們也可以指定所要插入數(shù)據(jù)的列:
(1)INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
====================================================
七吃媒、SQL UPDATE
Update 語句
Update 語句用于修改表中的數(shù)據(jù)瓤介。
(1)語法:UPDATE 表名稱 SET列名稱 = 新值 ?WHERE 列名稱 = 某值
============================================================
八、SQL DELETE
DELETE 語句用于刪除表中的行赘那。
語法
(1)DELETEF? ROM 表名稱 WHERE列名稱 = 值
============================================================
九刑桑、SQL TOP
TOP 子句用于規(guī)定要返回的記錄的數(shù)目。
對于擁有數(shù)千條記錄的大型表來說漓概,TOP 子句是非常有用的漾月。
注釋:并非所有的數(shù)據(jù)庫系統(tǒng)都支持 TOP 子句。
(1)SQL Server 的語法:
SELECT ?TOP number|percent ?column_name(s) ?FROM ?table_name
=================================================================
十胃珍、LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式梁肿。
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
================================================
十一、SQL 通配符
在搜索數(shù)據(jù)庫中的數(shù)據(jù)時觅彰,SQL 通配符可以替代一個或多個字符吩蔑。
SQL 通配符必須與 LIKE 運(yùn)算符一起使用。
在 SQL 中填抬,可使用以下通配符:
==============================================================
十二烛芬、SQL IN
IN 操作符
IN 操作符允許我們在 WHERE 子句中規(guī)定多個值。
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
========================================
十三飒责、SQL ?BETWEEN
BETWEEN 操作符在 WHERE 子句中使用赘娄,作用是選取介于兩個值之間的數(shù)據(jù)范圍。
操作符 BETWEEN ... AND 會選取介于兩個值之間的數(shù)據(jù)范圍宏蛉。這些值可以是數(shù)值遣臼、文本或者日期。
(1)語法:
SELECT column_name(s) ??FROM table_name
WHERE column_name ? ?BETWEEN value1 AND value2
=============================================
十四拾并、SQL Alias(別名)
(1)表的 SQL Alias 語法:
SELECT column_name(s) ??FROM table_name ? ?AS alias_name
(2)列的 SQL Alias 語法
SELECT column_name AS alias_name ??FROM table_name
==================================================
十五揍堰、SQL JOIN
SQL join 用于根據(jù)兩個或多個表中的列之間的關(guān)系鹏浅,從這些表中查詢數(shù)據(jù)。
不同的 SQL JOIN
除了我們在上面的例子中使用的 INNER JOIN(內(nèi)連接)屏歹,我們還可以使用其他幾種連接隐砸。
下面列出了您可以使用的 JOIN 類型,以及它們之間的差異蝙眶。
JOIN: 如果表中有至少一個匹配季希,則返回行
LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
RIGHT JOIN: 即使左表中沒有匹配幽纷,也從右表返回所有的行
FULL JOIN: 只要其中一個表中存在匹配胖眷,就返回行
=====================================================
十六、SQL INNER JOIN
在表中存在至少一個匹配時霹崎,INNER JOIN 關(guān)鍵字返回行
(1)語法:SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋:INNER JOIN 與 JOIN 是相同的。
============================================
十七冶忱、SQL LEFT JOIN
LEFT JOIN 關(guān)鍵字會從左表 (table_name1) 那里返回所有的行尾菇,即使在右表 (table_name2) 中沒有匹配的行。
(1)LEFT JOIN 關(guān)鍵字語法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋:在某些數(shù)據(jù)庫中囚枪, LEFT JOIN 稱為 LEFT OUTER JOIN派诬。
==========================================================
十八、SQL RIGHT JOIN
RIGHT JOIN 關(guān)鍵字會右表 (table_name2) 那里返回所有的行链沼,即使在左表 (table_name1) 中沒有匹配的行默赂。
(1)RIGHT JOIN 關(guān)鍵字語法
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋:在某些數(shù)據(jù)庫中, RIGHT JOIN 稱為 RIGHT OUTER JOIN括勺。
====================================================
十九缆八、SQL FULL JOIN
只要其中某個表存在匹配,F(xiàn)ULL JOIN 關(guān)鍵字就會返回行疾捍。
(1)FULL JOIN 關(guān)鍵字語法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋:在某些數(shù)據(jù)庫中奈辰, FULL JOIN 稱為 FULL OUTER JOIN。
===================================================
二十乱豆、SQL UNION 和 UNION ALL
SQL UNION 操作符
UNION 操作符用于合并兩個或多個 SELECT 語句的結(jié)果集奖恰。
請注意,UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列宛裕。列也必須擁有相似的數(shù)據(jù)類型瑟啃。同時,每條 SELECT 語句中的列的順序必須相同揩尸。
(1)SQL UNION 語法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注釋:默認(rèn)地蛹屿,UNION 操作符選取不同的值。如果允許重復(fù)的值疲酌,請使用 UNION ALL
(2)SQL UNION ALL 語法:
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外蜡峰,UNION 結(jié)果集中的列名總是等于 UNION 中第一個 SELECT 語句中的列名了袁。
二十一、SQL SELECT INTO
SQL SELECT INTO 語句可用于創(chuàng)建表的備份復(fù)件湿颅。
SELECT INTO 語句
SELECT INTO 語句從一個表中選取數(shù)據(jù)载绿,然后把數(shù)據(jù)插入另一個表中。
SELECT INTO 語句常用于創(chuàng)建表的備份復(fù)件或者用于對記錄進(jìn)行存檔油航。
二十二崭庸、SQL CREATE DATABASE
CREATE DATABASE 用于創(chuàng)建數(shù)據(jù)庫。
SQL CREATE DATABASE 語法
CREATE DATABASE database_name
二十三谊囚、CREATE TABLE 語句
CREATE TABLE 語句用于創(chuàng)建數(shù)據(jù)庫中的表
SQL CREATE TABLE 語法
CREATE TABLE 表名稱
(
列名稱1 數(shù)據(jù)類型,
列名稱2 數(shù)據(jù)類型,
列名稱3 數(shù)據(jù)類型,
....
)
數(shù)據(jù)類型(data_type)規(guī)定了列可容納何種數(shù)據(jù)類型怕享。下面的表格包含了SQL中最常用的數(shù)據(jù)類型:
====================================================================
二十四、SQL 約束
約束用于限制加入表的數(shù)據(jù)的類型镰踏。?可以在創(chuàng)建表時規(guī)定約束(通過 CREATE TABLE 語句)函筋,或者在表創(chuàng)建之后也可以(通過 ALTER TABLE 語句)。
我們將主要探討以下幾種約束:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
(1)SQL NOT NULL 約束
NOT NULL 約束強(qiáng)制列不接受 NULL 值奠伪。
NOT NULL 約束強(qiáng)制字段始終包含值跌帐。這意味著,如果不向字段添加值绊率,就無法插入新記錄或者更新記錄谨敛。
下面的 SQL 語句強(qiáng)制 "Id_P" 列和 "LastName" 列不接受 NULL 值:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
(2)SQL UNIQUE 約束
UNIQUE 約束唯一標(biāo)識數(shù)據(jù)庫表中的每條記錄。
UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證滤否。
PRIMARY KEY 擁有自動定義的 UNIQUE 約束脸狸。
請注意,每個表可以有多個 UNIQUE 約束藐俺,但是每個表只能有一個 PRIMARY KEY 約束炊甲。
(3)SQL PRIMARY KEY 約束
PRIMARY KEY 約束唯一標(biāo)識數(shù)據(jù)庫表中的每條記錄。
主鍵必須包含唯一的值紊搪。
主鍵列不能包含 NULL 值蜜葱。
每個表都應(yīng)該有一個主鍵,并且每個表只能有一個主鍵耀石。
(4)SQL FOREIGN KEY 約束?
一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY牵囤。
讓我們通過一個例子來解釋外鍵。請看下面兩個表:
"Persons" 表:
請注意滞伟,"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列揭鳞。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY梆奈。
FOREIGN KEY 約束用于預(yù)防破壞表之間連接的動作果港。
FOREIGN KEY 約束也能防止非法數(shù)據(jù)插入外鍵列贯吓,因為它必須是它指向的那個表中的值之一。
(5)SQL CHECK 約束
CHECK 約束用于限制列中的值的范圍臭胜。
如果對單個列定義 CHECK 約束烘挫,那么該列只允許特定的值。
如果對一個表定義 CHECK 約束,那么此約束會在特定的列中對值進(jìn)行限制。
(6)SQL DEFAULT 約束
DEFAULT 約束用于向列中插入默認(rèn)值蕴侣。
如果沒有規(guī)定其他的值,那么會將默認(rèn)值添加到所有的新記錄臭觉。
SQL DEFAULT Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表創(chuàng)建時為 "City" 列創(chuàng)建 DEFAULT 約束:
My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
通過使用類似 GETDATE() 這樣的函數(shù)昆雀,DEFAULT 約束也可以用于插入系統(tǒng)值:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)
SQL CREATE INDEX
CREATE INDEX 語句用于在表中創(chuàng)建索引。
在不讀取整個表的情況下蝠筑,索引使數(shù)據(jù)庫應(yīng)用程序可以更快地查找數(shù)據(jù)狞膘。
索引
您可以在表中創(chuàng)建索引,以便更加快速高效地查詢數(shù)據(jù)什乙。
用戶無法看到索引挽封,它們只能被用來加速搜索/查詢。
注釋:更新一個包含索引的表需要比更新一個沒有索引的表更多的時間臣镣,這是由于索引本身也需要更新场仲。因此,理想的做法是僅僅在常常被搜索的列(以及表)上面創(chuàng)建索引退疫。
SQL CREATE INDEX 語法
在表上創(chuàng)建一個簡單的索引。允許使用重復(fù)的值:
CREATE INDEX index_name
ON table_name (column_name)
注釋:"column_name" 規(guī)定需要索引的列鸽素。
SQL CREATE UNIQUE INDEX 語法
在表上創(chuàng)建一個唯一的索引褒繁。唯一的索引意味著兩個行不能擁有相同的索引值。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
SQL 撤銷索引馍忽、表以及數(shù)據(jù)庫
通過使用 DROP 語句棒坏,可以輕松地刪除索引、表和數(shù)據(jù)庫遭笋。
SQL DROP INDEX 語句
我們可以使用 DROP INDEX 命令刪除表格中的索引坝冕。
用于 Microsoft SQLJet (以及 Microsoft Access) 的語法:
DROP INDEX index_name ON table_name
用于 MS SQL Server 的語法:
DROP INDEX table_name.index_name
用于 IBM DB2 和 Oracle 語法:
DROP INDEX index_name
用于 MySQL 的語法:
ALTER TABLE table_name DROP INDEX index_name
SQL ALTER TABLE
ALTER TABLE 語句
ALTER TABLE 語句用于在已有的表中添加、修改或刪除列瓦呼。
SQL ALTER TABLE 語法
如需在表中添加列喂窟,請使用下列語法:
ALTER TABLE table_name
ADD column_name datatype
要刪除表中的列,請使用下列語法:
ALTER TABLE table_name
DROP COLUMN column_name
注釋:某些數(shù)據(jù)庫系統(tǒng)不允許這種在數(shù)據(jù)庫表中刪除列的方式 (DROP COLUMN column_name)央串。
要改變表中列的數(shù)據(jù)類型磨澡,請使用下列語法:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
SQL AUTO INCREMENT
Auto-increment 會在新記錄插入表中時生成一個唯一的數(shù)字。
AUTO INCREMENT 字段
我們通常希望在每次插入新記錄時质和,自動地創(chuàng)建主鍵字段的值稳摄。
我們可以在表中創(chuàng)建一個 auto-increment 字段。
SQL VIEW
視圖是可視化的表饲宿。
本章講解如何創(chuàng)建厦酬、更新和刪除視圖胆描。
SQL CREATE VIEW 語句
什么是視圖?
在 SQL 中仗阅,視圖是基于 SQL 語句的結(jié)果集的可視化的表昌讲。
視圖包含行和列,就像一個真實(shí)的表霹菊。視圖中的字段就是來自一個或多個數(shù)據(jù)庫中的真實(shí)的表中的字段剧蚣。我們可以向視圖添加 SQL 函數(shù)、WHERE 以及 JOIN 語句旋廷,我們也可以提交數(shù)據(jù)鸠按,就像這些來自于某個單一的表。
注釋:數(shù)據(jù)庫的設(shè)計和結(jié)構(gòu)不會受到視圖中的函數(shù)饶碘、where 或 join 語句的影響目尖。
SQL Date
SQL 日期
當(dāng)我們處理日期時,最難的任務(wù)恐怕是確保所插入的日期的格式扎运,與數(shù)據(jù)庫中日期列的格式相匹配瑟曲。
只要數(shù)據(jù)包含的只是日期部分,運(yùn)行查詢就不會出問題豪治。但是洞拨,如果涉及時間,情況就有點(diǎn)復(fù)雜了负拟。
在討論日期查詢的復(fù)雜性之前烦衣,我們先來看看最重要的內(nèi)建日期處理函數(shù)。
MySQL Date 函數(shù)
下面的表格列出了 MySQL 中最重要的內(nèi)建日期函數(shù):
函數(shù) 描述
NOW() 返回當(dāng)前的日期和時間
CURDATE() 返回當(dāng)前的日期
CURTIME() 返回當(dāng)前的時間
DATE() 提取日期或日期/時間表達(dá)式的日期部分
EXTRACT() 返回日期/時間按的單獨(dú)部分
DATE_ADD() 給日期添加指定的時間間隔
DATE_SUB() 從日期減去指定的時間間隔
DATEDIFF() 返回兩個日期之間的天數(shù)
DATE_FORMAT() 用不同的格式顯示日期/時間
SQL Server Date 函數(shù)
下面的表格列出了 SQL Server 中最重要的內(nèi)建日期函數(shù):
函數(shù) 描述
GETDATE() 返回當(dāng)前日期和時間
DATEPART() 返回日期/時間的單獨(dú)部分
DATEADD() 在日期中添加或減去指定的時間間隔
DATEDIFF() 返回兩個日期之間的時間
CONVERT() 用不同的格式顯示日期/時間
SQL Date 數(shù)據(jù)類型
MySQL 使用下列數(shù)據(jù)類型在數(shù)據(jù)庫中存儲日期或日期/時間值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
YEAR - 格式 YYYY 或 YY
SQL Server 使用下列數(shù)據(jù)類型在數(shù)據(jù)庫中存儲日期或日期/時間值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: 唯一的數(shù)字
SQL 日期處理
如果不涉及時間部分掩浙,那么我們可以輕松地比較兩個日期花吟!
假設(shè)我們有下面這個 "Orders" 表:
OrderId ProductName OrderDate
1 computer 2008-12-26
2 printer 2008-12-26
3 electrograph 2008-11-12
4 telephone 2008-10-19
現(xiàn)在,我們希望從上表中選取 OrderDate 為 "2008-12-26" 的記錄厨姚。
我們使用如下 SELECT 語句:
SELECT * FROM Orders WHERE OrderDate='2008-12-26'
結(jié)果集:
OrderId ProductName OrderDate
1 computer 2008-12-26
3 electrograph 2008-12-26
現(xiàn)在假設(shè) "Orders" 類似這樣(請注意 "OrderDate" 列中的時間部分):
OrderId ProductName OrderDate
1 computer 2008-12-26 16:23:55
2 printer 2008-12-26 10:45:26
3 electrograph 2008-11-12 14:12:08
4 telephone 2008-10-19 12:56:10
如果我們使用上面的 SELECT 語句:
SELECT * FROM Orders WHERE OrderDate='2008-12-26'
那么我們得不到結(jié)果衅澈。這是由于該查詢不含有時間部分的日期。
SQL NULL
NULL 值是遺漏的未知數(shù)據(jù)谬墙。
默認(rèn)地今布,表的列可以存放 NULL 值。
本章講解 IS NULL 和 IS NOT NULL 操作符拭抬。
SQL NULL
MySQL 也擁有類似 ISNULL() 的函數(shù)险耀。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中玖喘,我們可以使用 IFNULL() 函數(shù)甩牺,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
MySQL 也擁有類似 ISNULL() 的函數(shù)累奈。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同贬派。
在 MySQL 中急但,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)搞乏,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL 數(shù)據(jù)類型
MySQL 也擁有類似 ISNULL() 的函數(shù)波桩。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中请敦,我們可以使用 IFNULL() 函數(shù)镐躲,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
Microsoft Access侍筛、MySQL 以及 SQL Server 所使用的數(shù)據(jù)類型和范圍萤皂。
Microsoft Access 數(shù)據(jù)類型
數(shù)據(jù)類型 描述 存儲
Text 用于文本或文本與數(shù)字的組合。最多 255 個字符匣椰。
Memo Memo 用于更大數(shù)量的文本裆熙。最多存儲 65,536 個字符。注釋:無法對 memo 字段進(jìn)行排序禽笑。不過它們是可搜索的入录。
Byte 允許 0 到 255 的數(shù)字。 1 字節(jié)
Integer 允許介于 -32,768 到 32,767 之間的數(shù)字佳镜。 2 字節(jié)
Long 允許介于 -2,147,483,648 與 2,147,483,647 之間的全部數(shù)字 4 字節(jié)
Single 單精度浮點(diǎn)僚稿。處理大多數(shù)小數(shù)。 4 字節(jié)
Double 雙精度浮點(diǎn)蟀伸。處理大多數(shù)小數(shù)贫奠。 8 字節(jié)
Currency 用于貨幣。支持 15 位的元望蜡,外加 4 位小數(shù)。提示:您可以選擇使用哪個國家的貨幣拷恨。 8 字節(jié)
AutoNumber AutoNumber 字段自動為每條記錄分配數(shù)字脖律,通常從 1 開始。 4 字節(jié)
Date/Time 用于日期和時間 8 字節(jié)
Yes/No 邏輯字段腕侄,可以顯示為 Yes/No小泉、True/False 或 On/Off。在代碼中冕杠,使用常量 True 和 False (等價于 1 和 0)注釋:Yes/No 字段中不允許 Null 值 1 比特
Ole Object 可以存儲圖片微姊、音頻、視頻或其他 BLOBs (Binary Large OBjects) 最多 1GB
Hyperlink 包含指向其他文件的鏈接分预,包括網(wǎng)頁兢交。
Lookup Wizard 允許你創(chuàng)建一個可從下列列表中進(jìn)行選擇的選項列表。 4 字節(jié)
MySQL 數(shù)據(jù)類型
在 MySQL 中笼痹,有三種主要的類型:文本配喳、數(shù)字和日期/時間類型酪穿。
Text 類型:
數(shù)據(jù)類型 描述
CHAR(size) 保存固定長度的字符串(可包含字母、數(shù)字以及特殊字符)晴裹。在括號中指定字符串的長度被济。最多 255 個字符。
VARCHAR(size) 保存可變長度的字符串(可包含字母涧团、數(shù)字以及特殊字符)只磷。在括號中指定字符串的最大長度。最多 255 個字符泌绣。注釋:如果值的長度大于 255钮追,則被轉(zhuǎn)換為 TEXT 類型。
TINYTEXT 存放最大長度為 255 個字符的字符串赞别。
TEXT 存放最大長度為 65,535 個字符的字符串畏陕。
BLOB 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字節(jié)的數(shù)據(jù)仿滔。
MEDIUMTEXT 存放最大長度為 16,777,215 個字符的字符串惠毁。
MEDIUMBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字節(jié)的數(shù)據(jù)崎页。
LONGTEXT 存放最大長度為 4,294,967,295 個字符的字符串鞠绰。
LONGBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字節(jié)的數(shù)據(jù)飒焦。
ENUM(x,y,z,etc.) 允許你輸入可能值的列表蜈膨。可以在 ENUM 列表中列出最大 65535 個值牺荠。如果列表中不存在插入的值翁巍,則插入空值。注釋:這些值是按照你輸入的順序存儲的休雌≡詈可以按照此格式輸入可能的值:ENUM('X','Y','Z')
SET 與 ENUM 類似,SET 最多只能包含 64 個列表項杈曲,不過 SET 可存儲一個以上的值驰凛。
Number 類型:
數(shù)據(jù)類型 描述
TINYINT(size) -128 到 127 常規(guī)。0 到 255 無符號*担扑。在括號中規(guī)定最大位數(shù)恰响。
SMALLINT(size) -32768 到 32767 常規(guī)。0 到 65535 無符號*涌献。在括號中規(guī)定最大位數(shù)胚宦。
MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 無符號*。在括號中規(guī)定最大位數(shù)间唉。
INT(size) -2147483648 到 2147483647 常規(guī)绞灼。0 到 4294967295 無符號*。在括號中規(guī)定最大位數(shù)呈野。
BIGINT(size) -9223372036854775808 到 9223372036854775807 常規(guī)低矮。0 到 18446744073709551615 無符號*。在括號中規(guī)定最大位數(shù)被冒。
FLOAT(size,d) 帶有浮動小數(shù)點(diǎn)的小數(shù)字军掂。在括號中規(guī)定最大位數(shù)。在 d 參數(shù)中規(guī)定小數(shù)點(diǎn)右側(cè)的最大位數(shù)昨悼。
DOUBLE(size,d) 帶有浮動小數(shù)點(diǎn)的大數(shù)字蝗锥。在括號中規(guī)定最大位數(shù)。在 d 參數(shù)中規(guī)定小數(shù)點(diǎn)右側(cè)的最大位數(shù)率触。
DECIMAL(size,d) 作為字符串存儲的 DOUBLE 類型终议,允許固定的小數(shù)點(diǎn)。
* 這些整數(shù)類型擁有額外的選項 UNSIGNED葱蝗。通常穴张,整數(shù)可以是負(fù)數(shù)或正數(shù)。如果添加 UNSIGNED 屬性两曼,那么范圍將從 0 開始皂甘,而不是某個負(fù)數(shù)。
Date 類型:
數(shù)據(jù)類型 描述
DATE() 日期悼凑。格式:YYYY-MM-DD注釋:支持的范圍是從 '1000-01-01' 到 '9999-12-31'
DATETIME() *日期和時間的組合偿枕。格式:YYYY-MM-DD HH:MM:SS注釋:支持的范圍是從 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
TIMESTAMP() *時間戳。TIMESTAMP 值使用 Unix 紀(jì)元('1970-01-01 00:00:00' UTC) 至今的描述來存儲户辫。格式:YYYY-MM-DD HH:MM:SS注釋:支持的范圍是從 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME() 時間渐夸。格式:HH:MM:SS 注釋:支持的范圍是從 '-838:59:59' 到 '838:59:59'
YEAR() 2 位或 4 位格式的年。注釋:4 位格式所允許的值:1901 到 2155渔欢。2 位格式所允許的值:70 到 69墓塌,表示從 1970 到 2069。
* 即便 DATETIME 和 TIMESTAMP 返回相同的格式膘茎,它們的工作方式很不同。在 INSERT 或 UPDATE 查詢中酷誓,TIMESTAMP 自動把自身設(shè)置為當(dāng)前的日期和時間披坏。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS盐数、YYMMDDHHMMSS棒拂、YYYYMMDD 或 YYMMDD。
SQL Server 數(shù)據(jù)類型
Character 字符串:
數(shù)據(jù)類型 描述 存儲
char(n) 固定長度的字符串。最多 8,000 個字符帚屉。 n
varchar(n) 可變長度的字符串谜诫。最多 8,000 個字符。
varchar(max) 可變長度的字符串攻旦。最多 1,073,741,824 個字符喻旷。
text 可變長度的字符串。最多 2GB 字符數(shù)據(jù)牢屋。
Unicode 字符串:
數(shù)據(jù)類型 描述 存儲
nchar(n) 固定長度的 Unicode 數(shù)據(jù)且预。最多 4,000 個字符。
nvarchar(n) 可變長度的 Unicode 數(shù)據(jù)烙无。最多 4,000 個字符锋谐。
nvarchar(max) 可變長度的 Unicode 數(shù)據(jù)。最多 536,870,912 個字符截酷。
ntext 可變長度的 Unicode 數(shù)據(jù)涮拗。最多 2GB 字符數(shù)據(jù)。
Binary 類型:
數(shù)據(jù)類型 描述 存儲
bit 允許 0迂苛、1 或 NULL
binary(n) 固定長度的二進(jìn)制數(shù)據(jù)三热。最多 8,000 字節(jié)。
varbinary(n) 可變長度的二進(jìn)制數(shù)據(jù)灾部。最多 8,000 字節(jié)康铭。
varbinary(max) 可變長度的二進(jìn)制數(shù)據(jù)。最多 2GB 字節(jié)赌髓。
image 可變長度的二進(jìn)制數(shù)據(jù)从藤。最多 2GB。
Number 類型:
數(shù)據(jù)類型 描述 存儲
tinyint 允許從 0 到 255 的所有數(shù)字锁蠕。 1 字節(jié)
smallint 允許從 -32,768 到 32,767 的所有數(shù)字夷野。 2 字節(jié)
int 允許從 -2,147,483,648 到 2,147,483,647 的所有數(shù)字。 4 字節(jié)
bigint 允許介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之間的所有數(shù)字荣倾。 8 字節(jié)
decimal(p,s) 固定精度和比例的數(shù)字悯搔。允許從 -10^38 +1 到 10^38 -1 之間的數(shù)字。p 參數(shù)指示可以存儲的最大位數(shù)(小數(shù)點(diǎn)左側(cè)和右側(cè))舌仍。p 必須是 1 到 38 之間的值妒貌。默認(rèn)是 18。s 參數(shù)指示小數(shù)點(diǎn)右側(cè)存儲的最大位數(shù)铸豁。s 必須是 0 到 p 之間的值灌曙。默認(rèn)是 0。 5-17 字節(jié)
numeric(p,s) 固定精度和比例的數(shù)字节芥。允許從 -10^38 +1 到 10^38 -1 之間的數(shù)字在刺。p 參數(shù)指示可以存儲的最大位數(shù)(小數(shù)點(diǎn)左側(cè)和右側(cè))逆害。p 必須是 1 到 38 之間的值。默認(rèn)是 18蚣驼。s 參數(shù)指示小數(shù)點(diǎn)右側(cè)存儲的最大位數(shù)魄幕。s 必須是 0 到 p 之間的值。默認(rèn)是 0颖杏。 5-17 字節(jié)
smallmoney 介于 -214,748.3648 和 214,748.3647 之間的貨幣數(shù)據(jù)纯陨。 4 字節(jié)
money 介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之間的貨幣數(shù)據(jù)。 8 字節(jié)
float(n) 從 -1.79E + 308 到 1.79E + 308 的浮動精度數(shù)字?jǐn)?shù)據(jù)输玷。 參數(shù) n 指示該字段保存 4 字節(jié)還是 8 字節(jié)队丝。float(24) 保存 4 字節(jié),而 float(53) 保存 8 字節(jié)欲鹏。n 的默認(rèn)值是 53机久。 4 或 8 字節(jié)
real 從 -3.40E + 38 到 3.40E + 38 的浮動精度數(shù)字?jǐn)?shù)據(jù)。 4 字節(jié)
Date 類型:
數(shù)據(jù)類型 描述 存儲
datetime 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日赔嚎,精度為 3.33 毫秒膘盖。 8 bytes
datetime2 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度為 100 納秒尤误。 6-8 bytes
smalldatetime 從 1900 年 1 月 1 日 到 2079 年 6 月 6 日侠畔,精度為 1 分鐘。 4 bytes
date 僅存儲日期损晤。從 0001 年 1 月 1 日 到 9999 年 12 月 31 日软棺。 3 bytes
time 僅存儲時間。精度為 100 納秒尤勋。 3-5 bytes
datetimeoffset 與 datetime2 相同喘落,外加時區(qū)偏移。 8-10 bytes
timestamp 存儲唯一的數(shù)字最冰,每當(dāng)創(chuàng)建或修改某行時瘦棋,該數(shù)字會更新。timestamp 基于內(nèi)部時鐘暖哨,不對應(yīng)真實(shí)時間赌朋。每個表只能有一個 timestamp 變量。
其他數(shù)據(jù)類型:
數(shù)據(jù)類型 描述
sql_variant 存儲最多 8,000 字節(jié)不同數(shù)據(jù)類型的數(shù)據(jù)篇裁,除了 text沛慢、ntext 以及 timestamp。
uniqueidentifier 存儲全局標(biāo)識符 (GUID)达布。
xml 存儲 XML 格式化數(shù)據(jù)团甲。最多 2GB。
cursor 存儲對用于數(shù)據(jù)庫操作的指針的引用往枣。
table 存儲結(jié)果集伐庭,供稍后處理。
MySQL 也擁有類似 ISNULL() 的函數(shù)分冈。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同圾另。
在 MySQL 中,我們可以使用 IFNULL() 函數(shù)雕沉,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)集乔,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL 服務(wù)器 - RDBMS
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同坡椒。
在 MySQL 中扰路,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)倔叼,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
現(xiàn)代的 SQL 服務(wù)器構(gòu)建在 RDBMS 之上汗唱。
DBMS - 數(shù)據(jù)庫管理系統(tǒng)(Database Management System)
數(shù)據(jù)庫管理系統(tǒng)是一種可以訪問數(shù)據(jù)庫中數(shù)據(jù)的計算機(jī)程序。
DBMS 使我們有能力在數(shù)據(jù)庫中提取丈攒、修改或者存貯信息哩罪。
不同的 DBMS 提供不同的函數(shù)供查詢、提交以及修改數(shù)據(jù)巡验。
RDBMS - 關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System)
關(guān)系數(shù)據(jù)庫管理系統(tǒng) (RDBMS) 也是一種數(shù)據(jù)庫管理系統(tǒng)际插,其數(shù)據(jù)庫是根據(jù)數(shù)據(jù)間的關(guān)系來組織和訪問數(shù)據(jù)的。
20 世紀(jì) 70 年代初显设,IBM 公司發(fā)明了 RDBMS框弛。
RDBMS 是 SQL 的基礎(chǔ),也是所有現(xiàn)代數(shù)據(jù)庫系統(tǒng)諸如 Oracle捕捂、SQL Server瑟枫、IBM DB2、Sybase绞蹦、MySQL 以及 Microsoft Access 的基礎(chǔ)力奋。
?
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同幽七。
在 MySQL 中景殷,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)澡屡,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL 函數(shù)
MySQL 也擁有類似 ISNULL() 的函數(shù)猿挚。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中驶鹉,我們可以使用 IFNULL() 函數(shù)绩蜻,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL 擁有很多可用于計數(shù)和計算的內(nèi)建函數(shù)室埋。
函數(shù)的語法
內(nèi)建 SQL 函數(shù)的語法是:
SELECT function(列) FROM 表
函數(shù)的類型
在 SQL 中办绝,基本的函數(shù)類型和種類有若干種伊约。函數(shù)的基本類型是:
Aggregate 函數(shù)
Scalar 函數(shù)
合計函數(shù)(Aggregate functions)
Aggregate 函數(shù)的操作面向一系列的值,并返回一個單一的值孕蝉。
注釋:如果在 SELECT 語句的項目列表中的眾多其它表達(dá)式中使用 SELECT 語句屡律,則這個 SELECT 必須使用 GROUP BY 語句!
"Persons" table (在大部分的例子中使用過)
Name Age
Adams, John 38
Bush, George 33
Carter, Thomas 28
MS Access 中的合計函數(shù)
函數(shù) 描述
AVG(column) 返回某列的平均值
COUNT(column) 返回某列的行數(shù)(不包括 NULL 值)
COUNT(*) 返回被選行數(shù)
FIRST(column) 返回在指定的域中第一個記錄的值
LAST(column) 返回在指定的域中最后一個記錄的值
MAX(column) 返回某列的最高值
MIN(column) 返回某列的最低值
STDEV(column)
STDEVP(column)
SUM(column) 返回某列的總和
VAR(column)
VARP(column)
在 SQL Server 中的合計函數(shù)
函數(shù) 描述
AVG(column) 返回某列的平均值
BINARY_CHECKSUM
CHECKSUM
CHECKSUM_AGG
COUNT(column) 返回某列的行數(shù)(不包括NULL值)
COUNT(*) 返回被選行數(shù)
COUNT(DISTINCT column) 返回相異結(jié)果的數(shù)目
FIRST(column) 返回在指定的域中第一個記錄的值(SQLServer2000 不支持)
LAST(column) 返回在指定的域中最后一個記錄的值(SQLServer2000 不支持)
MAX(column) 返回某列的最高值
MIN(column) 返回某列的最低值
STDEV(column)
STDEVP(column)
SUM(column) 返回某列的總和
VAR(column)
VARP(column)
Scalar 函數(shù)
Scalar 函數(shù)的操作面向某個單一的值降淮,并返回基于輸入值的一個單一的值超埋。
MS Access 中的 Scalar 函數(shù)
函數(shù) 描述
UCASE(c) 將某個域轉(zhuǎn)換為大寫
LCASE(c) 將某個域轉(zhuǎn)換為小寫
MID(c,start[,end]) 從某個文本域提取字符
LEN(c) 返回某個文本域的長度
INSTR(c,char) 返回在某個文本域中指定字符的數(shù)值位置
LEFT(c,number_of_char) 返回某個被請求的文本域的左側(cè)部分
RIGHT(c,number_of_char) 返回某個被請求的文本域的右側(cè)部分
ROUND(c,decimals) 對某個數(shù)值域進(jìn)行指定小數(shù)位數(shù)的四舍五入
MOD(x,y) 返回除法操作的余數(shù)
NOW() 返回當(dāng)前的系統(tǒng)日期
FORMAT(c,format) 改變某個域的顯示方式
DATEDIFF(d,date1,date2) 用于執(zhí)行日期計算
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同佳鳖。
在 MySQL 中霍殴,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)系吩,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL AVG
MySQL 也擁有類似 ISNULL() 的函數(shù)来庭。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中穿挨,我們可以使用 IFNULL() 函數(shù)巾腕,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
定義和用法
AVG 函數(shù)返回數(shù)值列的平均值絮蒿。NULL 值不包括在計算中尊搬。
SQL AVG() 語法
SELECT AVG(column_name) FROM table_name
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同土涝。
在 MySQL 中佛寿,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)但壮,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL COUNT()
MySQL 也擁有類似 ISNULL() 的函數(shù)冀泻。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中蜡饵,我們可以使用 IFNULL() 函數(shù)弹渔,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
COUNT() 函數(shù)返回匹配指定條件的行數(shù)溯祸。
SQL COUNT() 語法
SQL COUNT(column_name) 語法
COUNT(column_name) 函數(shù)返回指定列的值的數(shù)目(NULL 不計入):
SELECT COUNT(column_name) FROM table_name
SQL COUNT(*) 語法
COUNT(*) 函數(shù)返回表中的記錄數(shù):
SELECT COUNT(*) FROM table_name
SQL COUNT(DISTINCT column_name) 語法
COUNT(DISTINCT column_name) 函數(shù)返回指定列的不同值的數(shù)目:
SELECT COUNT(DISTINCT column_name) FROM table_name
注釋:COUNT(DISTINCT) 適用于 ORACLE 和 Microsoft SQL Server肢专,但是無法用于 Microsoft Access。
MySQL 也擁有類似 ISNULL() 的函數(shù)焦辅。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同博杖。
在 MySQL 中,我們可以使用 IFNULL() 函數(shù)筷登,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)剃根,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL FIRST()
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同前方。
在 MySQL 中狈醉,我們可以使用 IFNULL() 函數(shù)廉油,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
FIRST() 函數(shù)
FIRST() 函數(shù)返回指定的字段中第一個記錄的值苗傅。
提示:可使用 ORDER BY 語句對記錄進(jìn)行排序娱两。
SQL FIRST() 語法
SELECT FIRST(column_name) FROM table_name
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同金吗。
在 MySQL 中,我們可以使用 IFNULL() 函數(shù)趣竣,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)摇庙,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL LAST()
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同遥缕。
在 MySQL 中卫袒,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)单匣,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
LAST() 函數(shù)
LAST() 函數(shù)返回指定的字段中最后一個記錄的值夕凝。
提示:可使用 ORDER BY 語句對記錄進(jìn)行排序。
SQL LAST() 語法
SELECT LAST(column_name) FROM table_name
MySQL 也擁有類似 ISNULL() 的函數(shù)户秤。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同码秉。
在 MySQL 中,我們可以使用 IFNULL() 函數(shù)鸡号,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)转砖,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL MAX()
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同鲸伴。
在 MySQL 中府蔗,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)汞窗,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
MAX() 函數(shù)
MAX 函數(shù)返回一列中的最大值姓赤。NULL 值不包括在計算中。
SQL MAX() 語法
SELECT MAX(column_name) FROM table_name
注釋:MIN 和 MAX 也可用于文本列仲吏,以獲得按字母順序排列的最高或最低值不铆。
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同裹唆。
在 MySQL 中狂男,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)品腹,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL MIN()
MySQL 也擁有類似 ISNULL() 的函數(shù)岖食。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中舞吭,我們可以使用 IFNULL() 函數(shù)泡垃,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)析珊,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
MIN() 函數(shù)
MIN 函數(shù)返回一列中的最小值。NULL 值不包括在計算中蔑穴。
SQL MIN() 語法
SELECT MIN(column_name) FROM table_name
注釋:MIN 和 MAX 也可用于文本列忠寻,以獲得按字母順序排列的最高或最低值。
MySQL 也擁有類似 ISNULL() 的函數(shù)存和。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同奕剃。
在 MySQL 中,我們可以使用 IFNULL() 函數(shù)捐腿,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)贸辈,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL SUM()
MySQL 也擁有類似 ISNULL() 的函數(shù)士八。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同唯蝶。
在 MySQL 中雏胃,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)宪祥,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SUM() 函數(shù)
SUM 函數(shù)返回數(shù)值列的總數(shù)(總額)聂薪。
SQL SUM() 語法
SELECT SUM(column_name) FROM table_name
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同蝗羊。
在 MySQL 中藏澳,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)耀找,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL GROUP BY
MySQL 也擁有類似 ISNULL() 的函數(shù)笆载。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中涯呻,我們可以使用 IFNULL() 函數(shù)凉驻,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
合計函數(shù) (比如 SUM) 常常需要添加 GROUP BY 語句复罐。
GROUP BY 語句
GROUP BY 語句用于結(jié)合合計函數(shù)涝登,根據(jù)一個或多個列對結(jié)果集進(jìn)行分組。
SQL GROUP BY 語法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
MySQL 也擁有類似 ISNULL() 的函數(shù)效诅。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同胀滚。
在 MySQL 中,我們可以使用 IFNULL() 函數(shù)乱投,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)咽笼,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL HAVING
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同戚炫。
在 MySQL 中剑刑,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
HAVING 子句
在 SQL 中增加 HAVING 子句原因是施掏,WHERE 關(guān)鍵字無法與合計函數(shù)一起使用钮惠。
SQL HAVING 語法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同七芭。
在 MySQL 中素挽,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)狸驳,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL UCASE()
MySQL 也擁有類似 ISNULL() 的函數(shù)预明。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中耙箍,我們可以使用 IFNULL() 函數(shù)撰糠,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
UCASE() 函數(shù)
UCASE 函數(shù)把字段的值轉(zhuǎn)換為大寫究西。
SQL UCASE() 語法
SELECT UCASE(column_name) FROM table_name
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同物喷。
在 MySQL 中卤材,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)峦失,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL LCASE()
MySQL 也擁有類似 ISNULL() 的函數(shù)扇丛。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中尉辑,我們可以使用 IFNULL() 函數(shù)帆精,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
LCASE() 函數(shù)
LCASE 函數(shù)把字段的值轉(zhuǎn)換為小寫隧魄。
SQL LCASE() 語法
SELECT LCASE(column_name) FROM table_name
MySQL 也擁有類似 ISNULL() 的函數(shù)卓练。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中购啄,我們可以使用 IFNULL() 函數(shù)襟企,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL MID()
MySQL 也擁有類似 ISNULL() 的函數(shù)狮含。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同顽悼。
在 MySQL 中,我們可以使用 IFNULL() 函數(shù)几迄,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)蔚龙,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
MID() 函數(shù)
MID 函數(shù)用于從文本字段中提取字符。
SQL MID() 語法
SELECT MID(column_name,start[,length]) FROM table_name
參數(shù) 描述
column_name 必需映胁。要提取字符的字段木羹。
start 必需。規(guī)定開始位置(起始值是 1)解孙。
length 可選汇跨。要返回的字符數(shù)务荆。如果省略,則 MID() 函數(shù)返回剩余文本穷遂。
MySQL 也擁有類似 ISNULL() 的函數(shù)函匕。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中蚪黑,我們可以使用 IFNULL() 函數(shù)盅惜,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL LEN()
MySQL 也擁有類似 ISNULL() 的函數(shù)忌穿。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同抒寂。
在 MySQL 中,我們可以使用 IFNULL() 函數(shù)掠剑,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)屈芜,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
LEN() 函數(shù)
LEN 函數(shù)返回文本字段中值的長度。
SQL LEN() 語法
SELECT LEN(column_name) FROM table_name
MySQL 也擁有類似 ISNULL() 的函數(shù)朴译。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同井佑。
在 MySQL 中,我們可以使用 IFNULL() 函數(shù)眠寿,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)躬翁,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL ROUND()
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同盯拱。
在 MySQL 中盒发,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)狡逢,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
ROUND() 函數(shù)
ROUND 函數(shù)用于把數(shù)值字段舍入為指定的小數(shù)位數(shù)宁舰。
SQL ROUND() 語法
SELECT ROUND(column_name,decimals) FROM table_name
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同奢浑。
在 MySQL 中明吩,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)殷费,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
SQL NOW()
MySQL 也擁有類似 ISNULL() 的函數(shù)印荔。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中详羡,我們可以使用 IFNULL() 函數(shù)仍律,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
NOW() 函數(shù)
NOW 函數(shù)返回當(dāng)前的日期和時間实柠。
提示:如果您在使用 Sql Server 數(shù)據(jù)庫水泉,請使用 getdate() 函數(shù)來獲得當(dāng)前的日期時間。
SQL NOW() 語法
SELECT NOW() FROM table_name
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同草则。
在 MySQL 中钢拧,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)炕横,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL FORMAT()
MySQL 也擁有類似 ISNULL() 的函數(shù)源内。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中份殿,我們可以使用 IFNULL() 函數(shù)膜钓,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
FORMAT() 函數(shù)
FORMAT 函數(shù)用于對字段的顯示進(jìn)行格式化卿嘲。
SQL FORMAT() 語法
SELECT FORMAT(column_name,format) FROM table_name
參數(shù) 描述
column_name 必需颂斜。要格式化的字段。
format 必需拾枣。規(guī)定格式沃疮。
MySQL 也擁有類似 ISNULL() 的函數(shù)。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同梅肤。
在 MySQL 中司蔬,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)凭语,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL 快速參考
MySQL 也擁有類似 ISNULL() 的函數(shù)葱她。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同撩扒。
在 MySQL 中似扔,我們可以使用 IFNULL() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù)搓谆,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?
SQL 語句
語句 語法
AND / OR SELECT column_name(s)FROM table_nameWHERE conditionAND\ OR condition
ALTER TABLE (add column) ALTER TABLE table_name ADD column_name datatype
ALTER TABLE (drop column) ALTER TABLE table_name DROP COLUMN column_name
AS (alias for column) SELECT column_name AS column_aliasFROM table_name
AS (alias for table) SELECT column_nameFROM table_name AS table_alias
BETWEEN SELECT column_name(s)FROM table_nameWHERE column_nameBETWEEN value1 AND value2
CREATE DATABASE CREATE DATABASE database_name
CREATE INDEX CREATE INDEX index_nameON table_name (column_name)
CREATE TABLE CREATE TABLE table_name(column_name1 data_type,column_name2 data_type,.......)
CREATE UNIQUE INDEX CREATE UNIQUE INDEX index_nameON table_name (column_name)
CREATE VIEW CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition
DELETE FROM DELETE FROM table_name (Note: Deletes the entire table!!)orDELETE FROM table_nameWHERE condition
DROP DATABASE DROP DATABASE database_name
DROP INDEX DROP INDEX table_name.index_name
DROP TABLE DROP TABLE table_name
GROUP BY SELECT column_name1,SUM(column_name2)FROM table_nameGROUP BY column_name1
HAVING SELECT column_name1,SUM(column_name2)FROM table_nameGROUP BY column_name1HAVING SUM(column_name2) condition value
IN SELECT column_name(s)FROM table_nameWHERE column_nameIN (value1,value2,..)
INSERT INTO INSERT INTO table_nameVALUES (value1, value2,....)orINSERT INTO table_name(column_name1, column_name2,...)VALUES (value1, value2,....)
LIKE SELECT column_name(s)FROM table_nameWHERE column_nameLIKE pattern
ORDER BY SELECT column_name(s)FROM table_nameORDER BY column_name [ASC\ DESC]
SELECT SELECT column_name(s)FROM table_name
SELECT * SELECT *FROM table_name
SELECT DISTINCT SELECT DISTINCT column_name(s)FROM table_name
SELECT INTO(used to create backup copies of tables) SELECT *INTO new_table_nameFROM original_table_nameorSELECT column_name(s)INTO new_table_nameFROM original_table_name
TRUNCATE TABLE(deletes only the data inside the table) TRUNCATE TABLE table_name
UPDATE UPDATE table_nameSET column_name=new_value[, column_name=new_value]WHERE column_name=some_value
WHERE SELECT column_name(s)FROM table_nameWHERE condition
MySQL 也擁有類似 ISNULL() 的函數(shù)炒辉。不過它的工作方式與微軟的 ISNULL() 函數(shù)有點(diǎn)不同。
在 MySQL 中泉手,我們可以使用 IFNULL() 函數(shù)黔寇,就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
或者我們可以使用 COALESCE() 函數(shù),就像這樣:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products