口袋妖怪go官網(wǎng)_sql權(quán)威指南 當(dāng)當(dāng)_SQL權(quán)威指南(第4版)
本文關(guān)鍵詞:SQL權(quán)威指南,由筆耕文化傳播整理發(fā)布。
> SQL Server > SQL權(quán)威指南(第4版) 概述 2012-11-28 08:30:22 我要投稿
本文所屬圖書 > SQL權(quán)威指南(第4版)
本書為SQL 名著中文版,兼顧技術(shù)與實(shí)踐,全面細(xì)致介紹高級(jí)技術(shù),致力于打造SQL 編程專家。本書闡釋了數(shù)據(jù)庫(kù)設(shè)計(jì)、優(yōu)化和操作的各方面內(nèi)容,提供了成為SQL 編程專業(yè)人士所需的技術(shù)與技巧、針對(duì)新舊挑戰(zhàn)性難題的... 立即去當(dāng)當(dāng)網(wǎng)訂購(gòu)
給我們帶來(lái)麻煩的往往不是我們完全不知道的事情,而是那些我們自以為了解了,但其實(shí)不然的事情。
——阿蒂默斯·沃德(1834—1867),美國(guó)作家、 幽默作家
數(shù)據(jù)庫(kù)和RDBMS 與那些伴隨著COBOL、FORTRAN 、C、BASIC 、PL/I 、Java 等過(guò)程語(yǔ)言或面向?qū)ο笳Z(yǔ)言一起出現(xiàn)的文件系統(tǒng)截然不同,SQL 語(yǔ)言本身沒有I/O 系統(tǒng),因此我們通常把SQL 解讀為n 幾乎不能稱為語(yǔ)言o(Scarcely Qualifies as a Language)。SQL 依賴于宿主語(yǔ)言,以便從終端用戶獲取數(shù)據(jù)或?yàn)槠浞祷財(cái)?shù)據(jù)。
編程語(yǔ)言通常都以某一底層模型為基礎(chǔ)。如果了解這個(gè)模型,就能更好地理解這門語(yǔ)言。例如,F(xiàn)ORTRAN 語(yǔ)言建立在代數(shù)學(xué)理論之上,雖然這并不表明 FORTRAN 語(yǔ)言酷似代數(shù)學(xué),但如果你了解代數(shù)學(xué),那么對(duì)FORTRAN 語(yǔ)言就不會(huì)完全陌生,你可以在賦值語(yǔ)言中寫出表達(dá)式,也可以猜出那些沒有見過(guò)的庫(kù)函數(shù)所代表的意思。
在大多數(shù)其他編程語(yǔ)言中,程序員習(xí)慣于對(duì)文件進(jìn)行處理。文件的設(shè)計(jì)源于紙質(zhì)表格,這些文件都存儲(chǔ)在計(jì)算機(jī)里并且非常依賴宿主編程語(yǔ)言。FORTRAN 語(yǔ)言很難讀取COBOL文件內(nèi)容,反之亦然。事實(shí)上,在相同語(yǔ)言編寫的程序之間共享文件也是非常困難的事情。
文件的最基本形式是一組記錄,這些記錄按照一定的次序記錄在文件里,而我們能夠通過(guò)物理位置引用記錄。我們可以打開一個(gè)文件,讀取第一條記錄,之后依次讀取后續(xù)的記錄,直到讀完最后一個(gè)記錄。當(dāng)讀完最后一個(gè)記錄后再次讀取將會(huì)返回EOF (End Of File )值。我們可以在這些記錄中來(lái)回切換,并且一次操作一條記錄,這些操作對(duì)于其他程序打開的其他文件沒有任何影響,只有程序才能修改文件。
SQL 語(yǔ)言的模型是集合數(shù)據(jù),而不是物理文件。SQL 語(yǔ)言的n 工作單位o 是整個(gè)模式(schema ),而不是單個(gè)表格。
我們?cè)趯W(xué)校里學(xué)過(guò)數(shù)學(xué)中集合的概念。集合是無(wú)序的,集合中的成員都屬于同一類型。當(dāng)我們對(duì)集合進(jìn)行操作時(shí),這些操作一次作用于全部成員。這就意味著,當(dāng)我要從正整數(shù)集合中選擇奇數(shù)子集時(shí),返回的是所有奇數(shù)值組成的一個(gè)集合。我并沒有一個(gè)個(gè)地對(duì)整數(shù)進(jìn)行掃描,然后將滿足條件的奇數(shù)組成集合,僅僅是定義了奇數(shù)的規(guī)則n 如果將整數(shù)除以2 時(shí)余數(shù)為1,那么該數(shù)為奇數(shù)o,這個(gè)規(guī)則可用于對(duì)任何整數(shù)進(jìn)行奇數(shù)判定。集合模型具有很多優(yōu)點(diǎn),并行處理只是其中之一。
FORTRAN 并不是一門完美的代數(shù)學(xué)語(yǔ)言,同樣地,SQL 也不是完美的集合語(yǔ)言,后面的內(nèi)容將展示這一點(diǎn)。但如果對(duì)SQL 語(yǔ)言中的某些內(nèi)容存疑,考慮一下如何在集合中闡述這些內(nèi)容,也許就能得到正確的答案。
SQL 語(yǔ)言分三部分,即三個(gè)子語(yǔ)言:
DDL (Data Declaration Language ,數(shù)據(jù)描述語(yǔ)言);
DML (Data Manipulation Language,數(shù)據(jù)操作語(yǔ)言);
DCL (Data Control Language,數(shù)據(jù)控制語(yǔ)言)。
DDL用于定義數(shù)據(jù)庫(kù)的內(nèi)容,并維護(hù)數(shù)據(jù)完整性。存儲(chǔ)在文件中的數(shù)據(jù)并沒有完整性約束、默認(rèn)值以及關(guān)系的概念。與一個(gè)老程序員討論如何使用FORTRAN 語(yǔ)言讀取COBOL文件,而且要求無(wú)誤地獲取操作結(jié)果,會(huì)得到這樣的答案:如果一個(gè)程序n 亂動(dòng)o 數(shù)據(jù),那么另一個(gè)程序就會(huì)表現(xiàn)異常。
在DDL語(yǔ)句上花費(fèi)精力越多,你的RDBMS 就越能更好地工作。DDL和 DML 及DCL語(yǔ)言一起工作;SQL 是一個(gè)整體,,而不是這三種語(yǔ)言無(wú)關(guān)聯(lián)的簡(jiǎn)單拼湊。
DML是大多數(shù)讀者執(zhí)行查詢、插入、更新以及刪除操作并賴以為生的語(yǔ)言。如果對(duì)數(shù)據(jù)進(jìn)行了規(guī)范化處理,并創(chuàng)建了良好的模式,那么你在工作中將事半功倍。每次編譯過(guò)程式語(yǔ)言代碼時(shí)候,操作步驟都是一樣的, SQL 語(yǔ)言則不然,每次處理一個(gè)查詢或其他語(yǔ)句時(shí),執(zhí)行計(jì)劃會(huì)根據(jù)數(shù)據(jù)庫(kù)的當(dāng)前狀態(tài)而變更。正如柏拉圖在《克拉底魯篇》中所說(shuō):n 所有事物都在改變,沒有永恒之物o(Everything flows, nothing stands still )。
DCL不是數(shù)據(jù)安全相關(guān)的語(yǔ)言,而是一門關(guān)于訪問(wèn)控制的語(yǔ)言。DCL語(yǔ)言并不加密數(shù)據(jù);SQL 標(biāo)準(zhǔn)中沒有提及數(shù)據(jù)加密,不過(guò)各個(gè)廠商為用戶提供了一些可選方案。大多數(shù)SQL 書籍并不會(huì)強(qiáng)調(diào)DCL語(yǔ)言,我也不打算在此花費(fèi)太多篇幅。
有必要為DCL語(yǔ)言單獨(dú)寫一本微型書,它就好像是三腳凳中容易被忽視的那根支撐腳。也許以后我會(huì)寫一本這樣的書。
現(xiàn)在讓我們看一些基本概念。如果你對(duì)傳統(tǒng)文件系統(tǒng)中數(shù)據(jù)處理的過(guò)程已經(jīng)有所了解,那首先應(yīng)該拋棄文件處理中的一些認(rèn)識(shí)。
(1)數(shù)據(jù)庫(kù)模式不是文件集合。各個(gè)文件之間不具有任何關(guān)系,應(yīng)用程序負(fù)責(zé)處理文件之間的關(guān)系。SQL 標(biāo)準(zhǔn)沒有提及任何與物理存儲(chǔ)相關(guān)的問(wèn)題,而文件建立于連續(xù)的物理存儲(chǔ)之上。文件系統(tǒng)的出現(xiàn)伴隨著打孔卡的產(chǎn)生,而磁帶模擬出了文件系統(tǒng),之后便是早期的文件系統(tǒng)。因?yàn)槲募到y(tǒng)是所有問(wèn)題的根源,所以我把它列入了第一條。
(2)數(shù)據(jù)表不是文件。表是模式的一部分,而模式是一個(gè)工作單元,不能在同一個(gè)模式下存在多個(gè)同名表。文件系統(tǒng)負(fù)責(zé)為加載到某一物理驅(qū)動(dòng)器上的文件分配名稱,而數(shù)據(jù)庫(kù)中的表也有表名。文件本身是真實(shí)存在的,而表卻可以是虛擬的(視圖、通用表表達(dá)式,查詢結(jié)果等)。
(3)行不是記錄。記錄的意義由讀取它們的應(yīng)用程序決定。記錄是有先后次序的,所以可以對(duì)記錄執(zhí)行第一個(gè)、最后一個(gè)、下一個(gè)、前一個(gè)等操作;而行并沒有物理順序(ORDER BY 語(yǔ)句是游標(biāo)的子句)。記錄通過(guò)指針以及記錄號(hào)指向其物理位置。行則通過(guò)關(guān)系鍵進(jìn)行定位,關(guān)系鍵的概念建立在數(shù)據(jù)模型中屬性子集唯一的基礎(chǔ)之上。標(biāo)準(zhǔn)中并沒有規(guī)定這一機(jī)制,因此在各個(gè)SQL 版本中有很大差異。
(4)列不是字段。字段的意義是由讀取字段的應(yīng)用所決定的。對(duì)于不同的應(yīng)用而言,字段可能具有不同的含義。記錄中依次排列著各個(gè)字段,字段本身不具有數(shù)據(jù)類型、約束以及默認(rèn)值。這就是主動(dòng)數(shù)據(jù)與被動(dòng)數(shù)據(jù)之間的對(duì)比!除此之外,列是可以為空的,而字段沒有這樣的概念。字段必須是客觀存在的,而列可以是計(jì)算出來(lái)的或虛擬的。如果想有一個(gè)計(jì)算出來(lái)的列值,便可以通過(guò)應(yīng)用程序進(jìn)行計(jì)算,文件并不負(fù)責(zé)計(jì)算。
另一個(gè)概念上的區(qū)別在于文件常常是整個(gè)業(yè)務(wù)流程的相關(guān)數(shù)據(jù)。文件自身必須包含足夠的數(shù)據(jù)以輔助應(yīng)用程序進(jìn)行業(yè)務(wù)邏輯處理。文件往往都是混合數(shù)據(jù),這些數(shù)據(jù)可以使用業(yè)務(wù)流程中的業(yè)務(wù)名稱進(jìn)行描述,例如,n 工資表o 或其他類似的名稱。表可以是業(yè)務(wù)流程中的實(shí)體或關(guān)系。這意味著一個(gè)文件中的數(shù)據(jù)通常都會(huì)放置到多個(gè)表中。表傾向于存儲(chǔ)可以用一個(gè)單詞描述出來(lái)的純數(shù)據(jù),工資單可以通過(guò)員工打卡表、員工表、項(xiàng)目表等多個(gè)數(shù)據(jù)表進(jìn)行描述。
點(diǎn)擊復(fù)制鏈接 與好友分享!回本站首頁(yè) 您對(duì)本文章有什么意見或著疑問(wèn)嗎?請(qǐng)到論壇討論您的關(guān)注和建議是我們前行的參考和動(dòng)力 上一篇:宣傳語(yǔ) 下一篇:1.1 實(shí)體表 相關(guān)文章概述
概述
概述
概述
概述
概述
概述
概述
概述
概述
圖文推薦本文關(guān)鍵詞:SQL權(quán)威指南,由筆耕文化傳播整理發(fā)布。
本文編號(hào):81746
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/81746.html