一個(gè)程序員的成長過程 2017-12-15 14:08:06
在本教程中,,您將學(xué)到如何使用 SQL 訪問和處理數(shù)據(jù)系統(tǒng)中的數(shù)據(jù),,這類數(shù)據(jù)庫包括:Oracle, Sybase, SQL Server, DB2, Access 等等。 SQL 簡介什么是 SQL,?
編者注:ANSI,,美國國家標(biāo)準(zhǔn)化組織 SQL 能做什么?
SQL 是一種標(biāo)準(zhǔn) - 但是... SQL 是一門 ANSI 的標(biāo)準(zhǔn)計(jì)算機(jī)語言,,用來訪問和操作數(shù)據(jù)庫系統(tǒng)。SQL 語句用于取回和更新數(shù)據(jù)庫中的數(shù)據(jù),。SQL 可與數(shù)據(jù)庫程序協(xié)同工作,,比如 MS Access、DB2,、Informix,、MS SQL Server、Oracle,、Sybase 以及其他數(shù)據(jù)庫系統(tǒng),。 不幸地是,存在著很多不同版本的 SQL 語言,,但是為了與 ANSI 標(biāo)準(zhǔn)相兼容,,它們必須以相似的方式共同地來支持一些主要的關(guān)鍵詞(比如 SELECT,、UPDATE、DELETE,、INSERT,、WHERE 等等)。 注釋:除了 SQL 標(biāo)準(zhǔn)之外,,大部分 SQL 數(shù)據(jù)庫程序都擁有它們自己的私有擴(kuò)展,! 在您的網(wǎng)站中使用 SQL 要?jiǎng)?chuàng)建發(fā)布數(shù)據(jù)庫中數(shù)據(jù)的網(wǎng)站,您需要以下要素:
RDBMS RDBMS 指的是關(guān)系型數(shù)據(jù)庫管理系統(tǒng),。 RDBMS 是 SQL 的基礎(chǔ),,同樣也是所有現(xiàn)代數(shù)據(jù)庫系統(tǒng)的基礎(chǔ),比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access,。 RDBMS 中的數(shù)據(jù)存儲(chǔ)在被稱為表(tables)的數(shù)據(jù)庫對象中,。 表是相關(guān)的數(shù)據(jù)項(xiàng)的集合,它由列和行組成,。 SQL 語法數(shù)據(jù)庫表 一個(gè)數(shù)據(jù)庫通常包含一個(gè)或多個(gè)表,。每個(gè)表由一個(gè)名字標(biāo)識(shí)(例如“客戶”或者“訂單”)。表包含帶有數(shù)據(jù)的記錄(行),。 下面的例子是一個(gè)名為 "Persons" 的表:
上面的表包含三條記錄(每一條對應(yīng)一個(gè)人)和五個(gè)列(Id,、姓、名,、地址和城市),。 SQL 語句 您需要在數(shù)據(jù)庫上執(zhí)行的大部分工作都由 SQL 語句完成。 下面的語句從表中選取 LastName 列的數(shù)據(jù): SELECT LastName FROM Persons 結(jié)果集類似這樣:
在本教程中,,我們將為您講解各種不同的 SQL 語句,。 重要事項(xiàng) 一定要記住,SQL 對大小寫不敏感,! SQL 語句后面的分號(hào),? 某些數(shù)據(jù)庫系統(tǒng)要求在每條 SQL 命令的末端使用分號(hào)。在我們的教程中不使用分號(hào),。 分號(hào)是在數(shù)據(jù)庫系統(tǒng)中分隔每條 SQL 語句的標(biāo)準(zhǔn)方法,,這樣就可以在對服務(wù)器的相同請求中執(zhí)行一條以上的語句。 如果您使用的是 MS Access 和 SQL Server 2000,,則不必在每條 SQL 語句之后使用分號(hào),,不過某些數(shù)據(jù)庫軟件要求必須使用分號(hào)。 SQL DML 和 DDL 可以把 SQL 分為兩個(gè)部分:數(shù)據(jù)操作語言 (DML) 和 數(shù)據(jù)定義語言 (DDL),。 SQL (結(jié)構(gòu)化查詢語言)是用于執(zhí)行查詢的語法,。但是 SQL 語言也包含用于更新、插入和刪除記錄的語法,。 查詢和更新指令構(gòu)成了 SQL 的 DML 部分:
SQL 的數(shù)據(jù)定義語言 (DDL) 部分使我們有能力創(chuàng)建或刪除表格,。我們也可以定義索引(鍵),,規(guī)定表之間的鏈接,以及施加表間的約束,。 SQL 中最重要的 DDL 語句:
SQL SELECT 語句本章講解 SELECT 和 SELECT * 語句,。 SQL SELECT 語句 SELECT 語句用于從表中選取數(shù)據(jù)。 結(jié)果被存儲(chǔ)在一個(gè)結(jié)果表中(稱為結(jié)果集),。 SQL SELECT 語法 SELECT 列名稱 FROM 表名稱 以及: SELECT * FROM 表名稱 注釋:SQL 語句對大小寫不敏感,。SELECT 等效于 select。 SQL SELECT 實(shí)例 如需獲取名為 "LastName" 和 "FirstName" 的列的內(nèi)容(從名為 "Persons" 的數(shù)據(jù)庫表),,請使用類似這樣的 SELECT 語句: SELECT LastName,FirstName FROM Persons "Persons" 表:
結(jié)果:
SQL SELECT * 實(shí)例 現(xiàn)在我們希望從 "Persons" 表中選取所有的列,。 請使用符號(hào) * 取代列的名稱,就像這樣: SELECT * FROM Persons 提示:星號(hào)(*)是選取所有列的快捷方式,。 結(jié)果:
在結(jié)果集(result-set)中導(dǎo)航 由 SQL 查詢程序獲得的結(jié)果被存放在一個(gè)結(jié)果集中,。大多數(shù)數(shù)據(jù)庫軟件系統(tǒng)都允許使用編程函數(shù)在結(jié)果集中進(jìn)行導(dǎo)航,比如:Move-To-First-Record,、Get-Record-Content、Move-To-Next-Record 等等,。 SQL SELECT DISTINCT 語句本章講解 SELECT DISTINCT 語句,。 SQL SELECT DISTINCT 語句 在表中,可能會(huì)包含重復(fù)值,。這并不成問題,,不過,有時(shí)您也許希望僅僅列出不同(distinct)的值,。 關(guān)鍵詞 DISTINCT 用于返回唯一不同的值,。 語法: SELECT DISTINCT 列名稱 FROM 表名稱 使用 DISTINCT 關(guān)鍵詞 如果要從 "Company" 列中選取所有的值,我們需要使用 SELECT 語句: SELECT Company FROM Orders "Orders"表:
結(jié)果:
請注意,,在結(jié)果集中,,W3School 被列出了兩次。 如需從 Company" 列中僅選取唯一不同的值,,我們需要使用 SELECT DISTINCT 語句: SELECT DISTINCT Company FROM Orders 結(jié)果:
現(xiàn)在,,在結(jié)果集中,"W3School" 僅被列出了一次,。 SQL WHERE 子句WHERE 子句用于規(guī)定選擇的標(biāo)準(zhǔn),。 WHERE 子句 如需有條件地從表中選取數(shù)據(jù),可將 WHERE 子句添加到 SELECT 語句,。 語法 SELECT 列名稱 FROM 表名稱 WHERE 列 運(yùn)算符 值 下面的運(yùn)算符可在 WHERE 子句中使用:
注釋:在某些版本的 SQL 中,,操作符 <> 可以寫為 !=。 使用 WHERE 子句 如果只希望選取居住在城市 "Beijing" 中的人,,我們需要向 SELECT 語句添加 WHERE 子句: SELECT * FROM Persons WHERE City='Beijing' "Persons" 表
結(jié)果:
引號(hào)的使用 請注意,,我們在例子中的條件值周圍使用的是單引號(hào),。 SQL 使用單引號(hào)來環(huán)繞文本值(大部分?jǐn)?shù)據(jù)庫系統(tǒng)也接受雙引號(hào))。如果是數(shù)值,,請不要使用引號(hào),。 文本值: 這是正確的:SELECT * FROM Persons WHERE FirstName='Bush'這是錯(cuò)誤的:SELECT * FROM Persons WHERE FirstName=Bush 數(shù)值: 這是正確的:SELECT * FROM Persons WHERE Year>1965這是錯(cuò)誤的:SELECT * FROM Persons WHERE Year>'1965' SQL AND & OR 運(yùn)算符AND 和 OR 運(yùn)算符用于基于一個(gè)以上的條件對記錄進(jìn)行過濾。 AND 和 OR 運(yùn)算符 AND 和 OR 可在 WHERE 子語句中把兩個(gè)或多個(gè)條件結(jié)合起來,。 如果第一個(gè)條件和第二個(gè)條件都成立,,則 AND 運(yùn)算符顯示一條記錄。 如果第一個(gè)條件和第二個(gè)條件中只要有一個(gè)成立,,則 OR 運(yùn)算符顯示一條記錄,。 原始的表 (用在例子中的):
AND 運(yùn)算符實(shí)例 使用 AND 來顯示所有姓為 "Carter" 并且名為 "Thomas" 的人: SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter' 結(jié)果:
OR 運(yùn)算符實(shí)例 使用 OR 來顯示所有姓為 "Carter" 或者名為 "Thomas" 的人: SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter' 結(jié)果:
結(jié)合 AND 和 OR 運(yùn)算符 我們也可以把 AND 和 OR 結(jié)合起來(使用圓括號(hào)來組成復(fù)雜的表達(dá)式): SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')AND LastName='Carter' 結(jié)果:
SQL ORDER BY 子句ORDER BY 語句用于對結(jié)果集進(jìn)行排序。 ORDER BY 語句 ORDER BY 語句用于根據(jù)指定的列對結(jié)果集進(jìn)行排序,。 ORDER BY 語句默認(rèn)按照升序?qū)τ涗涍M(jìn)行排序,。 如果您希望按照降序?qū)τ涗涍M(jìn)行排序,可以使用 DESC 關(guān)鍵字,。 原始的表 (用在例子中的): Orders 表:
實(shí)例 1 以字母順序顯示公司名稱: SELECT Company, OrderNumber FROM Orders ORDER BY Company 結(jié)果:
實(shí)例 2 以字母順序顯示公司名稱(Company),,并以數(shù)字順序顯示順序號(hào)(OrderNumber): SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber 結(jié)果:
實(shí)例 3 以逆字母順序顯示公司名稱: SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC 結(jié)果:
實(shí)例 4 以逆字母順序顯示公司名稱,并以數(shù)字順序顯示順序號(hào): SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC 結(jié)果:
注意:在以上的結(jié)果中有兩個(gè)相等的公司名稱 (W3School),。只有這一次,,在第一列中有相同的值時(shí),第二列是以升序排列的,。如果第一列中有些值為 nulls 時(shí),,情況也是這樣的。 SQL INSERT INTO 語句INSERT INTO 語句 INSERT INTO 語句用于向表格中插入新的行,。 語法 INSERT INTO 表名稱 VALUES (值1, 值2,....) 我們也可以指定所要插入數(shù)據(jù)的列: INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) 插入新的行 "Persons" 表:
SQL 語句: INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing') 結(jié)果:
在指定的列中插入數(shù)據(jù) "Persons" 表:
SQL 語句: INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees') 結(jié)果:
SQL UPDATE 語句Update 語句 Update 語句用于修改表中的數(shù)據(jù),。 語法: UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值 Person:
更新某一行中的一個(gè)列 我們?yōu)?lastname 是 "Wilson" 的人添加 firstname: UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 結(jié)果:
更新某一行中的若干列 我們會(huì)修改地址(address),并添加城市名稱(city): UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'WHERE LastName = 'Wilson' 結(jié)果:
SQL DELETE 語句DELETE 語句 DELETE 語句用于刪除表中的行,。 語法 DELETE FROM 表名稱 WHERE 列名稱 = 值 Person:
刪除某行 "Fred Wilson" 會(huì)被刪除: DELETE FROM Person WHERE LastName = 'Wilson' 結(jié)果:
刪除所有行 可以在不刪除表的情況下刪除所有的行,。這意味著表的結(jié)構(gòu)、屬性和索引都是完整的: DELETE FROM table_name 或者: DELETE * FROM table_name |
|