sql语言范文

时间:2023-03-15 04:07:55

sql语言

sql语言范文第1篇

关键词 存储 SQL语言 数据 自动执行

中图分类号:TP311 文献标识码:A

1关于SQL语言

SQL语言被称之为查询语言,虽然SQL语言被称为查询语言,但是实际上具有数据定义、查询、更新和控制等多种功能,它使用方便、功能丰富、简洁易学。SQL语言由3部分组成。

1.1 SQL语言课分为数据定义语言(DDL)

DDL用于执行数据库定义的任务,对数据库及数据库中的各种对象进项创建、删除、修改等操作。数据库对象主要包括表、默认约束、规则、师徒、触发器、存储过程。

例如,在SQL语言中创建一个新数据库的基本语法格式如下 :

CREATE DATABASE 数据库名称

数据库名称在服务器中必须唯一,并且符合标识符的命名规则。

此外,常用的DDL还有CREATE TABLE(创建表)、CREATE PROCEDURE(新建存储过程)等。

1.2数据操作语言(DML)

DML用于操作数据库中的各种对象,检索和修改数据。常用的DML由INSERT(插入数据)DELETE(删除数据)UPDATE(更新数据)等。例如用INSERT可添加到记录表中,语法如下:

INSERT INTO表名{字段名表}并给所有字段赋值:

若想XSB添加的记录纸给其中3个字段赋值,则写如下形式:INSERT INTO XSB(XH,XM,ZY)VALUES

1.3数据控制语言(DCL)

DCL用于安全管理,确定哪些用户可以查看或修改数据库中的数据。这类SQL语句有GRANT、EVOKE、ONNIT、OLLBACK数据库系统是一种草丛和管理数据库的大型软件、用于建立、使用和维护数据库。目前绝大多数DBMS以前述的关系模型管理数据库,并且许多关系数据库供应商都在自己的数据库中支持SQL语言。

2关于SQL存储过程

存储过程在概念上类似于程序中的函数,他们获取输入参数,以黑盒模式运行并返回响应的信息。与函数不同的是,存储过程数据库引擎执行,而不是在程序中执行。由于存储过程执行速度快,而且可以在系统启动时自动执行,不必再系统启动后再进行手工操作,大大方便了用户的使用。存储过程分为以下几点:

2.1创建存储过程

通过Management Studio环境定义一个存储过程实现向XSCJ数据库的KCB(课程表)添加课程记录的功能,具体操作如下:

在Management Studio的对象资源管理器窗口中,一次张开XSCJ数据库的子目录树下的“可编程性”―“存储过程”,在工作区窗口输入定义一个名为KC_Insert的存储过程,用来实现向KCB表中入记录后,编辑完成后,执行上段代码,执行过后会发现XSCJ目录树的“存储过程”中多了一个子项“dbo.KC_Insert”至此存储过程创建成功。

3总结

SQL Seerver 2008是Microsoft公司在2008年正式的一个SQL Server版本,是目前最新的SQL Server版本。作为一个重大的产品版本,它退出了许多新的特性和关键的改进,使其成为至今为止最强大、最全面的SQL Server数据库管理系统。所以我们还是要努力学习好SQL方面的知识。

参考文献

[1] 张彬.计算机编程教学.2012.8.556(查不到)

[2] 赫黎明.JSP编程教程、2012.8.1(查不到)

sql语言范文第2篇

[关键词]成绩分析 SQL语言

[中图分类号]F224.29 [文献标识码]A [文章编号]1009-5349(2014)09-0057-02

SQL(结构化查询语言)是一种数据库专用语言,无论是Oracle、MS SQL、Access还是其他大型公司的数据库,亦或是建立在大型主机或个人pc机上,都可以通过应用SQL语言来访问或是更新数据库的内容。由于SQL语言通用型强,在各个公司都具有通用性,所以易于学习和使用,也逐渐被各种数据库厂商应用,成为一种共通的标准查询语言。

目前各个高校几乎都购买了各种教务管理系统,他们是C/S或B/S模式的,教务管理系统会关系到学生的学籍、成绩、选课很多方面的内容,而且每个学校付给开发商的金额也不同,且开发商为了简化模式不会针对某个学校的情况去单独开发对单个学校的管理系统或管理软件,笔者学校购买的教务管理系统就不能实现学分遗留统计、遗留科目统计,更别提毕业资格审核的完成,只能通过SQL语言去实现这些功能,以下先简单地介绍一下SQL语句的基本功能。

一、SQL的基本语句

经常使用的SQL语句主要有以下几种:Select语句、Insert语句、Update语句和Delete语句。

(一)Select语句

1.语法格式

Select[Distinct][Top(数值)]字段列表From表名[Where条件]

Order By 排序字段名ASC|DESC][Group By 分组字段名][Having 筛选条件表达式]

2.Select语句的应用实例

①选取数据表中的全部数据:Select * From学生信息,这就是相当于将学生信息表中的数据全部提出来。

②选取数据表中指定字段的数据:Select学号From学生信息,这就相当于将学生信息从指定的表中提取出来。

③选取前若干条记录,且要求查询结果按降序排列:Select Top 10学号From成绩表,Order By成绩DESC,其中Top 10代表前十个数据的意思;Order by代表排序的意思,DESC代表降序的意思,所以整句化表现的就是取成绩在前十名的学号。

④根据特定条件选取数据表中的部分数据:Select * From学生信息,Where班级= '测控031',此处的where代表一个条件的筛选也就是代表班级为测控031的学生信息将全部提出来。

⑤按关键字查找记录:例如查询所有姓“李”的学生,“%”代表任意字符。Select * From学生信息,Where姓名Like‘李%'。

⑥查询符合某种条件的记录总数:Select Count(*)From学生信息,Where性别=‘男',此处count()为计数函数,本句的意思就是数男生的数目。

⑦计算学生的平均成绩:Select Avg(成绩)from成绩表,此处AVG函数便是求平均值的一个函数。

⑧组合查询:例如在“学生信息”表中只有“班级编号”字段,“班级名称”字段在“班级”表中,如果查询结果需要“学号、姓名、性别、班级名称”等字段,则需要从多个表中组合查询。SELECT dbo.学生信息.学号,dbo.学生信息.姓名,dbo.班级.班级名称,INNER JOIN dbo.班级 ON dbo.学生信息.班级编号=dbo.班级.班级编号。

(二)Insert语句

1.语法格式

Insert Into数据表名称(字段1,字段2, …),Values(字段值1, 字段值2, …)

2.Insert语句的应用实例

Insert Into学生信息(学号,姓名,性别,班级),Values(‘200703020128',‘唐丽',‘女',‘测控031'),本句的意思就是将新的数据信息添加到数据库中的。

(三)Update语句

1.语法格式

Update数据表名,Set字段1=字段值1,字段2=字段值2,[Where 条件]

2.Update语句的应用实例

Update学生信息,Set学号=‘200703020128',姓名=‘张文',性别=‘男',班级编号=‘2004030201',Where学号=‘200703020128',本句就是将数据库中学号为‘200703020128'的数据进行更新。

(四)Delete语句

1.语法格式

Delete From数据表名称[Where条件]。

2.Delete语句的应用实例

Delete From学生信息,Where学号=‘200703020128’,该句的意义就是删掉了学号为‘200703020128’的学生信息。

二、SQL语句的应用

本文以提取在校生挂科成绩的数据库程序为例来说明SQL语言的应用。

select BDInstitute.InstituteName as‘学院',

SMBasicInfo.StudentNo as‘学号',

SMBasicInfo.StudentName as‘姓名',

GRGrade.LessonInfoName as‘课程名称',

max(GRGrade.EffectiveGrade) as‘成绩',

以上这段程序将数据库表中的字段定义为新的字段以便可以更为直观的显示给大家。

from

BDClassInfo,

BDInstitute,

BDProfessionInfo,

以上这段程序便是在哪些表中可以找到这些数据。

where

BDClassInfo.BDClassInfoID=SMBasicInfo.BDClassInfoID

and BDClassInfo.BDProfessionInfoID=BDProfessionInfo.BDProfessionInfoID

and LCBeginLesson.TermNo=20131

and GRGrade.ExamProperty=‘正常'

and BDClassInfo.EntranceYear in (‘2012',‘2010',

‘2011',‘2013')

and GRGrade.CourseKind=‘选修'

