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