欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
第一部分:SQL基礎 - MS-SQL Server / 基礎類(lèi)
第一部分: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則不行。

斷言(predicate)是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子句,這往往是很大的麻煩。

因此,學(xué)習和使用SQL,一開(kāi)始應該養成兩個(gè)習慣:
1. 細心。在執行SQL語(yǔ)句認真檢查一下,要清楚自己在做什么。
2. 及時(shí)備份,并考慮對系統的元數據進(jìn)行版本控制。為偶爾的意外準備好后悔藥。

常見(jiàn)的可能造成破壞性影響的SQL關(guān)鍵詞:DELETE, UPDATE, DROP, TRUNCATE TABLE。

4.2. SQL是基于集合的說(shuō)明式語(yǔ)言

SQL擅長(cháng)集合操作,而不是循環(huán)。所謂說(shuō)明式語(yǔ)言,你只需要告訴SQL需要做什么,而不是怎么做。

初學(xué)SQL的人,思維往往難免帶有過(guò)程式語(yǔ)言的痕跡,解決問(wèn)題時(shí)常常不由地考慮循環(huán)。在學(xué)習SQL編程時(shí),每當想要用循環(huán)時(shí),先反問(wèn)一下自己:這個(gè)問(wèn)題是不是必須用循環(huán)來(lái)解決?事實(shí)上,多數情況下,這個(gè)問(wèn)題的答案是否定的。

有本書(shū)中講,SQL代碼中出現一次IF便要減一些分(比如-1),出現一次WHILE便要減很多分(比如-10或-50,不夸張)??梢試L試用這樣的方法為自己的存儲過(guò)程打分。


5. SQL的三個(gè)子集

SQL從功能上可以劃分為三個(gè)子集:

1. DML(Data Manipulation Language):
數據操縱語(yǔ)言,是對數據進(jìn)行查詢(xún)和修改(增、刪、改)操作的語(yǔ)言。
包含語(yǔ)句:SELECT+INSERT/DELETE/UPDATE
使用對象:DB User

2. DDL(Data Definition Language):
數據定義語(yǔ)言,是對域(數據類(lèi)型)和關(guān)系(表)及其它數據庫對象進(jìn)行定義的語(yǔ)言。
包含語(yǔ)句:CREATE/DROP/ALTER
使用對象:DB Designer/Developer

3. DCL(Data Control Language):
數據控制語(yǔ)言:是對數據的訪(fǎng)問(wèn)進(jìn)行權限控制的語(yǔ)言。
包含語(yǔ)句:GRANT/DENY/REVOKE
使用對象:DBA

補充說(shuō)明:
- 嚴格地說(shuō),DML只包含對數據進(jìn)行修改的語(yǔ)句(INSERT/DELETE/UPDATE),但SELECT語(yǔ)句與DML關(guān)系緊密、形式類(lèi)似,故通常放在一起。既可以統稱(chēng)為DML,也可以并稱(chēng)為Query+DML。
- 以上三個(gè)子集不包含BACKUP/RESTORE語(yǔ)句。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
[PowerDesign]將數據庫從SQL Server數據庫轉換為MySQL
第08章 數據庫安全性
ado和odbc區別(轉載)
《MySQL 8.0數據庫管理與應用》第1章 MySQL基礎
《SQLServer2005數據庫案例教程》第3章Transact-SQL程序設計
50種方法優(yōu)化SQL Server數據庫查詢(xún)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久