and SMBasicInfo.StudentStatus=‘在籍在校'

以上就是where语句的各种限制条件比如说学籍状态为在籍在校、年级的筛选,等等。

group by

BDClassInfo.EntranceYear,

BDProfessionInfo.ProfessionInfoname,

SMBasicInfo.StudentNo,

SMBasicInfo.StudentName,

GRGrade.LessonInfoName

以上这段程序便是“Group By”的应用,从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”根据分组进行处理。

having max(GRGrade.EffectiveGrade)

order by

BDClassInfo.EntranceYear,

BDClassInfo.ClassInfoName,

GRGrade.ExamTermNo,

GRGrade.CourseKind,GRGrade.CreditHour desc

以上便是对全校学生不及格成绩进行提取的一个应用实例以便使大家更为清晰的理解。

三、结论

笔者应用SQL语句进行大学成绩信息进行分析和统计,当然每个学校的教学任务有所不同,有自己不同的特色,要根据自己学校情况再去考虑,对数据可以做一些简单的预处理

sql语言范文第3篇

静态SQL语句在程序设计时便已固定下来,它不包含任何参数和变量。

动态SQL语句,也被称作参数化的语句,在其中间包含着表示字段名或表名的参数,例如下面的语句是一条动态SQL语句:

Select * From Book Where 图书编号 =:bookCode;

其中的变量bookCode便是一个参数变量,它由一个冒号引导,在程序运行过程中,必须要为该参数赋值,该条SQL语句才能正确执行,每次运行应用程序时可以为该参数变量赋予不同的值。为参数赋值有三种方法:

①根据参数在SQL语句中出现的顺序,设置TADOQuery组件的parameters属性值为参数赋值。

②直接根据SQL语句中各参数的名字,调用ParamByName方法来为各参数赋值。

③将TADOQuery组件的DataSource属性设置为另一个数据源,这样将另一个数据源中与当前TADOQuery组件的SQL语句中的参数名相匹配的字段值赋给其对应的参数。利用这种方法也能实现所谓的连接查询,创建主要―明细型数据库应用。

在使用动态SQL语句编程时,常常用到一个很重要的方法Prepare,调用Prepare 方法之后,Delphi会将带参数的SQL语句传送给与其对应的数据库引擎,对动态SQL语句进行语法分析和优化。虽然在用动态SQL语句编程时,调用Prepare方法并不是必须的,但是调用Prepare方法后,会极大地提高动态SQL 语句的执行性能,特别是当要反复多次执行同一条动态SQL语句时,其优越性会更加明显。 如果在应用程序中执行一条SQL语句之前并没有显式地调用Prepare方法,每次在执行SQL 语句时,Delphi会隐含地调用Prepare方法以准备这个查询。

TadoQuery部件还有一个Prepare属性,这是一个布尔型属性,当其属性值为True时, 表明该查询已被准备好了( SQL 语句已被传送到数据库引擎中 ) , 当我们使用参数编辑器Parameters Editor来为动态SQL语句中的参数赋值时,当设置完相应的参数值并退出参数编辑器时,Delphi会隐含地调用Prepare方法以准备好查询。

当SQL语句执行完之后,要想准备下一个查询,首先必须调用Close方法,然后才能调用Prepare方法准备下一个查询。一般来说,在一个应用程序中应该调用一次Prepare方法,常常在窗体的OnCreate事件处理过程中调用Prepare方法, 然后用上述介绍的方法为参数赋值,最后调用Open方法或ExecSQL方法执行SQL语句,以完成查询。

当然在调用Prepare方法准备好一个查询时,会消耗一些数据库资源, 因而每当一个查询执行完毕之后,要养成调用UnPrepare方法以撤消查询的好习惯。在运行程序过程中,通过程序改变TQuery或TADOquery部件的SQL属性值时,Delphi会自动地调用Close方法和UnPrepare 方法,以撤消查询。

在程序运行过程中,要想设置Tquery或TADOquery部件的SQL属性,必须首先调用Close方法,关闭TQuery或TADOquery部件,然后再调用Clear方法清除SQL属性中现存的SQL命令语句, 最后再调用Add方法为SQL属性设置新的SQL命令语句。例如:

datamodule4.adoquery2.close;

datamodule4.adoquery2.sql.clear;

datamodule4.adoquery2.sql.add('SELECT 借书证号,密码 FROM 〔user〕 WHERE (借书证号 = :tt)');

datamodule4.adoquery2.parameters〔0〕.value:=username; datamodule4.adoquery2.open;

在为TQuery或TADOquery部件设置SQL属性时调用Close方法总是很安全的,如果TQuery或TADOquery部件已经被关闭了,调用Close方法时不会产生任何影响。在应用程序中为SQL属性设置新的SQL 命令语句时,必须要调用Clear方法以清除SQL属性中现存的SQL命令语句,如果不调用Clear方法,便调用Add方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在现存SQL命令语句后面, 在程序运行时常常会出现出乎意料的查询结果甚至程序无法运行下去。

在这里要特别注意的,一般情况下TQuery或TADOquery部件的SQL属性只能包含一条完整的SQL语句,它不允许被设置成多条SQL语句。当然有些数据库服务器也支持在TQuery或TADOquery部件的SQL属性中设置多条SQL语句,只要数据库服务器允许这样,我们在编程时可以为 SQL 属性设置多条SQL语句。

在为TQuery或TADOquery部件设置完SQL属性的属性值之后,也即编写好适当的SQL程序之后,可以有多种方式来执行SQL程序。

在设计过程中,设置完TQuery或TADOquery部件的SQL属性之后将其Active属性的值置为True, 这样便可以执行SQL属性中的SQL程序,如果应用中有与TQuery或TADOquery部件相连的数据浏览部件( 如TDDGrid TDBEdit等)那么在这些数据浏览部件中会显示SQL程序的执行结果。

在应用程序运行过程中,通过程序调用TQuery或TADOquery组件的Open方法或ExecSQL 方法可以执行其SQL属性中的SQL程序。Open方法和ExecSQL方法是不一样的。Open方法只能用来执行SQL语言的查询语句(Select命令), 并返回一个查询结果集,而ExecSQL方法还可以用来执行其它常用的SQL语句(如INSERT, UPDATE, DELETE等命令),例如:

Query1.Open (这样会返回一个查询结果集)

如果调用Open方法,而没有查询结果时,会出错。此时应该调用ExecSQL 方法来代替Open方法。如:

Query1.ExecSQL (没有返回结果)

当然在设计应用程序时,程序设计人员是无法确定TQuery或TADOquery组件中的SQL 语句是否会返回一个查询结果的。对于这种情况应当用Try…Except模块来设计程序。在 Try 部分调用Open方法,而在Except部分调用ExceSQL方法,这样才能保证程序的正确运行。

例如:

Try

Query1.Open

Except

Query1.ExecSQL

End

通过Tquery或TADOquery组件可以获得两种类型的数据:

u “活动”的数据

这种数据就跟通过TTable部件获得的数据一样,用户可以通过数据浏览部件来编辑修改这些数据,并且当调用Post方法或当焦点离开当前的数据浏览部件时,用户对数据的修改自动地被写回到数据库中。

u 非活动的数据(只读数据)

用户通过数据浏览部件是不能修改其中的数据。在缺省情况下,通过TQuery部件获得的查询结果数据是只读数据,要想获得“活动”的数据,在应用程序中必须要设置Tquery或TADOquery组件的RequestLive属性值为True,然而并不是在任何情况下(通过设置RequestLive的属值True)都可以获得“活动”的数据的,要想获得“活动”的数据,除了将TQuery部件的RequestLive属性设置为True外,相应的SQL命令还要满足以下条件。

本地SQL语句查询情况下,要得到可更新的数据集,SQL语句的限制为:

n 查询只能涉及到一个单独的表

n SQL语句中不能包含ORDER BY命令

n SQL语句中不能含聚集运算符SUM或AVG

n 在Select后的字段列表中不能有计算字段

n 在Select语句WHERE部分只能包含字段值与常量的比较运算,这些比较运算符是:Like, >, =,

当通过SQL语句查询数据库服务器中的数据库表:

n 查询只能涉及到一个单独的表

n SQL语句中不能包含ORDER BY命令

n SQL语句中不能含聚集运算符SUM或AVG运算

另外,如果是查询Sybase数据库中的表,那么被查询的表中只能有一个索引。

