版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-數(shù)據(jù)庫語言

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

簡介

1970年,美國IBM研究中心的E.F.Codd連續(xù)發(fā)表多篇論文,提出關(guān)系模型。1972年,IBM公司開始研制實驗型關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEM R,為其配制的查詢語言稱為SQUARE(Specifying Queries As Relational Expression)語言,在該語言中使用了較多的數(shù)學(xué)符號。1974年,Boyce和Chamberlin把SQUARE修改為SEQUEL(Structured English QUEry Language)語言。這兩個語言在本質(zhì)上是相同的,但后者去掉了數(shù)學(xué)符號,采用英語單詞表示和結(jié)構(gòu)式的語法規(guī)則,看起來很像英語句子,用戶比較歡迎這種形式的語言。后來SEQUEL簡稱為SQL(Structured Query Language)語言,即“結(jié)構(gòu)化查詢語言”。

在認(rèn)識到關(guān)系模型的諸多優(yōu)越性后,許多廠商紛紛研制關(guān)系數(shù)據(jù)庫管理系統(tǒng)(例如:Oracle、DB2、Sybase等),這些數(shù)據(jù)庫管理系統(tǒng)的操縱語言也以SQL參照。1986年10月美國國家標(biāo)準(zhǔn)化協(xié)會(ANSI)發(fā)布了X3.135-1986《數(shù)據(jù)庫語言SQL》,1987年6月國際標(biāo)準(zhǔn)化組織(ISO)采納其為國際標(biāo)準(zhǔn)。我們稱其為“SQL-86”標(biāo)準(zhǔn)。1989年10月,ANSI又頒布了增強完整性特征的“SQL-89”標(biāo)準(zhǔn)。隨后,ISO對該標(biāo)準(zhǔn)進行了大量的修改和擴充,在1992年8月發(fā)布了標(biāo)準(zhǔn)化文件“ISO/IEC 9075:1992《數(shù)據(jù)庫語言SQL》”,我們稱其為SQL92或SQL2標(biāo)準(zhǔn)。1999年ISO又頒布了“ISO/IEC 9075:1999《數(shù)據(jù)庫語言SQL》”標(biāo)準(zhǔn)化文件,我們稱其為SQL99或SQL3標(biāo)準(zhǔn)。

數(shù)據(jù)庫語言以記錄集合作為操作對象,所有SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語句可以嵌套,這使他具有極大的靈活性和強大的功能,在多數(shù)情況下,在其他語言中需要一大段程序?qū)崿F(xiàn)的功能只需要一個SQL語句就可以達到目的,這也意味著用SQL語言可以寫出非常復(fù)雜的語句。

結(jié)構(gòu)化查詢語言(Structured Query Language)1最早是IBM的圣約瑟研究實驗室為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEM R開發(fā)的一種查詢語言,它的前身是SQUARE語言。SQL語言結(jié)構(gòu)簡潔,功能強大,簡單易學(xué),所以自從IBM公司1981年推出以來,SQL語言得到了廣泛的應(yīng)用。如今無論是像Oracle、Sybase、Informix、SQL Server這些大型的數(shù)據(jù)庫管理系統(tǒng),還是像Visual Foxpro、PowerBuilder這些PC上常用的數(shù)據(jù)庫開發(fā)系統(tǒng),都支持SQL語言作為查詢語言。

國際標(biāo)準(zhǔn)美國國家標(biāo)準(zhǔn)局(ANSI)與2國際標(biāo)準(zhǔn)化組織(ISO)已經(jīng)制定了SQL標(biāo)準(zhǔn)。ANSI是一個美國工業(yè)和商業(yè)集團組織,負(fù)責(zé)開發(fā)美國的商務(wù)和通訊標(biāo)準(zhǔn)。ANSI同時也是ISO和International Electrotechnical Commission(IEC)的成員之一。ANSI 發(fā)布與國際標(biāo)準(zhǔn)組織相應(yīng)的美國標(biāo)準(zhǔn)。1992年,ISO和IEC發(fā)布了SQL國際標(biāo)準(zhǔn),稱為SQL-92。ANSI隨之發(fā)布的相應(yīng)標(biāo)準(zhǔn)是ANSI SQL-92。ANSI SQL-92有時被稱為ANSI SQL。盡管不同的關(guān)系數(shù)據(jù)庫使用的SQL版本有一些差異,但大多數(shù)都遵循 ANSI SQL 標(biāo)準(zhǔn)。SQL Server使用ANSI SQL-92的擴展集,稱為T-SQL,其遵循ANSI制定的 SQL-92標(biāo)準(zhǔn)。

標(biāo)準(zhǔn)語句--數(shù)據(jù)操作

SELECT --從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列

INSERT --向數(shù)據(jù)庫表添加新數(shù)據(jù)行

