版权归原作者所有,如有侵权,请联系我们

[科普中国]-数据库语言

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

1970年,美国IBM研究中心的E.F.Codd连续发表多篇论文,提出关系模型。1972年,IBM公司开始研制实验型关系数据库管理系统SYSTEM R,为其配制的查询语言称为SQUARE(Specifying Queries As Relational Expression)语言,在该语言中使用了较多的数学符号。1974年,Boyce和Chamberlin把SQUARE修改为SEQUEL(Structured English QUEry Language)语言。这两个语言在本质上是相同的,但后者去掉了数学符号,采用英语单词表示和结构式的语法规则,看起来很像英语句子,用户比较欢迎这种形式的语言。后来SEQUEL简称为SQL(Structured Query Language)语言,即“结构化查询语言”。

在认识到关系模型的诸多优越性后,许多厂商纷纷研制关系数据库管理系统(例如:Oracle、DB2、Sybase等),这些数据库管理系统的操纵语言也以SQL参照。1986年10月美国国家标准化协会(ANSI)发布了X3.135-1986《数据库语言SQL》,1987年6月国际标准化组织(ISO)采纳其为国际标准。我们称其为“SQL-86”标准。1989年10月,ANSI又颁布了增强完整性特征的“SQL-89”标准。随后,ISO对该标准进行了大量的修改和扩充,在1992年8月发布了标准化文件“ISO/IEC 9075:1992《数据库语言SQL》”,我们称其为SQL92或SQL2标准。1999年ISO又颁布了“ISO/IEC 9075:1999《数据库语言SQL》”标准化文件,我们称其为SQL99或SQL3标准。

数据库语言以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使他具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。

结构化查询语言(Structured Query Language)1最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。

国际标准美国国家标准局(ANSI)与2国际标准化组织(ISO)已经制定了SQL标准。ANSI是一个美国工业和商业集团组织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和International Electrotechnical Commission(IEC)的成员之一。ANSI 发布与国际标准组织相应的美国标准。1992年,ISO和IEC发布了SQL国际标准,称为SQL-92。ANSI随之发布的相应标准是ANSI SQL-92。ANSI SQL-92有时被称为ANSI SQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循 ANSI SQL 标准。SQL Server使用ANSI SQL-92的扩展集,称为T-SQL,其遵循ANSI制定的 SQL-92标准。

标准语句--数据操作

SELECT --从数据库表中检索数据行和列

INSERT --向数据库表添加新数据行

DELETE --从数据库表中删除数据行

UPDATE --更新数据库表中的数据

--数据定义

CREATE TABLE --创建一个数据库表

DROP TABLE --从数据库中删除表

ALTER TABLE --修改数据库表结构

CREATE VIEW --创建一个视图

DROP VIEW --从数据库中删除视图

CREATE INDEX --为数据库表创建一个索引

DROP INDEX --从数据库中删除索引

CREATE PROCEDURE --创建一个存储过程

DROP PROCEDURE --从数据库中删除存储过程

CREATE TRIGGER --创建一个触发器

DROP TRIGGER --从数据库中删除触发器

CREATE SCHEMA --向数据库添加一个新模式

DROP SCHEMA --从数据库中删除一个模式

CREATE DOMAIN --创建一个数据值域

ALTER DOMAIN --改变域定义

DROP DOMAIN --从数据库中删除一个域

--数据控制

GRANT --授予用户访问权限

DENY --拒绝用户访问

REVOKE --解除用户访问权限

--事务控制

COMMIT --结束当前事务

ROLLBACK --回滚当前事务

SET TRANSACTION --定义当前事务数据访问特征

--程序化SQL

DECLARE --为查询设定游标

EXPLAN --为查询描述数据访问计划

OPEN --检索查询结果打开一个游标

FETCH --检索一行查询结果

CLOSE --关闭游标

PREPARE --为动态执行准备SQL 语句

EXECUTE --动态地执行SQL 语句

DESCRIBE --描述准备好的查询

---局部变量

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 秒后才执行SELECT 语句 waitfor delay ‟01:02:03‟ select * from employee

--例 等到晚上11 点零8 分后才执行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关键字的where子句中使用通配符) or stockpath = 'stock_path' or stocknumber

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

类型※数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。

※数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。

※ 数据查询语言(DQL),例如:SELECT语句。(一般不会单独归于一类,因为只有一个语句)。

※数据控制语言(DCL),例如:GRANT、REVOKE等语句。

※事务控制语言(TCL),例如:COMMIT、ROLLBACK等语句。

SQL语言包括四类种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)还有事务控制语言(TCL)。