sql语言范文第4篇

摘要:本文针对教材中的一些例题进行了分析与探讨,给出了同一问题不同的解决方案;设计了面向SQL语言的辅助教学系统。实践教学表明,这些措施的实施为学生深刻领会和运用SQL语言提供了帮助,增强了学生的实践能力。

关键词:SQL语言;数据库系统;存储过程

中图分类号:G642 文献标识码:B

引言

在“数据库原理”课程的教学中,SQL语言是一个难点,也是一个重点,加上该课程的教学大纲中明确要求学生要全面掌握、深刻理解、熟练应用SQL语言。尽管SQL语言有简单和高度结构化的特点,但在实际教学中学生常是“上课一听就懂,上机无法下手”,这种情况基本上是理论学习和上机实验不能同步进行。本文对教材中的一些例题进行了分析,由于教材中使用的数据库系统与实际使用有一定的差距,因此这些例题不能在一些数据库中实现,导致了学生上机测试的困难。本文以SQL Server 2000为数据库的实验平台,对那些不能实现的例题进行了相应的转化,给出了同一问题的多种实现方法,设计了针对SQL语言使用的辅助实验系统。为了进一步提高学生对SQL的实践能力,介绍了存储过程和自定义函数的使用。在进行SQL语言教学的过程中,这些方法和措施的实行,已经在数据库的综合实验和毕业设计中都得到很好的体现。

1教材例题,缺乏具体环境

例题是学生学习新概念、领会新知识的一种重要手段,它在整个教学过程中起着非常重要的作用。尽管SQL语言是一种通用的语言,但是在不同的关系数据库中管理系统中,仍然有一些微小的差别。教材中推荐使用国产金仓数据库管理系统Kingbase Es作为实验平台,但由于该数据库不具有普遍的使用性,而目前普遍使用的是SQL Server、Access、Oracle等数据库的系列版本,这造成了例题与实际使用环境的脱节。因此,在教学中,如何根据使用环境的不同,对教材种的例题进行及时的调整显得尤为重要。在本文中,以SQL Server

2000作为数据库的使用环境,下面通过一些例题来说明教材[1]中的实现方式与实际使用环境的差异性。

【例51】 查询选修了课程1又选修课程2的学生。

教材上给出了如下的表达:

Select Sno

From SC

Where Cno=’1’

Intersect

Select Sno

From SC

Where Cno=’2’

而这种表达方式在SQL Server 2000中是无法实现的。在三种集合操作中,只有并操作Union可以以这种方式使用,而交操作Intersect和差操作Except必须通过转化才能在SQL Server 2000中使用。Intersect和Except关键字在SQL Server 2000中是两个函数,分别表示两个集合的交运算和差运算。下面给出【例51】对应的正确代码:

Select Sno

From SC

Where Cno=’1’ AND Sno in

(Select Sno

From SC

Where Cno=’2’);

同样【例52】的代码也必须进行转化。

【例39】查询与“刘晨”在同一个系学习的学生。

在教材别强调子查询一定要跟在比较符之后,并指出了下列语句

Select Sno,Sname,Sdept

From student

Where (Select Sdept

From Student

Where Sname=’刘晨’)= Sdept

是错误的,但是上述语句在查询分析器中能正常执行,且能给出正确的结果。

2一题多解,拓展学生思维

由于每个学生思考的途径不同,可能会对同一个问题有许多不同的解法,在教学中,鼓励学生自觉探求多种解法,这样不仅使学生的基础知识、基本技能得到训练,而且使学生的能力得到增强,智力得到开发。

【例21】查询缺少成绩的学生的学号和相应的课程号。

Select Sno,Cno

From SC

Where Grade IS NULL;

所谓空值是“不知道”或“无意义”的值,“0”和“空格”都不是空值。以上代码等同于

Select Sno,Cno

From SC

Where Grade =’’;

【例7】将计算机科学系全体学生的成绩置零。

Update SC

Set Grade=0

Where ‘CS’=

(Select Sdept

From Student

WhereStudent.Sno=SC.Sno);

习惯上,where后面条件中“=”前面是一个字段,而不应该是一个常量,同样,以上代码也可以进行相应的转化

Update SC

Set Grade=0

From SC,Student

Where Student.Sno=SC.Sno and Student.Sdept=’CS’

3常见错误,不容忽略

Delete语句的功能是从指定的表中删除满足where子句条件的所有元组。如果省略了where子句,表示删除表中全部元组,但表的定义仍在字典中。也就是说,Delete语句删除的是表中的数据,而不是关于表的定义。因此当表中的某一字段设为int型,且为自增型的时候,如果删除了该表中的全部数据。当再插入新的数据时候,自增型字段的数据不是从1开始,而是从删除数据中的最大值加1开始。为了避免这种情况的产生,在SQL Server 2000中提供了Truncate 命令。因此必须根据具体情况采用相应的命令。

4讲解例题,增设辅助系统

在讲SQL语言使用的时候,传统的方法只是把例题中每一条语句给学生解释一遍,这样教师教起来没有激情,学生听起来倍感枯燥。为此,设计了一个针对SQL语言使用的辅助系统,该系统为学生提供了一个上机操作SQL 语言的平台,让学生通过在线“做”上机实验,不断地观察、交流和反思,从而更好地“学”SQL 语言的结构和元素。

5面向应用,提高实践能力

SQL语言在实际开发应用系统过程中占有非常重要的地位。目前,使用SQL编程来访问和管理数据库中数据的方式主要有:嵌入式SQL,PL/SQL,ODBC,JDBC以及OLEDB编程等方式。下面仅对经常使用的嵌入式SQL和PL/SQL来做进一步分析:

(1) 嵌入式SQL::是将SQL语言嵌入程序设计语言中,被嵌入的程序设计语言包括所有的高级语言。但是教材中给出的语句在应用系统的开发过程中使用频率是相对比较低的,如何将这些思想和某一具体的开发工具相结合,使学生更容易理解这些功能,是教学过程中面临的一个非常重要的问题。

【例】 连接数据库的语句

Exec SQL Connect to target [AS connetion-name ][User user-name]

和关闭数据库的语句

Exec SQL Disconnect [connection];

这些语句在目前常用的开发工具是很少使用的。目前常用的开发工具中,连接和关闭数据库是通过开发工具中带的控件来完成的,如大家熟悉的ADO技术等。

(2)PL/SQL是编写数据库存储过程的一种过程语言,在教材中对存储过程的介绍比较少,但在实际的应用系统开发中,存储过程的开发可以极大地提高软件的可维护性和系统的运行速度。下面给出将两个字符串连接成一个字符串的例子:

Create procedure strconnect @str1 varchar(20),@str2 varchar(20),@connect varchar(40) output

As

Select @connect=@str1+@str2

(3) 自定义函数。在系统开发过程中,经常发现一些相同的功能在多个地方使用,因此,可以通过自定义函数来完成这一功能。同样,下面给出一个将两个字符串连接成一个字符串例子的代码:

