ASP中使用SQL语句学习教案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.SELECT语句
在SQL的世界里,最最基础的操作就是SELECT语句了。

在数据库工具下直
接采用SQL的时
候好多人都会熟悉下面的操作:SELECTwhatFROMwhichTableWHEREcriteria
执行以上语句就会创办一个存放其结果的盘问。

而在ASP页面文件上,你也能够采用以上的一般语法,但是情况稍微不相同,ASP编程的时候,
SELECT语句的内容要作为字符串赋给一个变量:
SQL="SELECTwhatFROMwhichTable WHERE
criteria"
理解了ASP下SQL"说话"的方式,接下来依样画葫芦即可,只要满足你的需要,传统的SQL查
询模式和条件盘问都能派用途。

举例说明,不如假设你的数据库内有个数据表,名字是Products ,现在
你想取出这个表里
的全部记录。

尔后你就编写了下面的代码:
SQL="SELECT*FROMProducts"
以上代码--SQL语句的作用就是取出表内的全部数据--执行后将会选出数
据表内的全部记录。

但是,若是只想从表内取出某个特定列,比方p_name。

那就不能够用*通配符了,这里得键入详尽某列的名字,代码以下:
SQL="SELECTp_nameFROMProducts"
执行以上盘问此后Products 表内、p_name列的内容就会全被采用出来。

用WHERE子句设置盘问条件
有的时候取出全部数据库记录也许正好满足你的要求,但是,在大多数情况
下我们平时只要获取部分记录。

这样一来该怎样设计盘问呢?自然会更费点
脑筋了,何况本文也存心不想让你去用那个什么劳什子的recordset。

举个例子,若是你只打算取出p_name记录,而且这些记录的名字必定以字母w打头,那么
你就要用到下面的WHERE子句了:
SQL="SELECTp_nameFROMProductsWHEREp_nameLIKE'W%'"
WHERE要点词的后边跟着用来过滤数据的条件,有了这些条件的帮助,只有满足必然
标准的
数据才会被盘问出来。

在以上的例子里,盘问的结果只会获取名字以w打头的
p_name记录。

以上例子中,百分比符号(%)的含义是指示盘问返回全部 w字母打头而且后边是任
何数据
甚至没有数据的记录条目。

因此,在执行以上盘问的时候,west和willow就会从
Products表内被采用出来并存放在盘问里。

就像你看到的那样,只要仔细地设计SELECT语句,你就可以限制
recordset 中返回的信息
量,多考虑考虑总能满足你的要求。

这些啊还但是是掌握SQL用途刚起步。

为了帮助你渐渐掌握复杂的SELECT语句用法,下面就让我们再来看一下要点的标准术语:比较运算符,这些玩意都是你在修筑自己的SELECT字符串来获取特定数据时要经常用到的。

WHERE子句基础
在开始创办WHERE子句的时候,最简单的方式是采用标准的比较符号,
它们是< 、
<=、> 、>= 、<>和=。

显然,你很快就能理解以下代码的
含义和详尽运行结果:
SELECT*FROMProductsWHEREp_price>=
SELECT*FROMProductsWHEREp_price<>
SELECT*FROMProductsWHEREp_version='4'
注意:这里你会注意到,最后一个例句中的数字4周围加了单引号。

原因是这样的,在这个例子中的'4'是文本种类而非数字种类。

因为
你会把SELECT语句放到引号中来把它作为一个值赋给变量,因此你
也能够在语句中采用引号。

比较运算符
比较运算符指定从表内取出数据的内容范围。

你能够用它们来创办过
滤器以便减小recordset的范围,促使其只保存给定任务下你关心的
信息。

3.LIK
和BETWEEN
E、NOT
LIKE
你已经在上面取出w打头记录的例子中看到了LIKE
的用法。

LIKE判断词是一个特别适用的
符号。

但是,在好多情况下用了它可能会带给你太多的数据,因此在用到它从前最
1 好先开动
脑筋多想想自己终究想获取什么数据。

