簡介
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)。