Function strconnect(str1,varchar(20),str2 varchar(20)

Begin

Return str1+str2;

End;

总之,进一步掌握SQL语言这些功能,能有效地提高学生的动手实践能力,增强他们的就业竞争力。

参 考 文 献

[1] 王珊,萨师煊. 数据库系统概论[M]. 高等教育出版社,2006.

[2] 曹付元,李茹,梁吉业,王俊红. “数据库原理”课程中实践教学的创新模式探索[J]. 高等理科教学(教育教学研究专辑),2008:168-170.

sql语言范文第5篇

关键词:SQL;Structs; Hibernate; 自动练习系统;计算机辅助教学

中图分类号:TP311.52 文献标志码:A 文章编号:1673-8454(2013)24-0075-04

一、引言

SQL是结构化查询语言(Structured Query Language)的缩写,是当前最为成功、应用最为广泛的关系数据库语言。SQL之所以能被用户及业界接受并成为国际标准,主要是因为它语法简洁、方便实用、功能齐全强大。SQL语言包括数据查询、数据操纵、数据定义和数据控制四个功能。

SQL语言是高校计算机及相关专业学生必学的一门语言之一。而学习该语言的重要途径是练习,以往传统的练习方式由于学生得不到及时反馈使得学生的学习进度和学习积极性受到较大影响。本文尝试通过设计一个针对SQL SERVER的SQL语言自动练习系统,[1]在学生输入答案时,系统能马上评判该题,判断题目的正误,并提示出错原因。本系统较为关键的问题包括:

1.设计SQL语句正误判断的算法

一般算法是写SQL的语法分析器,对学生给出的答案与参考答案根据SQL语义进行比对。[2-7]这样的算法较具有通用性,但算法较为复杂,且由于学生解答五花八门语义分析有时误判率会很高。本文摒弃这种思路,直接从结果进行判断,即直接执行学生的答案及参考答案,若执行结果一致且结果集为非空,则判定正确,否则再通过简单的语法判断来判定正误。但这里有个问题,若执行结果,需要数据库里面专门为这些题目设定数据,这就需要设计较为完备的数据库。

2.设计较为完备的数据库

数据库的设定包括两部分,一部分是与管理相关的数据,另一部分则是与练习问题相关的数据。对于第一部分数据,我们可以在初始的时候设定,而对于与练习问题相关的数据,则在教师录入问题时设定。

二、SQL练习系统需求分析

笔者在进行数据库原理课程教学过程中发现,虽然SQL语言语法简单,但许多学生由于缺乏练习仍然无法理解和掌握,导致在后续很多课程中无法熟练地利用SQL对数据库进行操作。一般课后的作业布置或练习由于学生不知道标准答案,或者由于标准答案与自己所写的答案有所区别而无法判断自己所写是否正确,从而效果不佳,较为明显的是学生不可能多次重复做这个练习。因此笔者尝试建立一个自动练习系统,供学生练习。学生可以在该系统上进行SQL语法练习,系统会根据学生的答案给出评判。通过对选修数据库原理的学生的调研发现,绝大多数学生较喜欢在这样的平台上练习直至较为熟练地掌握SQL语言。

SQL练习系统的主要功能是实现给学生提供SQL语法练习的平台并实现自动化评判。本系统包括用户管理模块、练习题管理模块及自动批改模块。用户管理模块的主要功能是增删系统用户,并能为用户设置系统权限。其中增加用户除允许用户注册外,还应允许管理员或教师用户从Excel或其他文本文档中批量导入用户。对于管理员用户还应具有初始化其他用户密码的权限。练习题管理模块主要包括练习题的录入及相关数据库表的创建,练习题即为学生练习所用的题目,由于本系统采用执行结果比对的评判方式,因此当练习题所涉及的表不存在的时候,必须要求维护题库的教师用户创建数据表并输入相应的数据。自动批改模块主要通过在比较系统中执行用户输入的SQL语句和执行参考答案所得的结果,来评判用户所写的SQL语句是否正确。SQL练习系统的主要功能结构如图1所示。

三、SQL练习系统设计

本系统是基于WEB的,且操作系统有可能选择LINUX,因此本系统采用ECLIPSE作为开发工具,采用JSP、SERVELET、HTML、CSS、STRUTS等技术。

一般的操作流程为:用户在客户机上提交动态HTML页面,向服务器提出请求;ActionServlet接收这些请求,Struts根据strutsconfig.xml文件给相关的请求分配给处理模块进行处理。在业务层,相关业务处理逻辑用该处理模块提供的方法来实现业务逻辑处理。采用Spring技术把数据库与业务处理逻辑模块关联,利用hibernate的对象化映射,将模块操作行为映射为对数据库的操作,从而最终实现用户的请求。下面我们利用面向对象技术根据角色活动来设计系统。

1.用户登录

系统涉及的参与者包括Student(学生) 、Teacher(教师)、Administrator(系统管理员)。系统根据用户名判断用户身份,然后进入不同的页面。

2.学生在系统中的活动

系统通过用户名判断用户是否为学生。若是学生用户,则登录系统后可以看到“练习”、“练习成绩管理”、 “用户信息”三个选项。具体如图2。

(1)进行练习:①用户可以设置每次练习的题量及时间。②用户选择一个练习之后,可以查看该练习的详细信息,其中包括练习的知识点、难易程度、练习时限。我们还考虑统计某道题目的正确率=正确的答题次数/所有的答题次数。

(2)练习管理:①普通学生用户可按照不同的查看方式查看自己已经练习过的考试的情况、排名。②另外我们在练习系统中引入了学习小组。学习小组的组长可以查看本小组成员的练习情况,并有针对性的进行共同学习或提高。

(3)练习信息:①用户可查看所有的练习列表,包括尚未做过的及已经做过的。②用户选择一次练习后,可查看该练习的详细信息,主要包括知识点、练习的难易程度、练习的总体正确率等。练习还将显示成绩、排名信息(比如前30%等)。若出错,则还应提示正确答案。③学习小组组长可以打印本学习小组成员的练习情况报表。另外我们也提供了个人练习情况的报表。

(4)用户信息:用户可看到个人的姓名、学号、性别、院校信息,可以修改电话号码,登录密码,QQ、Email、手机号等信息。

3.教师在系统中的活动

教师用户在系统中登录后,有练习题管理、练习管理、测试管理及练习结果查询等四项功能。其中

(1)练习题管理。主要是对练习题库的维护。由于我们采取的自动评阅算法是以执行结果来评判是否正确,因此在教师设置题库的时候,需要选定该练习题是针对数据库中的哪个表或哪几个表来操作的,若题目所涉及的表不存在,则还需要输入该表,并加入测试数据。详细参考“四、关键算法设计”中的“准备工作”。图3是教师用户添加练习题的界面。

(2)练习管理。主要是为促进学生学习,教师可以在此生成课后练习作业直接布置给学生。学生可反复练习,直至完全掌握为止。

(3)测试管理。主要是教师为检验学生是否已经掌握SQL而设置的,一般学生只能做一次。但为了系统的开放性,实际在系统中,我们允许教师设定最大测试次数的,默认值为1。在测试打分中,目前的系统实现了自动评阅,但为系统的可扩展性,还允许教师手动评阅。

(4)练习结果查询。教师可以查看学生的练习情况,从而根据这些数据来改进自己的教学。

四、关键算法设计

本系统的主要算法是自动评判算法。由于我们的自动评判算法的特殊性,在实现该算法前,应提前准备算法处理环境。

1.准备工作

由于算法的实现原理是比较两次执行的结果,因此数据库中的相关表是否存在就对算法能否最终实现起到决定性的作用。在教师用户添加练习题的时候,来判断该环境是否准备完成,由教师用户来创建完善算法执行所需的环境。

在图3中,教师按下添加题目按钮且“所涉及的表已存在”,则该题目直接写入题库表,否则“添加题目”按钮为灰色不可用。若用户在最后一个文本区内写了创建表的create语句,则按创建表该语句会被程序直接执行,若合法则创建一个新表,若不合法,程序会提示出错,教师用户可检查自己写入的语句,再次执行,直至创建成功为止。在创建成功后,系统受限把题目内容和参考答案一并写入题库表,并弹出一个对话框,询问教师用户是否需要输入一些测试数据,一般系统建议选是。

下面着重介绍系统如何判断题目所涉及的相关表是否存在,具体思路如图4所示。

系统首先根据参考答案来获得当前题目所涉及的表,然后与数据库内已有的表进行比较。由于SQL的查询语句的语法比较固定,在表名后一般跟where或group或having或order,所以只要判断这几个词之间的内容并利用“,”作为分隔符来判断表名即可。比如对于参考答案“select student.studentid, student.name, subject.name, score.score from student, subject, score where student.studentid=“001” ”,则根据算法思路,获得的strTable=“student, subject, score”,然后用“,”作为分割,获得的tables[0]=student, tables[1]=subject, tables[2]=score。

2.自动评判算法

本文所设计的自动评判算法主要是依据两次SQL语句的执行结果来判断这两个SQL语句是否等价,即来评判学生给出的答案是否正确。但用这种方式来判断与数据表中的数据相关性太大,比如对表subject(subjectid, subjectname, credit, semester, required)查询“数据库原理与应用”课程的详细情况,参考答案为“select * from subject where subjectname=“数据库原理与应用””,学生给出的答案为“select * from subject”。显然答案是不对的。但当subject表中无任何数据或无“数据库原理与应用”课程的时候,两次执行的结果是一样的。因此我们在设计该算法的时候考虑简单的来分析下SQL语法。具体思路如下:

(1) 执行学生答案,若合法,则保存学生的执行结果至动态数组TRYRESULT中。否则直接评判错误,算法退出。

(2) 执行参考答案,若合法,则保存执行结果至动态数组RESULT中。若语法错误或相关表结构不一致时,直接提示参考答案错误或提示由于表结构不一致无法评判该题,直接退出算法。

(3)比较RESULT与TRYRESULT,若两者不相同,则判定学生答案出错;若相同则分两种情况:①RESULT非空,则判定学生答案为正确;②RESULT为空,则转到(4)。

(4) 提取参考答案中的关键字,存放到动态数组ANSWERKEYS中;对比ANSWERKEYS中的关键字,从学生的答案中查找相应的词,若都查到则判定学生答案正确;若查不到,则判定学生答案出错。

在上述算法中,最困难的是(4)。它实际上涉及到SQL语法解析,本文中采用了较为简单的评判算法。只抓取几个较为简单的关键字,以SQL语法中的关键字为主,再加上条件判断中的条件语句。提取关键字的算法如下:①把SQL语法相关的关键字存入KEYS[]数组中;②取出KEYS[]中的关键字与参考答案进行比较;③判断比较结果,若存在,则把该关键字存入ANSWERKEYS[]中;④取出参考答案中带有“=”或带引号的字符串存入到ANSWERSKEYS[]中。

最终关键字存放在ANSWERKEYS[]数组中。例如:“select * from subject where subjectname=“数据库原理与应用””,在ANSWERKEYS数组中,保存的关键字为select, from, subject, where, subjectname=“数据库原理与应用”。然后通过用字符串函数在学生答案中查找对应的字符串。由于通过前面的执行,语法错误已经被排除,因此本文的算法评判的正确率在目前的数据库中达到97%以上。具体结果如表1。

在上述数据中需要提出的是,有些题目本算法无法判断其正误,主要是由于题目中涉及的表结构与数据库中已有表的结构不一致。在表1的第一行数据中,在评判错误的2.68%中,无法评判的占95.97%。

五、结束语

本文设计的基于Web的SQL练习系统界面简单,功能较为完备。在设计之初参考过很多在线考试系统和自动评判系统。本系统具有以下三个特点:

(1) 直接执行SQL语句能判断学生提供的答案是否符合语法规范。而通常的SQL语义分析算法较为复杂,且由于学生提供的答案五花八门,可能导致判断失误。而我们通过直接执行,可以利用系统自带的解析器来解析语法,既简化了算法又保证了正确性与可靠性。

(2) 仅在当执行的结果集为空时来分析SQL语句。这样算法简单可靠,除了表或表结构不存在或不相符的情况,一般都能正确的评判。目前的测试数据集中还未出现由于其他原因无法评判或评判失误的情况。

(3) 作为对(2)的一种补救措施,我们在教师用户录入题目的时候,根据他提供的参考答案来判断他在题目中所涉及的表是否存在,并强制要求其创建该表,建议其输入测试数据。

(4) 虽然目前系统主要用于练习,但系统中提供了教师管理及考试管理的接口,供以后系统扩充使用。因此本系统具有开放性和可扩展性,比如自动组卷、手动评判等接口。

在测试过程及学生实际使用过程中,系统运行稳定可靠,速度较快,且评判的失误率极低,受到广大师生的好评。但系统也存在一些缺点,最大的缺点是,系统目前没有判断用户所涉及的表的结构是否与数据库内已经存在的表结构一致,从而直接导致有些题目无法评判。临时的解决方法是通过判断参考答案select关键字至from关键字之间的字段(即题目中所涉及的数据表结构)与数据库内已存在的同名的表结构是否一致,若不一致则考虑在另外的数据库中创建该表。另一个目前未解决的问题是,随着题目的增多,必然会删除一些陈旧的不典型的题目,此时仅与这些题目关联的数据表应被删除。[8]在今后系统的改进中将侧重解决这两个问题。

参考文献:

[1]由东友.SQL Server考核自动阅卷系统设计与实现[D].长春:吉林大学,2012.

[2]李海龙等.通用标准SQL语法分析模型[J].小型微型计算机系统, 2003(11): 1969-1972.

[3]孙兆玉等.一种SQL语法分析的策略和实现[J].计算机应用,2007(6):18-23.

[4]蔡雷. 数据库查询语言SQL的语法分析及实现[D].天津:天津大学,2006.

[5]丁祥武等.SQL测试用例集的自动生成[J].计算机应用与软件,2012(8):185-199.

[6]曹婧华等. Delphi编程实现SQL语句的实验教学[J].长春大学学报,2011(4).

[7]杨鹤标,陈力.自然语言向SQL代码的转化方法[J].计算机工程, 2011(23).

sql语言范文第6篇

关键词:多语言 数据抽取 对应关系

中图分类号:TP301.6 文献标识码:A 文章编号:1674-098X(2017)02(c)-0153-02

目前,数据库在全世界范围内都得到了非常广泛的应用,但数据库的使用和显示语言并没有得到有效的统一。在日常工作中,一个国家的公司可能与另一个国家的公司合作做项目。但是两个不同语言国家的公司合作,语言的转换就成了一个需要考虑的问题。

从图1我们可以看出,该软件无论是登录界面还是数据抽出的界面都是由日语的字段组成。其中包含了如:ロット番号、得意先コ`ド等字段。因此,如果两个不同国家的人合作,若都用自己本国语言来进行一些数据操作,则对项目后期的合成带来不便;若只用一国的语言,那么对另一个国家的工作人员来说有极大的语言障碍。文章将提出基于SQL 的数据语言转换方法,以便让不同母语的人在应用的时候,能够克服语言障碍。

1 相关工作

目前,实现数据库的多语言转换的方法主要是两种:(1)使用配置文件;(2)使用第三方语言控件。但是使用这类方法存在一些不足之处,使用配置文件很容易使用户的资料和设置破损;而用第三方语言控件则需输入大量数据,载入速度大大变慢,编译效率降低。

因此在面向对象程序设计的基础上,借鉴多语言切换方案,转换方案思路如图3所示。

如图2可知,该方案是将多语言数据输入数据库,缩短对可执行文件的长度,大大提高系统启动速度,并且保证数据不丢失,从而实现软件界面的多语言转换。

运用该思路,也可将所需要用的软件的语言进行切换:初始是日语,切换成功后,则接下来可用中文进行操作。若是操作完成后,如有需要,可按原方法再重新切换回来。

2 数据语言的转换

2.1 不同语言的数据间对应

对于原先保存在数据库中的数据,其语言已经固定。比如原来的数据是日语,那么抽出来的也是日语。那么现在在前台调用的人员想看到中文的数据,则需要事先对数据进行转换。

首先查找出原日语数据库中的主要数据项目名(可根据一些列名或者标题名来查找)。

再创建语言之间的对应关系表,如表1所示。根据数据中的字段制定上述关系对应列表,并给予编号1、2、3......一个编号(key)对应一组关系。在调用的时候,即可根据编号将日文对应的中文字段抽调出来。

2.2 含相同字段间不同语言切换

在一些主要字段中,可直接采用关系对应表的方式进行转换。但是考虑到一些字段会反复出现,或是许多字段有重复的部分,则可建立不同和相同字段间的映射关系,如图4所示。

如图3可知,用户要查找有关“商品コ`ド”(日文)的数据,但“商品”(日文)这个字段在其他字段中反复出现,因此可以通过该字段同时抽取其他含有该字段的项目名。

3 数据多语言的抽取

3.1 数据抽取思路

在抽取前首先要增加两个语言控件,分别为日文、中文。当用户在前台选择“中文”控件的时候,中文稻菹允境隼矗选择“日文”的时候,日文数据显示出来。

下面是数据抽取整体思路:(以“商品コ`ド”为例)

TextBox

String

商品コ`ド

商品コ`ド 3 INNER JOIN 商品中文 JBT ON

3.商品コ`ド=JBT.商品代码

3.2 数据抽取结果

利用上述思路,先从数据库中抽取日文数据,然后再从相应的中文表中抽取中文数据,抽取结果如图4所示。

由图4可得,左侧原数据是日文版的,经转换后可得右侧中的中文数据,“ロット番号、ステントI部”等字段,均已经显示为中文的“批号、支架营业部”等,这样就方便了不同语言的用户查看数据。

4 结语

文章提出了一种基于SQL Server的数据语言转换方法。该方法首先查找出原日语数据库中的主要数据项目名,根据这些项目名建立相应的对应关系表,再找出含有相同字段的项目名,建立多个对应关系表。然后,建立两个语言的控件,并通过选择相应的编号(key)来抽出相应的数据,从而显示不同语言下的数据,方便了不同语言的用户查看数据。

参考文献

[1] 杨永国.基于SQL Sever数据库技术的多语言转换[J].硅谷,2013(1):31-32.

[2] 李兴原,丁刚.基于SQL Sever数据库技术的多语言转换[J].合作经济与科技,2008(12):46-47.

[3] 王芳.SQL Server的数据转换[J].现代企业教育,2014(12):489-489.

[4] 易国洪.对象和对象-关系DBMS[J].科技广场,2007(1):85-88.

[5] 刘晓娟.关系数据库运用分析[J].黑龙江科技信息,2008(4):60-60.

[6] 黄锐.SQL Server对XML文档的数据抽取方法的分析与实现[J].桂林航天工业学院学报,2006,11(2):24-25.

[7] 谭正云.用优化SQL语句提高数据库ETL效率[J].金融科技时代,2013(7):66-67.

sql语言范文第7篇

【 关键词 】 SQL语言;数据库;数据安全

1 前言

作为信息系统建设过程中的核心部分,数据库不仅是服务于业务系统的正常运转,而且由于数据库是储存数据与信息的载体,所以对于各行各业的业务发展也起到了至关重要的失去作用。因此无论是小到企业、单位,大到政府、国家,数据库的安全性保障与控制都势在必行。一方面,由于数据库需要对外提供数据与信息,因此在数据进行访问与存取时需要保障安全性;另一方面,数据在存储与传输的过程中,可能被篡改或丢失,这一方面也需要保障安全性。因此在数据库的系统的实施过程中,相应的安全措施也成为衡量其优良重要的性能指标。

2 SQL语言在数据库安全方面的应用

如图1所示,数据库的安全控制一般包括几项内容。

身份认证:验证用户是否具有连接到SQL Server数据库的资格。

操作权控制 & 文件操作:验证用户是否具备相应的操作对象与操作类型的权限。

数据库的加密存储与冗余:即对数据库库进行加密处理,以及数据的备份策略。

1) 身份认证:对于非法用户的控制。

对于非法进行数据连接和访问的用户,一般采取的策略即系统保护机制,通过设置系统账号和密码进行主动保护,另一方面,可通过强认证方式,例如通过数字证书,通过用户的签名、指纹、声音、虹膜等用户特有的特征来进行用户的验证。

2) 操作权限控制、文件操作:SQL语言对于数据库存取的控制。