假设你想取出5位数字的SKU号码,
而且其开头是
结尾是5,那么你能够用下划符(_)代替%符号:
SQL="SELECT*FROMProductsWHEREp_skuLIKE'1___5'"
下划符表示任意一个字符。

因此在输入"1___5"的情况下,你的找寻就会限制在满足特定模式的5位数范围内了。

若是你想反其道而行之,要找出全部不般配"1___5"模式的SKU条目。

那么你只要要在刚刚语句例子中的LIKE前面加上NOT就可以了。

BETWEEN
假设你想取出必然范围内的数据,而且你早先知道范围的起点和终点,那么你不如采用
BETWEEN判断词。

现在就让我们假设你想采用给定表内范围在1和10之间的记录。

你能够
以下使用BETWEEN:
...WHEREIDBETWEEN1AND10
也许你也能够采用已经熟悉的数学判断字句:...WHEREID>=1ANDID>=10
4. 联合语句
我们到目前为止所谈到的SQL语句相对较为简单,若是再能经过标准的recordset循环盘问,那么这些语句也能满足一些更复杂的要求。

但是,何必非要拘泥在浅尝则止的基础水平之上
呢?你完满能够再增加其他一些符号,比方AND、OR和NOT来完成更富强的功能。

以下面的SQL语句为例:
SQL="SELECTc_firstname,c_lastname,c_emailFROMcustomersWHEREc_emailISNOTNULLANDc_purchase=' 1'ORc_purchase='2'ANDc_lastnameLIKE'A%'"
就你目前所掌握的SQL知识,以上的例子也不难讲解,但是上面的语句并没有很理解地让你
看清条件字句是怎样胶合在单一SQL语句中的。

多行语句
在SQL语句不好懂的情况下,你不如把整个语句分解为多行代码,尔后在现有变量基础上渐渐增加盘问语句的各个组成部分并把它存在同一变量内:
SQL="SELECTc_firstname,c_lastname,c_emailaddress,c_phone"
SQL=SQL&"FROMcustomers"
SQL=SQL&"WHEREc_firstnameLIKE'A%'andc_emailaddressNOTNULL"
SQL=SQL&"ORDERBYc_lastname,c_firstname"
到了最后一句,SQL变量就包括了以下的完满SELECT语句:
"SELECTc_firstname,c_lastname,c_emailaddress,c_phoneFROMcustomersWHEREc_firstnameL IKE'A%'andc_emailaddressNONULLORDERBYc_lastname,
c_firstname"
整句照上面分解此后显然好读多了!在进行调试的时候,你也许更乐于多敲几个字符把程序改得更好读些。

但是你可要记住了,在封闭引号从前也许在打开引号此后你需要增加空格,这样才能保证字符串联接起来的时候你没有把几个词凑到了一块。

5. 开始执行
在学会了SELECT语句的构造和用途此后你就该学习怎样使用它了。

在你所掌握的数据库工具下,这可能意味着你得按下某个写着"执行"字样的按钮。

在ASP网页上,能够马上执行
SQL
语句也能够看作储藏过程调用。

一旦创办了SQL语句,你还得想法接见其盘问结果。

显然,这里的要点就是
ASPrecordset 。

在使用非SQL的recordset 时,创办recordset 的代码平时以下所示:
DimobjRec
SetobjRec=("ADODB.Recordset")
"customers",objConn,0,1,2
若是你对ASP比较熟悉以上的代码对你可就不陌生了,你应该知道"customers" 表示你打开数
据库内一个数据表的名字。

打开recordset
为了充分利用你更为熟悉的SQL技术,你需要调整老例
DimobjRec
SetobjRec=("ADODB.Recordset") SQL,objConn,0,1,2ASP网页上最常采
用的
records
et

这里唯一的更正就
是在objRec
.Open,
此后
用包括
SQL语句的变量代替了要盘问的数据表的名
称。

