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