SQL标准语言能够支持数据库的自动存取控制,一般是通过授权语句 Grant 和收权语句 Revoke来实现的。

a) 用户权限的设置

在进行用户权限设置时,涉及到两大内容:可操作的数据本身及可进行哪些操作,即操作的对象和类型。在对用户进行制受权时,就是定义所授权的用户可以对哪些数据进行何种操作。如表1所示即为用户权限设置的方法。

从表1可见,对于数据库中的表、视图和列,赋予的可进行的操作有查询(Select)、插入(Insert)、更新(Update)、删除(Delete)以及其总和All Privilege。授予TABLE本身的操作权限有修改和索引。 授予数据库的操作权限是创建表,而且对这个表空间有使用(存储)的权限,并能够在系统中创建新的数据库。

b) SQL语言中授权与收权语句的具体使用方法

授权语句(Grant),其主要功能是将某个数据对象的操作权限分配给某个用户。

语法如下:

GRANT 权限1[,权限2,…] [on对象类型 对象名称] TO 用户1[,用户2,…]

[WITH GRANT OPTION]

在授权语句的最后[With Grant Option]选项的功能是设置允许进行权限的转移,即被指定的用户可以将此权限转交给其它的用户。

对于数据对象的访问权限控制,能够很好的对数据库的使用人员进行控制,分级分组进行管理,有利于保障。以下为授权请问的使用举例。