DELETE --從數(shù)據(jù)庫表中刪除數(shù)據(jù)行

UPDATE --更新數(shù)據(jù)庫表中的數(shù)據(jù)

--數(shù)據(jù)定義

CREATE TABLE --創(chuàng)建一個數(shù)據(jù)庫表

DROP TABLE --從數(shù)據(jù)庫中刪除表

ALTER TABLE --修改數(shù)據(jù)庫表結(jié)構(gòu)

CREATE VIEW --創(chuàng)建一個視圖

DROP VIEW --從數(shù)據(jù)庫中刪除視圖

CREATE INDEX --為數(shù)據(jù)庫表創(chuàng)建一個索引

DROP INDEX --從數(shù)據(jù)庫中刪除索引

CREATE PROCEDURE --創(chuàng)建一個存儲過程

DROP PROCEDURE --從數(shù)據(jù)庫中刪除存儲過程

CREATE TRIGGER --創(chuàng)建一個觸發(fā)器

DROP TRIGGER --從數(shù)據(jù)庫中刪除觸發(fā)器

CREATE SCHEMA --向數(shù)據(jù)庫添加一個新模式

DROP SCHEMA --從數(shù)據(jù)庫中刪除一個模式

CREATE DOMAIN --創(chuàng)建一個數(shù)據(jù)值域

ALTER DOMAIN --改變域定義

DROP DOMAIN --從數(shù)據(jù)庫中刪除一個域

--數(shù)據(jù)控制

GRANT --授予用戶訪問權(quán)限

DENY --拒絕用戶訪問

REVOKE --解除用戶訪問權(quán)限

--事務(wù)控制

COMMIT --結(jié)束當(dāng)前事務(wù)

ROLLBACK --回滾當(dāng)前事務(wù)

SET TRANSACTION --定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征

--程序化SQL

DECLARE --為查詢設(shè)定游標(biāo)

EXPLAN --為查詢描述數(shù)據(jù)訪問計劃

OPEN --檢索查詢結(jié)果打開一個游標(biāo)

FETCH --檢索一行查詢結(jié)果

CLOSE --關(guān)閉游標(biāo)

PREPARE --為動態(tài)執(zhí)行準(zhǔn)備SQL 語句

EXECUTE --動態(tài)地執(zhí)行SQL 語句

DESCRIBE --描述準(zhǔn)備好的查詢

---局部變量

declare @id char(10)

--set @id = '10010001'

select @id = '10010001'

---全局變量

---必須以@@開頭

--IF ELSE

declare @x int @y int @z int select @x = 1 @y = 2 @z=3 if @x > @y

print 'x > y' --打印字符串'x > y' else if @y > @z print 'y > z' else print 'z > y'

--CASE use pangu

update employee set e_wage = case

when job_level = ?1? then e_wage*1.08 when job_level = ?2? then e_wage*1.07 when job_level = ?3? then e_wage*1.06 else e_wage*1.05 end

--WHILE CONTINUE BREAK declare @x int @y int @c int select @x = 1 @y=1while @x

print @x --打印變量x 的值 while @y

select @c = 100*@x + @y print @c --打印變量c 的值 select @y = @y + 1 end

select @x = @x + 1 select @y = 1 end

--WAITFOR

--例 等待1 小時2 分零3 秒后才執(zhí)行SELECT 語句 waitfor delay ?01:02:03? select * from employee

--例 等到晚上11 點零8 分后才執(zhí)行SELECT 語句 waitfor time ?23:08:00? select * from employee

***SELECT***

select *(列名) from table_name(表名) where column_name operator value ex:(宿主)

select * from stock_information where stockid = str(nid) stockname = 'str_name'

stockname like '% find this %'

stockname like '[a-zA-Z]%' --------- ([]指定值的范圍) stockname like '[^F-M]%' --------- (^排除指定范圍)

--------- 只能在使用like關(guān)鍵字的where子句中使用通配符) or stockpath = 'stock_path' or stocknumber

stocknumber between 20 and 100 stocknumber in(10,20,30)3

類型※數(shù)據(jù)定義語言(DDL),例如:CREATE、DROP、ALTER等語句。

※數(shù)據(jù)操作語言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句。

※ 數(shù)據(jù)查詢語言(DQL),例如:SELECT語句。(一般不會單獨歸于一類,因為只有一個語句)。

※數(shù)據(jù)控制語言(DCL),例如:GRANT、REVOKE等語句。

※事務(wù)控制語言(TCL),例如:COMMIT、ROLLBACK等語句。

SQL語言包括四類種主要程序設(shè)計語言類別的語句:數(shù)據(jù)定義語言(DDL),數(shù)據(jù)操作語言(DML)及數(shù)據(jù)控制語言(DCL)還有事務(wù)控制語言(TCL)。