- 相關(guān)推薦
關(guān)于SQL學(xué)習(xí)教程
篇一:SQL學(xué)習(xí)教程
SQL 簡(jiǎn)介SQL 是用于訪問(wèn)和處理數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)的計(jì)算機(jī)語(yǔ)言。什么是 SQL?? SQL 指結(jié)構(gòu)化查詢(xún)語(yǔ)言 ? SQL 使我們有能力訪問(wèn)數(shù)據(jù)庫(kù) ? SQL 是一種 ANSI 的標(biāo)準(zhǔn)計(jì)算機(jī)語(yǔ)言編者注:ANSI,美國(guó)國(guó)家標(biāo)準(zhǔn)化組織SQL 能做什么?? SQL 面向數(shù)據(jù)庫(kù)執(zhí)行查詢(xún) ? SQL 可從數(shù)據(jù)庫(kù)取回?cái)?shù)據(jù) ? SQL 可在數(shù)據(jù)庫(kù)中插入新的紀(jì)錄 ? SQL 可更新數(shù)據(jù)庫(kù)中的數(shù)據(jù) ? SQL 可從數(shù)據(jù)庫(kù)刪除記錄 ? SQL 可創(chuàng)建新數(shù)據(jù)庫(kù) ? SQL 可在數(shù)據(jù)庫(kù)中創(chuàng)建新表 ? SQL 可在數(shù)據(jù)庫(kù)中創(chuàng)建存儲(chǔ)過(guò)程 ? SQL 可在數(shù)據(jù)庫(kù)中創(chuàng)建視圖 ? SQL 可以設(shè)置表、存儲(chǔ)過(guò)程和視圖的權(quán)限SQL 是一種標(biāo)準(zhǔn) - 但是...SQL 是一門(mén) ANSI 的標(biāo)準(zhǔn)計(jì)算機(jī)語(yǔ)言, 用來(lái)訪問(wèn)和操作數(shù)據(jù)庫(kù)系統(tǒng)。 SQL 語(yǔ)句用于取回和更新數(shù)據(jù)庫(kù)中 的數(shù)據(jù)。 SQL 可與數(shù)據(jù)庫(kù)程序協(xié)同工作, 比如 MS Access、 DB2、 Informix、 MS SQL Server、 Oracle、 Sybase 以及其他數(shù)據(jù)庫(kù)系統(tǒng)。 不幸地是,存在著很多不同版本的 SQL 語(yǔ)言,但是為了與 ANSI 標(biāo)準(zhǔn)相兼容,它們必須以相似的方式共 同地來(lái)支持一些主要的關(guān)鍵詞(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。 注釋?zhuān)撼?SQL 標(biāo)準(zhǔn)之外,大部分 SQL 數(shù)據(jù)庫(kù)程序都擁有它們自己的私有擴(kuò)展!在您的網(wǎng)站中使用 SQL要?jiǎng)?chuàng)建發(fā)布數(shù)據(jù)庫(kù)中數(shù)據(jù)的網(wǎng)站,您需要以下要素:? RDBMS 數(shù)據(jù)庫(kù)程序(比如 MS Access, SQL Server, MySQL) ? 服務(wù)器端腳本語(yǔ)言(比如 PHP 或 ASP) ? SQL ? HTML / CSSRDBMS
RDBMS 指的是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。 RDBMS 是 SQL 的基礎(chǔ),同樣也是所有現(xiàn)代數(shù)據(jù)庫(kù)系統(tǒng)的基礎(chǔ),比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access。 RDBMS 中的數(shù)據(jù)存儲(chǔ)在被稱(chēng)為表(tables)的數(shù)據(jù)庫(kù)對(duì)象中。表是相關(guān)的數(shù)據(jù)項(xiàng)的集合,它由列和行組成。SQL 語(yǔ)法數(shù)據(jù)庫(kù)表一個(gè)數(shù)據(jù)庫(kù)通常包含一個(gè)或多個(gè)表。每個(gè)表由一個(gè)名字標(biāo)識(shí)(例如“客戶”或者“訂單”)。表包含帶有數(shù)據(jù) 的記錄(行)。 下面的例子是一個(gè)名為 "Persons" 的表:IdLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing上面的表包含三條記錄(每一條對(duì)應(yīng)一個(gè)人)和五個(gè)列(Id、姓、名、地址和城市)。SQL 語(yǔ)句您需要在數(shù)據(jù)庫(kù)上執(zhí)行的大部分工作都由 SQL 語(yǔ)句完成。 下面的語(yǔ)句從表中選取 LastName 列的數(shù)據(jù):SELECT LastName FROM Persons結(jié)果集類(lèi)似這樣:LastNameAdamsBush
Carter 在本教程中,我們將為您講解各種不同的 SQL 語(yǔ)句。重要事項(xiàng)一定要記住,SQL 對(duì)大小寫(xiě)不敏感!SQL 語(yǔ)句后面的分號(hào)?某些數(shù)據(jù)庫(kù)系統(tǒng)要求在每條 SQL 命令的末端使用分號(hào)。在我們的教程中不使用分號(hào)。 分號(hào)是在數(shù)據(jù)庫(kù)系統(tǒng)中分隔每條 SQL 語(yǔ)句的標(biāo)準(zhǔn)方法,這樣就可以在對(duì)服務(wù)器的相同請(qǐng)求中執(zhí)行一條以 上的語(yǔ)句。 如果您使用的是 MS Access 和 SQL Server 2000,則不必在每條 SQL 語(yǔ)句之后使用分號(hào),不過(guò)某些 數(shù)據(jù)庫(kù)軟件要求必須使用分號(hào)。SQL DML 和 DDL可以把 SQL 分為兩個(gè)部分:數(shù)據(jù)操作語(yǔ)言 (DML) 和 數(shù)據(jù)定義語(yǔ)言 (DDL)。 SQL (結(jié)構(gòu)化查詢(xún)語(yǔ)言)是用于執(zhí)行查詢(xún)的語(yǔ)法。 但是 SQL 語(yǔ)言也包含用于更新、 插入和刪除記錄的語(yǔ)法。 查詢(xún)和更新指令構(gòu)成了 SQL 的 DML 部分:? SELECT - 從數(shù)據(jù)庫(kù)表中獲取數(shù)據(jù) ? UPDATE - 更新數(shù)據(jù)庫(kù)表中的數(shù)據(jù) ? DELETE - 從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù) ? INSERT INTO - 向數(shù)據(jù)庫(kù)表中插入數(shù)據(jù)SQL 的數(shù)據(jù)定義語(yǔ)言 (DDL) 部分使我們有能力創(chuàng)建或刪除表格。我們也可以定義索引(鍵),規(guī)定表之 間的鏈接,以及施加表間的約束。 SQL 中最重要的 DDL 語(yǔ)句:? CREATE DATABASE - 創(chuàng)建新數(shù)據(jù)庫(kù) ? ALTER DATABASE - 修改數(shù)據(jù)庫(kù) ? CREATE TABLE - 創(chuàng)建新表 ? ALTER TABLE - 變更(改變)數(shù)據(jù)庫(kù)表 ? DROP TABLE - 刪除表 ? CREATE INDEX - 創(chuàng)建索引(搜索鍵) ? DROP INDEX - 刪除索引
SQL SELECT 語(yǔ)句SQL SELECT 語(yǔ)句SELECT 語(yǔ)句用于從表中選取數(shù)據(jù)。結(jié)果被存儲(chǔ)在一個(gè)結(jié)果表中(稱(chēng)為結(jié)果集)。SQL SELECT 語(yǔ)法 SELECT 列名稱(chēng) FROM 表名稱(chēng)以及:SELECT * FROM 表名稱(chēng)注釋?zhuān)篠QL 語(yǔ)句對(duì)大小寫(xiě)不敏感。SELECT 等效于 select。SQL SELECT 實(shí)例如需獲取名為 "LastName" 和 "FirstName" 的列的內(nèi)容(從名為 "Persons" 的數(shù)據(jù)庫(kù)表),請(qǐng)使用 類(lèi)似這樣的 SELECT 語(yǔ)句:SELECT LastName,FirstName FROM Persons"Persons" 表: Id LastName FirstName Address City1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing結(jié)果: LastName FirstNameAdamsJohnBushGeorge CarterThomasSQL SELECT * 實(shí)例現(xiàn)在我們希望從 "Persons" 表中選取所有的列。 請(qǐng)使用符號(hào) * 取代列的名稱(chēng),就像這樣:SELECT*FROM Persons提示:星號(hào)(*)是選取所有列的快捷方式。結(jié)果: Id LastName FirstName Address City1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing在結(jié)果集(result-set)中導(dǎo)航由 SQL 查詢(xún)程序獲得的結(jié)果被存放在一個(gè)結(jié)果集中。大多數(shù)數(shù)據(jù)庫(kù)軟件系統(tǒng)都允許使用編程函數(shù)在結(jié)果 集中進(jìn)行導(dǎo)航, 比如: Move-To-First-Record、 Get-Record-Content、 Move-To-Next-Record 等等。SQL SELECT DISTINCT 語(yǔ)句SQL SELECT DISTINCT 語(yǔ)句在表中,可能會(huì)包含重復(fù)值。這并不成問(wèn)題,不過(guò),有時(shí)您也許希望僅僅列出不同(distinct)的值。 關(guān)鍵詞 DISTINCT 用于返回唯一不同的值。語(yǔ)法:SELECT DISTINCT 列名稱(chēng) FROM 表名稱(chēng)使用 DISTINCT 關(guān)鍵詞如果要從 "Company" 列中選取所有的值,我們需要使用 SELECT 語(yǔ)句:SELECT Company FROM Orders
篇二:如何學(xué)習(xí)SQL
如何學(xué)習(xí)SQL
在論壇中不斷看到有新人問(wèn)一些基礎(chǔ)的問(wèn)題。于是抽空整理了本帖,希望對(duì)新人有所幫助。
本文無(wú)意取代任何一本數(shù)據(jù)庫(kù)或SQL的參考書(shū),主要是提供一點(diǎn)學(xué)習(xí)方向的指導(dǎo)和技術(shù)心得的分享。地圖和指南針并不能代替其它的野營(yíng)工具,經(jīng)驗(yàn)和心得也只能來(lái)自于親身走過(guò)的旅途。
本文主要以SQL Server 2005的T-SQL為示例,但原理并不局限于這一平臺(tái)。
由于全文過(guò)長(zhǎng),故拆分成四部分發(fā)帖:
Table of Content
第一部分:SQL基礎(chǔ)
1. 為什么學(xué)習(xí)SQL
2. 學(xué)習(xí)SQL的參考資料
3. 幾組基本概念
3.1. 單機(jī)數(shù)據(jù)庫(kù)與服務(wù)器級(jí)數(shù)據(jù)庫(kù)
3.2. 服務(wù)器(Server)與客戶端(Client)
3.3. 數(shù)據(jù)庫(kù)(DB)與數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)
3.4. SQL與SQL方言(dialect)
3.5. 語(yǔ)句、表達(dá)式和斷言
4. SQL不同于一般編程語(yǔ)言的地方
4.1. SQL操作的是數(shù)據(jù)
4.2. SQL是基于集合的說(shuō)明式語(yǔ)言
5. SQL的三個(gè)子集
第二部分:從關(guān)系角度理解SQL
6. 從關(guān)系角度理解SQL
6.1. 關(guān)系和表
6.2. 關(guān)系模型
6.3. 關(guān)系運(yùn)算
6.4. 數(shù)據(jù)查詢(xún) 6.5. 數(shù)據(jù)修改
6.6. 表的邏輯含義
第三部分:SQL數(shù)據(jù)類(lèi)型與三值邏輯
7. 數(shù)據(jù)類(lèi)型
8. NULL與三值邏輯
第四部分:DBMS擴(kuò)展功能與SQL高級(jí)話題
9. DBMS提供的擴(kuò)展功能
9.1. 控制流
9.2. 動(dòng)態(tài)語(yǔ)句
9.3. DBMS支持的數(shù)據(jù)庫(kù)對(duì)象
9.4. DBMS提供的系統(tǒng)函數(shù)、系統(tǒng)視圖和系統(tǒng)存儲(chǔ)過(guò)程
9.5. DBMS提供的工具
10. 高級(jí)話題
第一部分:SQL基礎(chǔ)
1. 為什么學(xué)習(xí)SQL
自人類(lèi)社會(huì)形成之日起,社會(huì)的運(yùn)轉(zhuǎn)就在不斷地產(chǎn)生和使用各種信息(文獻(xiàn)、檔案、資料、數(shù)據(jù)等);在如今所謂的信息時(shí)代,由于計(jì)算機(jī)和互聯(lián)網(wǎng)的作用,信息的產(chǎn)生和使用達(dá)到前所未有的廣度和深度。如何管好和用好信息,是(而且將一直是)IT行業(yè)一塊重要的領(lǐng)域。 在過(guò)去幾十年中,關(guān)系數(shù)據(jù)庫(kù)一直在這一領(lǐng)域占主導(dǎo)地位,而建立在關(guān)系理論基礎(chǔ)之上的SQL也成為數(shù)據(jù)庫(kù)領(lǐng)域的既定標(biāo)準(zhǔn)。
目前的數(shù)據(jù)存儲(chǔ)領(lǐng)域可稱(chēng)為三分天下:
a. 少量數(shù)據(jù)的存儲(chǔ):
自定義數(shù)據(jù)文件或通用數(shù)據(jù)文件(單機(jī)數(shù)據(jù)庫(kù)),通過(guò)自定義接口或通用API訪問(wèn)數(shù)據(jù)。如需要存儲(chǔ)數(shù)據(jù)的單機(jī)軟件或小型的動(dòng)態(tài)網(wǎng)站。
b. 對(duì)一致性要求高的大量數(shù)據(jù)的存儲(chǔ):
關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。如各種傳統(tǒng)的信息系統(tǒng)(ERP、CRM、HRMS、MIS等)。
c. 對(duì)并發(fā)性要求高的大量數(shù)據(jù)的存儲(chǔ):
NoSQL數(shù)據(jù)庫(kù)系統(tǒng)。如Web2.0網(wǎng)站的后臺(tái)數(shù)據(jù)系統(tǒng)。
以上,“狐假虎威”地借數(shù)據(jù)存儲(chǔ)的重要性來(lái)闡述了一番學(xué)習(xí)SQL的偉大意義。但重要的是,對(duì)SQL善于做什么和不善于做什么有個(gè)清楚的認(rèn)識(shí)。
2. 學(xué)習(xí)SQL的參考資料
不久前整理了數(shù)據(jù)庫(kù)圖書(shū)ABC一文,對(duì)數(shù)據(jù)庫(kù)相關(guān)的參考資料作了粗略的分類(lèi)。
對(duì)于初學(xué)者而言,可以結(jié)合著《數(shù)據(jù)庫(kù)系統(tǒng)概念(第5版)》一書(shū)和某個(gè)DBMS平臺(tái)的入門(mén)技術(shù)手冊(cè)練習(xí),自行尋找或構(gòu)思一個(gè)小需求,建一個(gè)數(shù)據(jù)庫(kù),創(chuàng)建幾個(gè)表和視圖,練習(xí)寫(xiě)查詢(xún)和修改語(yǔ)句;A(chǔ)理論和技術(shù)實(shí)踐可以相互促進(jìn)。
3. 幾組基本概念
3.1. 單機(jī)數(shù)據(jù)庫(kù)與服務(wù)器級(jí)數(shù)據(jù)庫(kù)
單機(jī)數(shù)據(jù)庫(kù)(如sqlite、Access等,Excel也勉強(qiáng)可以算是)是應(yīng)用于單個(gè)計(jì)算機(jī)的數(shù)據(jù)庫(kù)引擎,通常不具備網(wǎng)絡(luò)連接功能,適用于小型應(yīng)用;程序部署時(shí),一般只需要附帶數(shù)據(jù)文件即可。有時(shí)也稱(chēng)作桌面數(shù)據(jù)庫(kù)。
服務(wù)器級(jí)數(shù)據(jù)庫(kù)(如Oracle、DB2、SQL Server、MySQL、PostgreSQL等)是具備網(wǎng)絡(luò)連接功能、可作為單獨(dú)數(shù)據(jù)庫(kù)服務(wù)器的DBMS,適用于大型信息系統(tǒng);程序部署時(shí),需要專(zhuān)門(mén)安裝相應(yīng)的DBMS,甚至要單獨(dú)進(jìn)行數(shù)據(jù)庫(kù)服務(wù)器的架構(gòu)設(shè)計(jì)。此類(lèi)數(shù)據(jù)庫(kù)是我們討論的重點(diǎn)。
3.2. 服務(wù)器(Server)與客戶端(Client)
數(shù)據(jù)庫(kù)服務(wù)器是運(yùn)行在一臺(tái)主機(jī)(Host)(或主機(jī)集群)上的服務(wù)程序,維護(hù)著一個(gè)或多個(gè)數(shù)據(jù)庫(kù),并通過(guò)網(wǎng)絡(luò)連接響應(yīng)數(shù)據(jù)庫(kù)客戶端提交的SQL語(yǔ)句。
數(shù)據(jù)庫(kù)客戶端是向數(shù)據(jù)庫(kù)服務(wù)器發(fā)送查詢(xún)請(qǐng)求的應(yīng)用程序,可能是DBMS的GUI管理界面或命令行應(yīng)用程序,也可能是前端的Web服務(wù)器。數(shù)據(jù)庫(kù)客戶端和數(shù)據(jù)庫(kù)服務(wù)器可能是在同一臺(tái)主機(jī)上,但更多情況下則是位于不同的主機(jī)上,通過(guò)局域網(wǎng)訪問(wèn)。
例如對(duì)于SQL Server來(lái)說(shuō),一個(gè)服務(wù)器實(shí)例(Instance)即是一個(gè)數(shù)據(jù)庫(kù)服務(wù)器,一臺(tái)主機(jī)上可以安裝多個(gè)服務(wù)器實(shí)例;而查詢(xún)分析器或SSMS、sqlcmd、以及連接數(shù)據(jù)庫(kù)服務(wù)器的IIS,都是數(shù)據(jù)庫(kù)客戶端。
比如你在SSMS中備份/還原/附加一個(gè)數(shù)據(jù)庫(kù),或是通過(guò)xp_cmdshell執(zhí)行一個(gè)命令程序,所操作的都是你所連接的數(shù)據(jù)庫(kù)服務(wù)器所在主機(jī)的文件,而不是你運(yùn)行SSMS數(shù)據(jù)庫(kù)客戶端所在主機(jī)的文件。
一臺(tái)主機(jī)有時(shí)候會(huì)被稱(chēng)作一臺(tái)(操作系統(tǒng))服務(wù)器,而數(shù)據(jù)庫(kù)服務(wù)器和Web服務(wù)器都是運(yùn)行在主機(jī)之上的應(yīng)用服務(wù)器。它們都被稱(chēng)作服務(wù)器,不要因此搞混了。
一個(gè)典型的基于SQL Server的網(wǎng)站系統(tǒng)的架構(gòu)示例如下:
用戶瀏覽器(Web Client) <----> IIS(Web Server/DB Client) <----> SQL Server(DB Server)
3.3. 數(shù)據(jù)庫(kù)(DB)與數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)
“數(shù)據(jù)庫(kù)”這個(gè)詞已經(jīng)被濫用,可能用來(lái)指一個(gè)數(shù)據(jù)系統(tǒng)(如中國(guó)移動(dòng)的號(hào)碼數(shù)據(jù)庫(kù)),可能用來(lái)指一種數(shù)據(jù)存儲(chǔ)技術(shù)(如關(guān)系數(shù)據(jù)庫(kù)和NoSQL數(shù)據(jù)庫(kù)),還可能用來(lái)指DBMS(如人們常說(shuō)SQL Server是數(shù)據(jù)庫(kù)軟件)。這種混亂已然形成,恐怕難以改變(比如上文的描述即是如此)。我們只能根據(jù)上下文來(lái)判斷具體含義。
按最狹義的技術(shù)含義,數(shù)據(jù)庫(kù)(Database)是指位于一個(gè)數(shù)據(jù)庫(kù)服務(wù)器實(shí)例上的一個(gè)庫(kù),而DBMS則是指類(lèi)似SQL Server、Oracle等等此類(lèi)軟件。初學(xué)者要注意這些概念之間的差別。論壇上常常見(jiàn)到這樣的帖子:“連不上數(shù)據(jù)庫(kù)”、“數(shù)據(jù)庫(kù)打不開(kāi)了”,又沒(méi)有上下文,可見(jiàn)發(fā)問(wèn)者概念混亂,搞得解答者也是一頭霧水。
3.4. SQL與SQL方言(dialect)
SQL是一個(gè)關(guān)系數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言的標(biāo)準(zhǔn),而SQL方言則是各種DBMS在SQL標(biāo)準(zhǔn)上進(jìn)行的擴(kuò)展,如增加新的關(guān)鍵字、查詢(xún)功能、特有的數(shù)據(jù)類(lèi)型、支持過(guò)程化的控制流語(yǔ)句等。例如SQL Server的T-SQL和Oracle的PL/SQL都是常見(jiàn)的SQL方言。
這就好比ANSI C標(biāo)準(zhǔn)與各種編譯器實(shí)現(xiàn)的C語(yǔ)言的差別。但不同SQL方言之間的差異遠(yuǎn)大于不同C編譯器之間的差異。SQL方言之間的差異,對(duì)于跨DBMS的學(xué)習(xí)和開(kāi)發(fā),都是必須注意的。
3.5. 語(yǔ)句、表達(dá)式和斷言
語(yǔ)句(statement)是SQL中一個(gè)可以單獨(dú)執(zhí)行的單元。如SELECT * FROM table;即是一個(gè)語(yǔ)句,其中包含了SELECT子句(clause)和FROM子句。SQL標(biāo)準(zhǔn)規(guī)定用分號(hào)作為語(yǔ)句的結(jié)束,但在目前的T-SQL中,語(yǔ)句結(jié)束的分號(hào)是可選的。
表達(dá)式(expression)是SQL中的一個(gè)值(可能是變量、常量、查詢(xún)字段或計(jì)算結(jié)果),對(duì)應(yīng)一種特定的數(shù)據(jù)類(lèi)型。SQL中的表達(dá)式分為標(biāo)量表達(dá)式和表值表達(dá)式,其中表值表達(dá)式作為單獨(dú)語(yǔ)句則是SELECT語(yǔ)句,作為語(yǔ)句的一部分則稱(chēng)為子查詢(xún)。比如0, col + 2, DATEADD(second, 30, GETDATE())都是(標(biāo)量)表達(dá)式。
需要特別說(shuō)明的是,SQL中的CASE WHEN是標(biāo)題表達(dá)式,而不是條件語(yǔ)句。比如CASE WHEN中可以使用表達(dá)式,卻不能使用語(yǔ)句;CASE WHEN的結(jié)果是一個(gè)特定數(shù)據(jù)類(lèi)型的標(biāo)量值;CASE WHEN可以用在SELECT、GROUP BY或ORDER BY子句中,但I(xiàn)F ELSE則不行。
是SQL中進(jìn)行比較的結(jié)果,即真值,可理解為布爾表達(dá)式,因?yàn)镾QL中沒(méi)有bool數(shù)據(jù)類(lèi)型,所以將斷言特別從表達(dá)式中區(qū)分出來(lái)。比如1是一個(gè)標(biāo)量表達(dá)式,而1 = 1則是一個(gè)斷言,后者可以用在WHERE、ON、HAVING、CHECK等需要真值條件的地方,但前者則不可以。由于NULL的存在,SQL中的斷言是三值邏輯,即True/False/Unknown,詳見(jiàn)下文“NULL與三值邏輯”。
下文中多次用到計(jì)算和比較兩個(gè)詞。表達(dá)式和表達(dá)式進(jìn)行計(jì)算,結(jié)果是新的表達(dá)式;表達(dá)式和表達(dá)式進(jìn)行比較,結(jié)果是一個(gè)斷言;斷言和斷言可以進(jìn)行邏輯運(yùn)行(AND/OR/NOT),結(jié)果是新的斷言。注意其中的區(qū)別。
4. SQL不同于一般編程語(yǔ)言的地方
4.1. SQL操作的是數(shù)據(jù)
SQL是數(shù)據(jù)庫(kù)的查詢(xún)語(yǔ)言,因而可以對(duì)系統(tǒng)數(shù)據(jù)產(chǎn)生持久化影響。在常規(guī)編程中,一個(gè)錯(cuò)誤通常只會(huì)造成程序的crash或bug,修改并重新調(diào)試往往就可以了;而在SQL中,一個(gè)不小心就可能造成系統(tǒng)數(shù)據(jù)的破壞和丟失。常常有新手執(zhí)行SQL時(shí),不小心遺漏了DELETE或UPDATE語(yǔ)句中的WHERE子句,這往往是很大的麻煩。
篇三:sql server學(xué)習(xí)總結(jié)
篇四:SQL_Server_2008數(shù)據(jù)庫(kù)學(xué)習(xí)
SQL Server 2008數(shù)據(jù)庫(kù)—?jiǎng)?chuàng)建、建表、查詢(xún)語(yǔ)句
一、創(chuàng)建數(shù)據(jù)庫(kù)
1、利用對(duì)象資源管理器創(chuàng)建用戶數(shù)據(jù)庫(kù):
。1)選擇“開(kāi)始”—“程序”—Microsoft SQL Server 2008—SQL Server Management Studio命令,打開(kāi)SQL Server Management Studio。
。2)使用“Windows身份驗(yàn)證”連接到SQL Server 2008數(shù)據(jù)庫(kù)實(shí)例。
。3)展開(kāi)SQL Server 實(shí)例,右擊“數(shù)據(jù)庫(kù)”,然后人彈出的快捷菜單中選擇“新建數(shù)據(jù)庫(kù)存”命令,打開(kāi)“新建數(shù)據(jù)庫(kù)”對(duì)話框。
(4)在“新建數(shù)據(jù)庫(kù)”對(duì)話框中,可以定義數(shù)據(jù)庫(kù)的名稱(chēng)、數(shù)據(jù)庫(kù)的所有者、是否使用全文索引、數(shù)據(jù)文件和日志文件的邏輯名稱(chēng)和路徑、文件組、初始大小和增長(zhǎng)方式等。輸入數(shù)據(jù)庫(kù)名稱(chēng)student。
二、創(chuàng)建數(shù)據(jù)表
1、利用表設(shè)計(jì)器創(chuàng)建數(shù)據(jù)表:
。1)啟動(dòng)SQL Server Management Studio,連接到SQL Server 2008數(shù)據(jù)庫(kù)實(shí)例。
。2)展開(kāi)SQL Server實(shí)例,選擇“數(shù)據(jù)庫(kù)”—student—“表”,單擊鼠標(biāo)右鍵,然后從彈出的快捷菜單中選擇“新建表”命令,打開(kāi)“表設(shè)計(jì)器”。
。3)在“表設(shè)計(jì)器”中,可以定義各列的名稱(chēng)、數(shù)據(jù)類(lèi)型、長(zhǎng)度、是否允許為空等屬性。
。4)當(dāng)完成新建表的各個(gè)列的屬性設(shè)置后,單擊工具欄上的“保存”按鈕,彈出“選擇名稱(chēng)”對(duì)話框,輸入新建表名stu_info,SQL Server數(shù)據(jù)庫(kù)引擎會(huì)依據(jù)用戶的設(shè)置完成新表的創(chuàng)建。
2、利用SQL語(yǔ)句創(chuàng)建數(shù)據(jù)表:
在SQL Server Management Studio中,單擊標(biāo)準(zhǔn)工具欄的“新建查詢(xún)”按鈕,啟動(dòng)SQL編輯器窗口
例如:
Create table stu_info(
stu_id 10)not null,
name nvar20)not null,
birthday date null,
sex n2)null,
address nvar20)null,
mark int null,
major nvar20)null,
sdept nvar20)null
);
3、樣本數(shù)據(jù)庫(kù)student表數(shù)據(jù):
學(xué)生信息表(stu_info)
:
課程信息表(course_info):
學(xué)生成績(jī)表(stu_grade)
:
create table stu_info
( stu_id 10)primary key not null,
name nvar20) not null,
birthday date,
sex n1) default'男',
address nvar20),
mark smallint,
major nvar20),
sdept nvar20)
);
create table cou_info
(course_id 3) not null primary key,
course_name nvar20) not null,
course_type nvar2) default'考試',
course_mark tinyint ,
course_time 2),
);
create table stu_grade
(stu_id 10) not null ,
course_id 3) not null ,
grade int
primary key (stu_id,course_id),
foreign key (stu_id)references stu_info(stu_id),
foreign key (course_id)references cou_info(course_id)
);
into stu_info(stu_id,name,birthday,sex,address ,mark,major,sdept)
values('2007070101','張?jiān)?#39;,'1985-10-09','男','河南鄭州','576','計(jì)算機(jī)科學(xué)與技術(shù)','信息學(xué)院'), ('2007070102','張紅','1985-01-14','女','河南開(kāi)封','565','計(jì)算機(jī)科學(xué)與技術(shù)','信息學(xué)院'), ('2007070103','王明','1986-07-08','男','河南洛陽(yáng)','570','計(jì)算機(jī)科學(xué)與技術(shù)','信息學(xué)院'), ('2007070104','李偉','1986-03-11','男','河南鄭州','564','計(jì)算機(jī)科學(xué)與技術(shù)','信息學(xué)院'), ('2007070201','鄭瀾','1985-12-01','女','河南平頂山','567','電子商務(wù)','信息學(xué)院'), ('2007070202','趙恒','1986-02-02','男','河南周口','566','電子商務(wù)','信息學(xué)院'), ('2007070203','張?zhí)m','1986-04-06','女','河南許昌','571','電子商務(wù)','信息學(xué)院'), ('2007080101','李偉','1985-09-12','男','河南鄭州','578','會(huì)計(jì)學(xué)','會(huì)計(jì)學(xué)院'),
('2007080102','錢(qián)麗','1985-11-23','女','河南安陽(yáng)','573','會(huì)計(jì)學(xué)','會(huì)計(jì)學(xué)院'),
('2007080201','孫楠','1986-11-19','男','河南南陽(yáng)','578','財(cái)務(wù)管理','會(huì)計(jì)學(xué)院');
into cou_info(course_id,course_name,course_type,course_mark,course_time)
values('701','計(jì)算機(jī)基礎(chǔ)','考試','3','50'),
('702','操作系統(tǒng)','考試','4','50'),
('703','計(jì)算機(jī)網(wǎng)絡(luò)','考試','4','50'),
('704','數(shù)據(jù)庫(kù)原理','考查','3','50'),
('706','java','考查','3','40'),
('801','宏觀經(jīng)濟(jì)學(xué)','考試','4','50'),
('802','初級(jí)會(huì)計(jì)','考試','4','50'),
('803','財(cái)政學(xué)','考試','3','50'),
('804','會(huì)計(jì)電算化','考查','3','');
into stu_grade(stu_id,course_id,grade)
values('2007070101','701','75'),
('2007070101','702','81'),
('2007070101','703','96'),
('2007070101','701','85'),
('2007070102','702','74'),
('2007070102','701','55'),
('2007070103','701','35'),
('2007070104','702','88'),
('2007070104','701',''),
('2007080101','802','91'),
('2007080101','801','87'),
('2007080102','802','50'),
('2007080102','803','75'),
('2007080201','804','82');
alter table stu_info add memo nvar200);
alter table cou_info add unique (course_name) ;
alter table stu_grade
add check(grade>=0 and grade<=100);
alter table stu_grade
add constraint stu_score foreign key(stu_id)references stu_info(stu_id); stu_info ;
cou_info ;
stu_grade;
create table stu_info
( stu_id 10)primary key not null,
name nvar20) not null,
birthday date,
sex n1) default'男',
address nvar20),
mark smallint,
major nvar20),
sdept nvar20)
);
create table cou_info
(course_id 3) not null primary key,
course_name nvar20) not null,
course_type nvar2) default'考試',
course_mark tinyint ,
course_time 2),
);
create table stu_grade
(stu_id 10) not null ,
course_id 3) not null ,
grade int
primary key (stu_id,course_id),
foreign key (stu_id)references stu_info(stu_id),
foreign key (course_id)references cou_info(course_id)
);
alter table stu_info
add code 18)not null;
alter table stu_info
add unique(code);
alter table stu_info
drop constraint UQ__stu_info__357D4CF932E0915F
go
alter table stu_info
drop column code
go
alter table stu_info
add check(sex ='男'or sex ='女');
alter table cou_info
add pre_course_id 3);
alter table cou_info
add foreign key(pre_course_id) references cou_info(course_id); stu_info
set address='河南洛陽(yáng)'
where stu_id='2007070101';
stu_grade
set grade=1.1*grade
where grade<60;
from stu_grade
where grade<60;
stu_info
set sdept='會(huì)計(jì)學(xué)院'
where stu_id='2007070102';
stu_grade
set grade=null
where grade<60;
from stu_info
where address='河南洛陽(yáng)';
from stu_grade
where '張?jiān)?#39;=
(select name
from stu_info
where stu_info.stu_id=stu_grade.stu_id
);
select *
from stu_info;
select*
from stu_grade;
select name,sex,address,sdept
from stu_info
where stu_id='2007070103';
select stu_id 學(xué)號(hào),name 姓名,sdept 院系
from stu_info
where sex='女';
篇五:SQL Server 2008 學(xué)習(xí)筆記
SQL Server 2008 學(xué)習(xí)筆記
目錄
一、SQL Server 2008 學(xué)習(xí)筆記(一) 數(shù)據(jù)庫(kù)系統(tǒng)的基本結(jié)構(gòu) ........................................1
二、SQL Server2008 學(xué)習(xí)筆記(二)關(guān)系數(shù)據(jù)庫(kù) ..............................................................3
三、SQL Server2008 學(xué)習(xí)筆記(三) 數(shù)據(jù)庫(kù)管理 .............................................................6
四、SQL Server2008學(xué)習(xí)筆記(四)數(shù)據(jù)表的基本操作(上) ................................ 11
五、sql server2008 學(xué)習(xí)筆記 小插曲 ....................................................................... 15
據(jù)庫(kù)系統(tǒng)的基本結(jié)構(gòu) 在寫(xiě)我的第一篇筆記之前,先廢話幾句,最近打算學(xué)習(xí)一段時(shí)間的數(shù)據(jù)庫(kù)知識(shí)并打算把我的讀書(shū)心得晾出來(lái)和大家分享一下,希望感興趣的園友能能夠一起探討,共同提高。有理解的不對(duì)的地方也歡迎各位大牛拍磚,這年頭不為別的,就為了能掌握點(diǎn)真理!
廢話說(shuō)完了,開(kāi)始今天的正文。
首先來(lái)上一張圖片,了解一下數(shù)據(jù)庫(kù)系統(tǒng)的基本結(jié)構(gòu)
下面我想用一個(gè)簡(jiǎn)單的比喻來(lái)描述一下數(shù)據(jù)庫(kù)系統(tǒng)的基本結(jié)構(gòu)。
數(shù)據(jù)庫(kù)系統(tǒng)=====》倉(cāng)儲(chǔ)中心
數(shù)據(jù)庫(kù)========》倉(cāng)儲(chǔ)中心的貨場(chǎng)或者是倉(cāng)庫(kù)
數(shù)據(jù)=========》存儲(chǔ)在貨場(chǎng)或者是倉(cāng)庫(kù)中的貨物
數(shù)據(jù)庫(kù)管理系統(tǒng)===》在倉(cāng)儲(chǔ)中心一系列的管理體制規(guī)則下的倉(cāng)庫(kù)自動(dòng)化管理系統(tǒng)
數(shù)據(jù)庫(kù)管理員====》倉(cāng)庫(kù)的庫(kù)管員
應(yīng)用系統(tǒng)======》倉(cāng)儲(chǔ)中心對(duì)外的服務(wù)窗口
操作系統(tǒng)======》公司或者集團(tuán),是一個(gè)基礎(chǔ)環(huán)境的作用
這樣就可以將數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行描述為一個(gè)倉(cāng)儲(chǔ)中心的運(yùn)轉(zhuǎn)。
當(dāng)有客戶(用戶)來(lái)倉(cāng)儲(chǔ)中心(數(shù)據(jù)庫(kù)系統(tǒng))存/取貨物的時(shí)候,客戶(用戶)首先要接觸的是倉(cāng)儲(chǔ)中心的對(duì)外服務(wù)窗口(軟件系統(tǒng)),服務(wù)窗口會(huì)對(duì)客戶(用戶)的身份進(jìn)行驗(yàn)證,出示證件或其他的一些方式和方法?蛻簦ㄓ脩簦┥矸蒡(yàn)證通過(guò)之后就可以進(jìn)行通過(guò)服務(wù)窗口索取服務(wù)(發(fā)出一些命令)來(lái)傳給倉(cāng)庫(kù)的自動(dòng)化管理系統(tǒng)(DBMS)會(huì)對(duì)這些命令再一次進(jìn)行驗(yàn)證,驗(yàn)證通過(guò)就提供相應(yīng)的服務(wù)(返回相應(yīng)的結(jié)果),驗(yàn)證失敗會(huì)拒絕服務(wù)(返回一個(gè)錯(cuò)誤)。在這個(gè)過(guò)程中,客戶(用戶)不需要了解你想要的貨物放在倉(cāng)庫(kù)(數(shù)據(jù)庫(kù))的具體位置,這么多的貨物(數(shù)據(jù))究竟是怎樣的一個(gè)組織結(jié)構(gòu)。同樣的一個(gè)倉(cāng)庫(kù)或者是貨場(chǎng)怎么才能更有效率的想客戶(用戶)提供服務(wù),怎樣才能存放更多的貨物,這些都是倉(cāng)庫(kù)管理員(數(shù)據(jù)庫(kù)管理員)應(yīng)該做的事情。
關(guān)于數(shù)據(jù)庫(kù)系統(tǒng)的幾點(diǎn)說(shuō)明
1、(數(shù)據(jù)庫(kù))DB和(數(shù)據(jù)庫(kù)管理系統(tǒng))DBMS:數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)管理系統(tǒng)是兩個(gè)不同的概念。數(shù)據(jù)庫(kù)是數(shù)據(jù)存儲(chǔ)的倉(cāng)庫(kù),是一個(gè)實(shí)體,能夠合理的存放數(shù)據(jù)的地方。數(shù)據(jù)庫(kù)管理系統(tǒng)是一種操縱和管理數(shù)據(jù)庫(kù)的大型軟件,用于建立、使用和維護(hù)數(shù)據(jù)庫(kù),它對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫(kù)的安全性和完整性。我們通常說(shuō)的oracle、sql server、mysql、db2屬于DBMS的范疇。
2、數(shù)據(jù)庫(kù)系統(tǒng)中數(shù)據(jù)的模型:層次模型、網(wǎng)狀模型、關(guān)系模型。我們通常所說(shuō)的關(guān)系型數(shù)據(jù)庫(kù)就是根據(jù)數(shù)據(jù)模型來(lái)劃分的。
3、數(shù)據(jù)庫(kù)管理系統(tǒng)是數(shù)據(jù)庫(kù)系統(tǒng)的核心,對(duì)數(shù)據(jù)庫(kù)的一切操作,如原始數(shù)據(jù)的裝入、檢索、更新、再組織等等,都是在DBMS的指揮、調(diào)度下進(jìn)行的,它是用戶與物理數(shù)據(jù)庫(kù)之間的橋梁,根據(jù)用戶的命令對(duì)數(shù)據(jù)庫(kù)執(zhí)行必要的操作。
4、由于數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)的核心作用,所以我們學(xué)習(xí)數(shù)據(jù)庫(kù)的時(shí)候主要還是學(xué)習(xí)的是數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)。
5、在實(shí)際的使用過(guò)程中我們一般不關(guān)心數(shù)據(jù)的物理結(jié)構(gòu)只關(guān)心數(shù)據(jù)的邏輯結(jié)構(gòu),這就得借助于功能強(qiáng)大的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)
數(shù)據(jù)庫(kù) 關(guān)系數(shù)據(jù)庫(kù)(Relational Database ,RDB)基于關(guān)系模型的數(shù)據(jù)庫(kù)。是現(xiàn)代最流行的數(shù)據(jù)管理系統(tǒng)中應(yīng)用最為普遍的一種,也是最有效率的數(shù)據(jù)組織方式之一。
理解關(guān)系數(shù)據(jù)庫(kù)可以從兩方面進(jìn)行理解:
1、關(guān)系數(shù)據(jù)庫(kù)是有由行與列構(gòu)成的二維表表之間的關(guān)聯(lián)組成
2、表的關(guān)聯(lián)。表的關(guān)聯(lián)的好處就是無(wú)需將相同的數(shù)據(jù)重復(fù)的進(jìn)行存儲(chǔ),降低了數(shù)據(jù)的冗余度。 術(shù)語(yǔ)
鍵碼(key):在關(guān)系中用來(lái)標(biāo)識(shí)行的一列或者是多列
主關(guān)鍵字(Primary Key):是表行的唯一標(biāo)識(shí)的候選關(guān)鍵字。這里需要注意的地方是,一個(gè)表只有一個(gè)關(guān)鍵字;主關(guān)鍵字可以由一個(gè)或者是多個(gè)字段組成,分別稱(chēng)為單段主鍵和多段主鍵
候選關(guān)鍵字(Candidate Key):唯一標(biāo)識(shí)表中的一行而又不包含多余屬性的一個(gè)屬性集 公共關(guān)鍵字(Common Key):兩個(gè)數(shù)據(jù)表中具有相同或者是相容的屬性或者是屬性組,那么這個(gè)屬性或?qū)傩越M就稱(chēng)之為關(guān)系的公共關(guān)鍵字
外關(guān)鍵字(Foreign Key):外關(guān)鍵字存在于公共關(guān)鍵字的基礎(chǔ)之上。在公共關(guān)鍵字中如果這個(gè)公共關(guān)鍵字在其中的一個(gè)數(shù)據(jù)表中是主關(guān)鍵字那么這個(gè)公共關(guān)鍵字就稱(chēng)之為另一個(gè)表的外關(guān)鍵字。
范式理論
目前關(guān)系數(shù)據(jù)庫(kù)有六種范式,而在實(shí)際設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候,通常用到的是前三種范式
1NF
a)數(shù)組的每個(gè)屬性只能包含一個(gè)值
b)關(guān)系中的每個(gè)數(shù)組必須包含相同數(shù)量的值
c)關(guān)系中每一個(gè)數(shù)組一定不能相同
反例
如果符合1NF則修改如下
2NF 滿足第一范式的基礎(chǔ)上,數(shù)據(jù)表中的任何一個(gè)非主鍵字段的數(shù)據(jù)都依賴(lài)于該數(shù)據(jù)表中的主關(guān)鍵字。
若滿足2NF則需要將上面的表分拆為一下兩個(gè)表:
3NF
在滿足第二范式的基礎(chǔ)上,滿足第三范式的條件是數(shù)據(jù)表中的任何兩個(gè)非關(guān)鍵字段的數(shù)據(jù)值之間不存在函數(shù)依賴(lài)關(guān)系。
這個(gè)范式比較容易理解就不拿例子來(lái)解釋了。
這樣做有什么好處嗎?答案是肯定的哈。沒(méi)有無(wú)緣無(wú)故的愛(ài)和恨,呵呵。
1、節(jié)約存儲(chǔ)空間
2、避免的數(shù)據(jù)變動(dòng)時(shí)發(fā)生人為的錯(cuò)誤
E-R模型
1、實(shí)體模型
怎么樣理解這樣的一個(gè)概念呢。通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)解釋這樣的一個(gè)概念。
這就是一個(gè)實(shí)體集
【SQL學(xué)習(xí)教程】相關(guān)文章:
oracle的sql語(yǔ)句01-21
SQL優(yōu)化大全09-09
學(xué)習(xí)簡(jiǎn)單的踢踏舞教程06-17
SQL查詢(xún)語(yǔ)句大全10-24
SQL語(yǔ)句的理解原則10-05
PHP防止SQL注入的例子09-25
mysql SQL語(yǔ)句積累參考10-02
執(zhí)行sql原理l分析05-12
SQL中的單記錄函數(shù)08-12