例1:将学生基本表(Students)中的“name”的修改、查询功能分配给用户u1。则语句的使用方法为:

GRANT UPDATE(name),SELECT ON TABLE students TO u1。

例2:将表student, score的插入、删除、修改操作权限分配给用户u1和u2。则语句使用方法为:

GRANT ALL PRIVILIGES ON TABLE student,score TO u1,u2。

例3:将表score的查询功能分配给数据库中的全部用户。

GRANT SELECT ON TABLE score TO PUBLIC;

例4:将在Mydatabase数据库中建立表的功能分配给u2。

GRANT CREATETAB ON DATABASE mydatabase TO u2。

例5:将Students的查询功能分配给u3,并允许用户u3能够进行权限的转移。

GRANT SELECT ON TABLE students TO u3 WITH GRANT OPTION。

例6:用户u3将查询students表的权限转移给用户u4。

GRANT SELECT ON TABLE students TO u4;

收权语句(Revoke),其主要功能是把已经授权的信息全部撤销。

语法如下:

REVOKE 权限1[,权限2,…] [ON对象类型对象名] FROM 用户1[,用户2,…]。

例7:将用户u1修改student表中列 name的权限取消。

REVOKE UPDATE (name) ON TABLE students FROM u1。

例8:将用户u3查询students表的权限取消。

REVOKE SELECT ON TABLE students FROM u3。

3) 数据加密。

数据加密的目的是为了保障数据在存储、传送过程中的完整性、机密性、可用性。对于如银行、保险、政府、军工等行业的数据库中存储的数据,保密级别要求较高,除了严格的身份认证与授权认证方式外,数据加密技术也必不可少。数据加密的一般方法即将源数据加密为无法直接进行访问或识别的数据,即所谓的明文加密为密文,在不知道加密算法的前提下,用户是无法获取到真实的数据的。主流加密的方法有几种。

替换法:将源数据中的每一个字符逐一转换成为密文。

转换法:对于源数据中的字符进行顺序调换。

由于这两种方法单独使用时都存在一定的局限性,因此一般会结合这两种方式,来提高数据的安全性。

3 结束语

多年来,数据库的安全一直是一个没有完全解决的问题。一方面是由于数据库系统的日益复杂,在确保其查询、修改、添加、统计等功能能够便捷使用的前提下,无法兼顾其安全;另一方面由于数据库能够给管理员最大的权限,因此对于人为的数据泄漏没有很好的解决方法,对于其安全性也带来了极大的挑战。本文通过对于SQL语言在数据库安全方面的应用,细化其权限分配,以期能够尽量地避免某一个用户占用数据库的大部分权限,减少数据库的安全风险。同时通过强身份认证与相应的加密手段,加强数据的保护。

参考文献

[1] [美]Robert Sheldon 著,黄开枝等译.SQL 实用教程[M].北京:清华大学出版社,2004(34-50).

[2] [美]Alex Kriegel、Boris M.Tnukhnov著, 陈冰等译.SQL宝典[M].北京:电子工业出版社,2003(19-30).

[3] 张勇.高安全的数据库管理系统保护技术研究[D].华中科技大学博士学位论文, 2003.

[4] 程万晕.多级安全数据库管理系统的研究与实现[D].东北大学博士学位论文, 2003.

[5] 彭湃,戴一奇,李武军.网络密文数据库的设计[J].清华大学学报(自然科学版),2001(1), 92-95.

作者简介:

赵轶(1981-),男,山东人,工程师;主要研究方向为计算机应用。

sql语言范文第8篇

关键词:预编译器;嵌入式SQL;数据库应用

中图分类号:TP311.13 文献标识码:A 文章编号:1007-9599 (2012) 18-0000-02

1 PRO * C/ C++预编译器介绍

所谓PRO * C/ C++预编译器实际上就是编译C或者C++语言以及ORACLE数据库接口的软件包。在预编译器里可以嵌入SQL语言,因此能够让程序员更加灵活访问数据库,因此在这个编译器软件包下,能够让程序员同时在VC开发环境里使用高级程序语言如C和C++以及SQL数据库操作语句。因此能够更好的构建程序模块。将编程工作变得更加方便,如果不使用这种PRO * C/ C++预编译器软件包。那么要想直接操作ORACLE等关系数据库中的数据就变得非常困难了。

2 在VC6.0开发环境下配置PRO * C/ C++预编译器方法分析