这类方法的优点之一是你能够指定游标
种类(如以上
,1,2
所示)。

执行SQL
你能够用紧凑的一行代码执行SQL语句来创办recordset 。

以下是语法:DimobjRec
setobjRec=objConn.Execute(SQL)
在上例中,你所看到的SQL是你存放自己SQLSELECT语句的变量。

该代码行"运行
"SQL语句
(也许说对数据库进行盘问),采用数据并把数据存放在
rec
ordset
内,在上例中就
是变量
objRec。

这类方法的主要缺点是你不能够选择自己想采用的游标种类。

相反,recordset总

用前向游标打开。

因为游标的缘故,你也许打算熟悉两种创办
reco
rdset
的方法。

直接执行盘问节
约了键入字
符所耗费的时间,但那样的话你就得采用默认的游标了,这样有可能遭到经常不能够正常运行
的缺点。

无论你详尽采用哪一种方法,两者之间的最大的差别也不外乎代码精练与否。

在不考
虑你获取什么字段、你的标准是什么的前提下,也无论你怎
样储藏数据,采用SQL式的
recordset在体积ASP上打开的标准要小得多,更别提操作起来
上会比recordset的简单性
了。

毕竟,经过过滤数据,你除掉了耗费时间的
i
f-
then
测试和可能用到的
循环。

编写测试用SQL
这里有个技巧,好多专业
ASP程序员习惯在测试
网页的时候
"编写"自己的SQL语句。


样做
能够帮助你调试代码,因为你能够从中看到传达给服务器执行的字符串。

而你要做的可是是
增加在屏幕上显示有关信息。

在你把和
SQL有关的问
题提交
给ASP谈论组的时候你就应该附上
这些信息。

储藏盘问
当你的盘问相对简单的时候,每次重新开始创办SQL语句也不费什么时间,但是,复杂的查
询就不相同了,每次都重新来会产生好多开发错误。

因此,一旦让SQL顺利地运行起来,你最
好把它们存起来,在需要时再调用它们。

这样,哪怕是一个简单盘问你都能随时用上储藏的盘问语句了。

假设你每周都要给团队做一次报告,指出目前存在的业务支持问题,这些数据需要从你的数
据库中采用,而且要依照日期选择记录,同时依照你所在团队所采用的支持问题的种类排序。

一旦你设计了这一盘问,你何必此后每周都重新编写一次呢?不要在你的HTML页面上创办盘问,你应
该用你的数据库工具创办盘问而且保存它。

尔后你能够采用ActiveCommand属性把盘问插入到你的ASP网页。

头一两回你可能会感觉没啥意思,其实也就几行代码而已:
SetobjSQ=("mand")
="databaseName"
="storedQueryName"
=adCmdStoredProc
setobjRec=
注意,采用adCmdStoredProc 表示你已经在页面上包括了文件。

该文件定义了
你能够依照名字而非数字进行接见的Access 常数。

只要要在页面上包括该文件即可
<!--#INCLUDE-->),尔后你就可以用adCmdStoredProc这类名字了。

这样,将来你再看到的时候更简
单理解以上被储藏的盘问终究是个什么意思。

7.ORDERBY
从Access数据库中采用记录有件最令人丧气的事情,它们是以怎样的序次输入到数据库内就
依照怎样的序次出来。

就算你在Access环境内采用SortBy来改变记录视图,数据表内的记录序次也并没有发生改变。

若是你正在使用ASPrecordset在网页上写出记录,那么你也许知道乱纷纷的序次是多令人悲伤的事。

但是你可能不得不经常得面对这一问题,因为其实不存在什么简单方便的解决方案。

幸好ORDERBY能够简化这一难题。

为了对你的结果排序,只要在SELECT语句尾端加上ORDERBY,尔后指定你需要排序的参照
列即可。