如果程序员在VC6.0下直接软件开发,那工作往往是事倍功半,但是如果合适的配置PRO * C/ C++预编译器,那么对数据库的应用程序开发将会事半功倍,下面就来分析如何在VC环境下配置PRO * C/ C++预编译器方法。

第一步单击VC开发软件TOOLS工具栏,选择CUMSTOMIZE,然后再选择TOOLS页。

第二步在menu contents列表框里输入Pro * C/C++这些字母,接着在command编辑框里输入ORACLE HOME \BIN\ procui. Exe,同时在Arguments 中键入S (TargetName),在Initial directory 中键入S (WkspDir)。

第三步单击tools中的options菜单,选择DIRECTORIES栏目页,对头文件路径以及库文件路径进行设置。

3 嵌入式SQL语言宿主程序的分析

3.1 基本命名规则

在VC开发环境下配置PRO * C/ C++预编译器后,就应该遵循规定的文件扩展名,这些扩展名会根据宿主语言的不同会有不同的变化,之所以有这个标准就是为了告诉预编译器在这个高级语言下使用了SQL语言,因此在编译之前需要对其进行预编译并翻译成同类的宿主语言,比如C/C++的扩展文件名就为.PC,PACAL的后缀名就为.PPA。当预编译完成之后,SQL语言就会和宿主语言一样,从而进行正常的编译和链接。

3.2 嵌入式SQL 语言分析

所谓嵌入式SQL语言实际上就是在应用程序开发时,在高级编程语言里面嵌入了SQL语言。这个程序本身就成为了SQL语言的宿主程序。标准的SQL语言命令能够通过编译器编译。嵌入式SQL语言主要包括两个部分,一个是可执行的语句,另一个就是声明。可执行SQL语句能够操作ORACLE等关系数据库,比如执行查询,更新,删除等命令。可执行的SQL语句可以分为四种,分别为定义、控制和操作以及检索。而声明主要的作用就是用于声明ORACLE等关系数据库的对象以及SQL变量等,这些嵌入式的SQL语言不会通过数据库执行,也不会从数据库中返回结果,嵌入式SQL语言不会对数据库的数据形成最终的影响,因此需要对这些嵌入式语句设置一个定义标准,也就是要以* EXEC SQL *开头。

在使用SQL嵌入式语言时,应该在预编译文件中使用PL/SQL块,这能够减少系统开销,提升编译效率,在宿主程序中使用这个模块编译,需要对这个代码段进行声明,让预处理编译器知道怎么做。让用户的应用程序能够正常工作,基于嵌入式SQL语言的数据库应用程序的开发就需要充分了解各个组成部分。

3.2.1 数据声明的代码段分析

这个部分主要定义所有的宿主变量,这段代码某些时候又被成为序言,在数据声明代码段主要包含了三个部分,分别为声明、SQL包含代码段以及SQL连接代码段。在嵌入式SQL语言开发下,所有在SQL语言中引用到的宿主语言的变量都需要在这个声明部分进行定义。否则就不会通过预编译器的编译。现在很多宿主语言比如C++以及PASCAL等都支持多个声明段。在这些声明里,既可以定义全局变量也能够定义局部变量,具体变量的命运原则和SQL语言的变量命名原则是一致的。

另外在应用程序开发时,往往在运行过程中会存储不同的数据类型,目前ORACLE数据库只能够对可以识别的数据类型和有效的取值范围进行操作,而ORACLE只能够识别两种有效数据类型,分为内部和外部,内部数据主要包括ORACLE自身可以识别的文本,字符等类型,而外部主要指的是宿主变量的类型。在声明工作完成后,程序员还需要对ORACLE和宿主程序之间的通信区进行定义。这个通信区需要使用SQL包含代码段进行创建,在创建通信区之后,宿主程序还需要连接到ORACLE数据上来才能够对数据库进行操作,此时也就是代码连接阶段。因此在连接之前需要执行一个SQL连接命令,完成对本地数据库或者远程数据库的访问。根据操作系统的不同,可以建立多个或者单个不同的数据库连接。

3.2.2 数据操作代码段

当代码声明段以及数据库代码连接段完成之后,就可以进行编写数据操作代码了,目前数据操作代码段主要是由SQL语句创建编写,这部分实际上也就是嵌入式SQL语言在数据库应用程序开发上的主体。而数据操作代码段主要包含对数据的查询,删除,更新,插入等工作。并且在宿主程序里返回操作结果,并对这些结果进行处理等。

4 具体应用实例分析

使用VC开发环境编写一个基于嵌入式SQL语言的查询ORACLE数据库的表单,具体包括下面几个步骤:其一是使用VC开发环境下的MFC框架向导来建立一个基于对话框的应用程序工程;其二就是在SETTING中设置数据库的链接文件,选择的链接文件名称为oraSQL8. lib;其三就是创建两个类,也就是对象,分别为WSHH1 PC 和WXM1 PC;其四就是在第一部就配置好的pro * c/ c++菜单上添加第三步创建的两个类,并且设置这两个类的输入文件,文件名分别为wshh. Cpp和wxm. Cpp,并且在option选项中设置后缀名称为*cpp*;其五就是根据宿主程序的需要,在其他相关程序文件中包含wshh. Cpp 和wxm. Cpp这两个文件;其六就是选择编译就能够完成对嵌入式SQL语言的应用。

5 总结

本文从PRO * C/ C++预编译器在VC开发环境中的配置开始,详细的介绍了预编译的好处,以及有关嵌入式SQL语言的优势,并且通过实例详细介绍了嵌入式SQL语言在数据库应用程序开发过程的详细设置。这样程序员就需要使用复杂的独立的ORACLE开发工具来开发相应的数据库应用程序,而是和高级语言诸如PASCLE和C/C++等面向对象语言一样,植入SQL语言就能够实现对数据库的一体化的程序编写。

参考文献:

[1]晏庆.GKD-Base中嵌入式SQL关键技术的研究与实现[D].国防科学技术大学,2005.

[2]王旭卓,刘丽娜.嵌入式SQL语言在Oracle数据库中的应用[J].才智,2009,12.

[3]余小高.用嵌入式SQL语言开发ORACLE数据库应用的方法研究[J].计算机应用与软件,2004,04.

sql语言范文第9篇

关键词:关系数据库;关系模型;数据查询;多表查询

中图分类号:TP311.52

关系数据库是基于关系模型作为数据的组织方式的,它借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。它是由埃德加・科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。

1 数据查询

所谓数据查询(数据检索)就是从关系数据库的数据表中找出用户所需的数据,只要表(关系)中存在,则可以通过各种各样的方式将它找出来,SQL的查询功能就是实现这一功能的。本文主要研究讨论多表查询。

在实际应用中,由于一个关系数据库根据需求分析后得到很多表,而且表与表之间互相存在一对一,一对多或是多对多的表间关系,这些表中的数据往往互相有较为紧密的复杂联系,在这种情况下,要查找用户所需的数据时就得用多表查询才能实现用户的查询目的和要求,比如在仓库数据库中分别有四张表,仓库表,职工表,订单表和供应商表,这四个表两两存在一对多的表间关系,一个仓库可以有多名职工,一名职工只能属于一个仓库;一名职工可以经手多笔订单,一笔订单只能由一名职工经手;一家供应商可以完成多表订单,一笔订单只能由一家供应商完成,在实际应用中,如果要根据仓库表中的数据作为条件查询检索供应商表中的数据时,必须得用基于多表的连接查询才能完成。

1.1 简单连接查询。简单连接查询的SQL语句格式可总结如下。Select from 注:连接条件是两个表的主外键相等,主表表名.主键=子表表名.外键 如:仓库表.仓库号=职工表.仓库号。

如果from后面跟两张表,则是两个表的简单连接查询,有一个连接条件,如果from后面跟三张表,则有两个连接条件,如果from 后面跟四张表,则有三个连接条件,依此类推。而且查找数据的条件和连接条件必须用and连接,连接条件之间也用and连接。

示例:在仓库管理数据库的四张表中检索出回民所在仓库的仓库信息。对应的SQL语句为:select 仓库表.* from 仓库表,职工表 where 民族=’回’ and 仓库表.仓库号=职工表.仓库号。

从这个简单连接查询实例来看。在基于多表的简单连接查询中,第一先确定最终要查询的数据所在的字段来自于几张表的几个字段,查找数据的条件涉及到几个表的几个字段,其次根据表间关系确定查询涉及到几张表,然后确定连接条件。且where是必选项。

1.2 嵌套查询。嵌套查询的意思是,一个查询语句(select-from-where)块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。其中外层查询也称为父查询或主查询。内层查询也称子查询或从查询。嵌套查询的工作方式是:先处理内查询,由内向外处理,外层查询需要内层查询的结果来支持,但内层查询不需要外层查询的支持。示例:Select城市from仓库表where仓库号in(select仓库号from职工表where工资=4532)。

在这类嵌套查询中,带有IN或ONT IN谓词的嵌套查询在实际应用中用的最多,这里的IN相当于集合运算符∈。本文在阐述嵌套查询中就以带有IN或NOT IN谓词的嵌套查询进行阐述,带有比较运算符的子查询、带有ANY或ALL谓词的子查询、带有EXISTS谓词的子查询就再不做详细阐述了。

1.3 超连接查询。超连接查询分为内连接和外连接,外连接又分为左外连接,右外连接和全外连接。如果表中不匹配的数据不需要出现在查询结果中,则用内连接。如果在查询结果中两个表中不匹配的数据都要出现在查询结果中的话,则用全外连接,其对应表中对应字段用NULL表示。其SQL语句格式为(以基于两张表的超连接为主):Selectfrom on [where 查找数据的条件]。示例(以全外连接为例):select仓库.仓库号,城市,面积,职工号,工资 from 仓库表 full join职工表 on 仓库表.仓库号=职工表.仓库号JOIN连接格式在连接多个表时的书写方法要特别注意,在这种格式中JOIN的顺序和ON的顺序正好是相反的。

2 三种多表查询的特点及规律

在以上研究的三种多表查询中,基于多表的简单连接查询中,要查询的数据所在的字段可以是来自于一张表的字段,也可以是来自于多张表的字段,而查找数据的条件可以来自于一张表的字段,也可以来自于多张表的字段,即使没有查找数据的条件,但连接条件必须得有,在其SQL语句格式中,where是必选项。

在嵌套查询中,通过实际应用可以得出,嵌套查询不管由几个查询语句块组成,它们都是基于单表的简单查询构成的,而且最内层的查询结果就是其外层查询的条件,没有内层查询的结果,就不可能得到外层查询的结果,执行顺序都是由内往外执行的。

在超连接查询中,这种查询往往是在有关系的表中出现了所谓的不匹配数据时,根据用户的不同需要而使用的查询,到底选用哪一种主要取决于查询结果中要不要出现不匹配的数据和出现哪个表中的不匹配数据而定。

如果要查找的数据来自于多张表的多个字段,则可用连接查询和内连接查询,查询结果相同。如果要查找的数据来自于一张表的字段,而条件发生在不同的表中,则可用连接查询,嵌套查询和内连接查询,查询结果相同。

3 结束语

SQL的查询功能,尤其是多表查询有很大的灵活性,在实际应用中要视具体情况来决定用哪一类,这需要在实践中摸索总结,只有这样才能对SQL语句的查询功能运用的得心应手。

参考文献:

[1]萨师煊.王珊.数据库系统概论(第三版)[M].北京:高等教育出版社,2000.

[2]贺桂英.数据库原理及应用―SQL Server 2008[M].北京:中国人民大学出版社,2013.

作者简介:王勇(1978.02-),男,助教,研究方向:数据库。

sql语言范文第10篇

关键词 嵌入式SQL 预编译程序 动态连接库

中图分类号:TP312 文献标识码:A

0 引言

在通常的运用中,SQL语言是作为独立语言在终端交互方式下使用的,是非过程性的,其大多数语句都是独立执行,与上下文无关,称作自含式语言;而许多事务处理应用都是过程性的,需要根据不同的条件来执行不同的任务,如果把SQL语言嵌入到诸如C语言这样的过程化的编程语言中,程序开发人员就能设计出更加灵活的应用系统,具有SQL语言和高级编程语言的良好特征,它将比单独使用SQL或C语言具有更强的功能和灵活性,这种方式下使用的SQL语言称为嵌入式SQL语言。

在计算机专业课程《数据库系统概论》中有关于嵌入式SQL语言的内容,其教学手段一般都是理论讲述,教学效果不是十分理想。下面介绍一种在现有条件下都能办到的嵌入式SQL语言实现方法。

1 在VC中使用嵌入式SQL语言访问Microsoft SQL Server 2000

1.1 使用嵌入式SQL语言所采用的系统配置

①操作系统:Windows 2000 Professional

②Microsoft Visual C++ 6.0

③Microsoft SQL Server 2000

在安装Microsoft SQL Server 2000 时要注意选择安装Development Tools,为使用嵌入式SQL语言准备必要的头文件和库文件。

使用文本编辑器如记事本编辑嵌入式SQL程序,其存盘文件的扩展名为"sqc"。在嵌入式SQL程序中嵌入的SQL语句以EXEC SQL作为起始标识,语句的结束以";"作为标识。在嵌入的SQL语句中可以使用C语言的程序变量(即主变量),这时主变量名前加冒号(:)作为标志,以区别于字段名。主变量的声明必须包含在"EXEC SQL BEGIN DECLARE SECTION; "和"EXEC SQL END DECLARE SECTION; "之间。以下是一个嵌入式SQL程序demo.sqc:

#include

void main()

{

EXEC SQL BEGIN DECLARE SECTION;

char first_name[50];

char last_name[] = "White";

EXEC SQL END DECLARE SECTION;

EXEC SQL CONNECT TO my_server.pubs

USER my_login.my_password;

EXEC SQL SELECT au_fname INTO :first_name

FROM authors WHERE au_lname = :last_name;

EXEC SQL DISCONNECT ALL;

printf("first_name: %s\n", first_name);

}

此C语言程序中嵌入了SQL语句,用来访问数据库服务器my_server中的数据库pubs,登录名my_login,口令my_password,在表authors中检索姓"White"的作者的名,并存入主变量first_name,然后通过printf函数输出结果。

1.3 预编译嵌入式SQL程序

Microsoft SQL Server 2000提供的预编译程序nsqlprep.exe,用于对嵌入式SQL程序进行预编译处理,生成C语言源程序。实际上就是将嵌入式SQL程序中的嵌入式SQL语句替换为对运行时库文件Sqlakw32.dll的函数调用,接着运行时库文件调用动态连接库Ntwdblib.dll通过网络来存取Microsoft SQL Server 2000数据库服务器。

预编译程序nsqlprep的常用语法为:

nsqlprep ESQL_File /SQLACCESS /DB server_name.database_name /PASS login.password

其中ESQL_File是要预编译的嵌入式SQL程序;/SQLACCESS通知nsqlprep 自动地为嵌入式SQL程序中的静态SQL语句创建相应的存储过程;/DB server_name.database_name指明要连接的服务器以及数据库名称;/PASS login.password给出登录名及相应的口令。对于demo.sqc的预编译命令为:

nsqlprep demo /SQLACCESS /DB my_server.pubs /PASS my_login.my_password

经预编译处理后即可产生C语言源程序demo.c

1.4 配置VC++ 6.0 中的Project Settings

为了编译、连接nsqlprep生成的C语言源程序,需要增加必要的访问路径到VC++ 6.0 的环境设置中:

①选择菜单Tools中的菜单项Options

②选择Directories标签页

③在"Show directories for"下拉框中选择"Include files",增加Microsoft SQL Server 2000 开发所需头文件的路径:C:\Program Files\Microsoft SQL Server\80\Tools\DevTools\Include

④在"Show directories for"下拉框中选择"Library files",增加Microsoft SQL Server 2000 开发所需库文件的路径:C:\Program Files\Microsoft SQL Server\80\Tools\DevTools\LIB

1.5 生成访问Microsoft SQL Server 2000数据库的可执行程序

在VC++ 6.0 中创建一个"WIN32 Console Application"类型的Project,选择菜单Project中菜单项Add to Project的子项Files,将第三步中生成的C语言源程序demo.c添加到此Project中,然后编译、连接即可生成访问Microsoft SQL Server 2000数据库的可执行程序:demo.exe,运行的输出结果为:Johnson;这与使用交互式查询工具Query Analyzer检索的结果是一致的。至此,一个在VC++ 6.0中使用嵌入式SQL语言访问Microsoft SQL Server 2000数据库的应用已经开发完成。

2 结束语

上一篇:易语言范文 下一篇:肢体语言范文