因此,若是你想要依照顾客的姓氏对Customers表排序,那么你能够编写
以下的盘问语句:
SQL="SELECTc_lastname,c_firstname,c_emailFROMCustomersORDERBYc_lastname"
这样,只要你建立了recordset而且开始把结果写到屏幕上,你就会看见数据依照
字母序次排列起来了。

记录统计
确定数据库内有多少记录,也许确定有多少记录达到了某些标准,这些用ASP完成
并责问事。

若是你采用了正确的游标种类,你能够用RecordCount属性获取记录数
自然也能够用
recordset 。

但是,有个更简单的方法,这就是在自己的SELECT语句中采用count(*) ,代
码以下所示:
SQL="SELECTcount(*)FROMCustomers"
也许
SQL="SELECTcount(*)FROMCustomersWHEREc_lastnameLIKE'A%'"
举例说明,以下代码将选出一些记录以及这些记录的总数:
SQL="SELECTc_firstname,c_lastname,count(*)FROMCustomersWHEREc_lastnameLIKE'A%'"
但是你不能够实现自己的目的。

这里采用的"count"函数其实是一种会集函数,意思是只返回单行信息:回答你提出的问题。

对第1个SELECT语句来说,问题是"在客户表内有多少条记录?
盘问返回单一的值作为响应,因此它不能够同你老例的盘问相组合。

若是你希望获取其他数据,你需要采用RecordCount。

会集函数除了"count" 之外还包括AVG、MIN、MAX和SUM等。

连接
任何熟悉SQL和关系数据库的人都碰到过大量的连接种类。

最简单的说,
连接(join)会把
两个表的内容组合到一个虚假表也许recordset 内。

若是数据表有效地规
一化,也许你会经
常从某一个表中选出特定的信息再从另一个表中选出关系信息。

这样做就需
要简单的"相同连
接(equijoin )"。

沁园春·雪
北国风光,千里冰封,万里雪飘。

望长城内外,?惟余莽莽;?大河上下,?顿失滔滔。

山舞银蛇,原驰蜡象,欲与天公试比高。

须晴日,看红装素裹,?分外妖娆。

江山这样多娇,引无数英雄竞折腰。

惜秦皇汉武,?略输文采;?唐宗宋祖,?稍逊风骚。

一代天骄,?成吉思汗,?只识弯弓射大雕。

俱往矣,?数风流人物,还看今朝。


优选文档你我共享
AAAAAA
出师表
两汉:诸葛亮
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚紧迫存亡之秋也。

然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛
下也。

诚宜开张圣听,以光
先帝遗德,恢弘志士之气,不宜自轻自贱,引喻失义,以塞忠谏之路也。

宫中府中,俱为一体;陟罚臧否,不宜异同。

若有作奸非法及为忠善者,宜付有司论其刑赏,以昭陛下平明之理;不宜偏私,使内外异法也。

侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下:愚以
为宫中之事,事无大小,悉以咨之,尔后推行,必能裨补阙漏,有所广益。

将军向宠,性行淑均,晓畅军事,试用于往日,先帝称之曰"能",是以众议举宠为督:
愚以为营中之事,悉以咨之,必能使行阵友好,利害得所。

亲贤臣,远小人,此先汉因此兴盛也;亲小人,远贤臣,此后汉因此倾颓也。

先帝在时,
每与臣论此事,何尝不痛惜恼恨于桓、灵也。

侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之、信之,则汉室之隆,可计日而待也。

臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。

先帝不以臣鄙俗,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感谢,遂许先帝以驱驰。

后值推翻,受任于败
军之际,受命于危难之间,尔来二十有一年矣。

先帝知臣谨慎,故临崩寄臣以大事也。

受命以来,夙夜忧叹,恐交付不效,以伤先帝之明;故五月渡泸,深入不毛。

今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘
除奸凶,兴复汉室,还于旧都。

此臣因此报先帝而忠陛下之职分也。

至于商酌损益,进效
忠言,则攸之、祎、允之任也。

愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。

若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。

臣不胜受恩感谢。

今当远离,临表涕零,不知所言。

相关文档
最新文档