数据库讲义.docx
《数据库讲义.docx》由会员分享,可在线阅读,更多相关《数据库讲义.docx(19页珍藏版)》请在冰豆网上搜索。
数据库讲义
数据类型
数据是反映客观事物属性的记录,分为数值型和字符型
将数据细分为:
字符型
数值型
日期型
日期时间型
逻辑型
备注型
通用型
字符型
字符型数据描述不具有计算能力的文字数据类型,是最常用的数据类型之一。
可以包含任何可以显示的字符、汉字和符号,最大长度为254个字符,每个字符占用一个字节,一个汉字占2个字节。
字符型常量使用时必须用定界符双引号(“”)或单引号(‘’)或([])括起来。
例:
“河北” 占四个字节,为4个字符
“Heisboy” 占9个字节,为9个字符
"ab+cd"占5个字节,为5个字符
数值型
数值型数据是描述数量的数据类型,又分为:
数值型N
数字0~9,小数点和正负号组成,最大长度20个字符
浮点F
高精度的数值型数据,只是在存储形式上采取浮点格式
双精度型B
更高精度的数值型数据,只用于定义数据表中的字段类型
整型I
不包含小数点部分的数值型数据,只用于数据表中字段类型定义
货币型Y
数据的第一个数字前冠一个货币符号($),最多保留4位小数
setcurrencyto<货币符号>重新设置货币符号
例:
setcurrencyto“¥”
日期型
日期型D
用于表示日期的数据,长度固定为8个字符
默认格式用{mm/dd/yyyy}
日期时间型T
包括日期和时间的数据,长度固定为8个字符
默认格式用{mm/dd/yyyyhh:
mm:
ss}
逻辑型
描述客观事物真假的数据,用于表示逻辑判断结果。
逻辑型数据只有真(T,Y)和假(F,N)两种值,长度固定为1个字符
例:
X=5
Y=8
?
X>Y
备注型
用于存放较长的字符型数据类型,没有数据长度限制,受限与现有的磁盘空间。
它只用于数据表中字段类型的定义,字段长度固定为4个字符,而实际数据存放在与数据表文件同名的备注文件中,长度根据数据的内容而定
通用型
用于存放OLE对象的数据,OLE对象可以是电子表格、文档、图片等。
它只用于数据表中字段类型的定义,字段长度固定为4个字符,而实际数据长度受限于现有的磁盘空间
数据存储
数据的输入输出是通过数据的存储设备完成的,这些供数据存储的常量,变量,数组,字段,记录和对象称为数据存储容器
1)常量2)内存变量
3)数组变量4)字段变量
5)记录6)对象
常量
在运行过程中,存放在内存中不变化的数据
数值型常量:
数0~9,小数点和正负号组成的整数或实数
浮点型常量:
数值型常量的浮点格式
字符型常量:
也称字符串,使用时用””,’’,[]括起来
逻辑型常量:
必须用“.”括起来
日期型常量:
用“{}”括起来
日期时间型常量:
用“{}”括起来
日期型常量
使用Set命令确定日期常量的格式
Set命令
功能
SetMarkTo[日期分隔符]
确定日期数据的分割符号
SetCenturyOn/Off
确定日期数据的年份字符数(On-4个字符,Off-2个字符)
SetDate[To]American/Mdy/Ymd
确定日期数据的指定格式
SetStrictdateTo[0/1/2]
设置是否对日期数据的格式进行检查
变量
指在程序运行过程中其值可以改变的量,用一个标识符表示,这个标识符称变量名,变量名可以使用字母,数字和下划线,且首字符必须是字母,长度不得超过254个字符,变量的种类有:
³内存变量
³数组变量
³字段变量
内存变量
内存变量是存放在计算机内存中的变量,用户在使用它时,需定义内存变量的名称和内存变量赋值。
命名:
是由字母、数字、下划线或汉字组成的,但第一个字符不能是数字。
赋值:
内存变量的定义通过赋值语句完成,它的类型取决于接受的数据类型,有数值型,浮点型,字符型,逻辑型,日期型和日时间型
赋值命令:
store<表达式>to<内存变量表>
<内存变量>=<表达式>
将表达式的值赋给内存变量
内存变量的类型由所赋的值决定
输出命令:
?
/?
?
[<表达式>][at<列号>]
一次计算表达式表中表达式的值,并将值显示在屏幕上输出?
显示结果在下一行第一列输出
?
?
显示结果在当前行当前列输出[at<列号>]表示在指定的列输出
var1=“世界杯”
var2=12.5
store{^2002/08/01}tovar3
store“hello”tovar4,var5,var6
lg=.t.
nam=var2
nam1=var2+6
?
var1,var4
?
?
var1,var2
?
var3
?
var4at20
?
var2+6
内存变量的作用域
全局型内存变量:
格式Public<内存变量表>
在全部程序、过程和字定义函数,以及它调用的程序、过程和自定义函数中有效。
即使整个程序结束,全局型内存变量也不被释放,值仍保存在内存中。
局部型内存变量:
格式Private<内存变量表>
在定义它的程序以及被该程序调用的程序、过程和局部内存变量函数中有效。
一旦定义它的程序运行完毕,局部型内存变量将从内存中释放
本地型内存变量:
格式Local<内存变量表>
只能在定义它的程序中有效,一旦定义它的程序运行完毕,本地型内存变量将从中释放
数组变量
VFP为使问题变得简单和其它高级语言一样。
可以使用数组。
数组也是一种内存变量,数组实际上是按一定顺序排列的一组内存变量,用一个名字代表,称为变量名。
如:
A1,A2,…A40表示从编号1顺序排列到40用一个字母A表示数组变量的变量名A8表示A数组中的第8个学生的成绩称A1,A2,…A40为名字为A的数组A8则是A数组中排列顺序第8的变量被称作A数组中的一个数组元素。
是一组有序的内存变量的集合,每个内存变量都是这
个数组的一个元素,每个元素在内存中独占一个内存单元,且通过数组名和下标来访问。
同一个元素在不同时刻可以存放不用类型的数据
同一个数组中,每个元素可以是不同的数据类型
数组必须先定义后使用
定义:
dimension<数组名1>(<下标1>)[,<下标2>])
[,<数组名2>(>(<下标1>)[,<下标2>])]……
declare<数组名1>(<下标1>)[,<下标2>])
[,<数组名2>(>(<下标1>)[,<下标2>])]……
dimensiona(10),X(3,4)
1)VFP只能定义一维和二维数组,数组中的成员称数组元素
2)数组元素由数组名和其后用小括号括起来的下标组成,如:
A(6),B(8)。
3)下标可以是常数、变量或表达式。
如:
A(8),A(I),A(I+3)(若下标为变量或表达式中有变量时,应事先赋值)
4)下标值必须>0,即VFP规定各下标的下界为1
5)数组大小由下标值的上下限决定,数值下限为1,上限在定义数组时由数值表达式给出。
如果定义数组时给出两个数值表达式,则定义的数组是二维数组。
6)下标若为非整数时,系统自动取其整数。
DIMENSIONX(3.5)→DIMENSIONX(3)
7)若要使用数组必须先定义
8)数组元素象简单变量一样可被赋值
9)数组中的数组元素可以存放不同类型的数据,数据的类型由最后一次赋值决定。
(即同一数组的不同元素,数据类型可以不一致)
10)数组一经定义,数组中元素的值自动取逻辑值.F.
例:
Demesiona(10)
a
(1)=0
a
(2)=“123456”
a(3)=.F.
a(4)={^2002-12-05}
?
a
(1)
?
a
(2)
?
a(3)
?
a(4)
?
a(5)
函数
函数的要素
函数有函数名、参数、函数值3大要素。
◆函数名起标识作用
◆参数是自变量,一般是表达式,写在括号里.有的函数没有参数,称"哑参数".如DATE()
◆函数运算会返回一个值,称为函数值,函数值会因参数而异
◆函数的类型
函数的类型即函数值的类型,将其分为5类:
1)数值计算函数
2)字符处理函数
3)数据转换函数
4)日期和时间函数
5)测试函数
取整函数int(<数值表达式>)
功能:
返回<数值表达式>的整数部分
函数返回值的类型N
?
int(37.59)
num=-34.8
?
int(num)
?
int(36.5)
?
int(36/5)
?
int(-36.5)
?
int(5*20.1)
求极值函数max(<表达式1>,<表达式2>…)
min(<表达式1>,<表达式2>…)
功能:
返回多个<表达式>中数据值最大/最小的参数
num1=496
num2=468
?
max(num1,num2)
?
max('A','B')
?
max('李','赵')
setcurrencyto"¥”
?
max('¥123','¥127')
?
max({^1999/02/05},{^1998/06/09})
取余函数mod(<数值表达式1>,<数值表达式2>)
功能:
返回两个数值相除后的余数。
<数值表达式1>是被除数,<数值表达式2>是除数。
说明:
余数的正负号与除数相同
若两数能整除则值为0
如果被除数与除数同号,则函数值即为两数相除的余数,或者mod(x1,x2)=x1-int(x1/x2)*x2
如果被除数与除数异号,则函数值即为两数相除的余数再加上除数的值,或者mod(x1,x2)=x1-int(x1/x2)*x2+x2
注:
数值表达式2的值不容许为0
?
mod(8,3)
?
mod(-10,-3)
?
mod(-10,3)
?
mod(10,-3)
?
mod(4*9,90/9)
绝对值函数abs(<数值表达式>)
功能:
返回<表达式>的绝对值
说明:
函数返回值的类型N
?
abs(25-30)
四舍五入函数round(<数值表达式1>,)
功能:
对<数值表达式1>的数值进行四舍五入
i指明四舍五入的位置
说明:
1)i表示小数保留的位数,应为数值型数据
2)i>0时代表小数部分的舍入位数,小数保留i位,第i+1位四舍五入
3)i=0时,表示保留整数位,将小数部分四舍五入
4)i<0时,代表整数部分的舍入位数,小数点左边第i位进行四舍五入,则函数值为一个舍入后的整数。
?
round(43.1163,2)
x=1024.0186
?
round(x,2)
?
round(x,-2)
?
round(1735.28,-2)
?
round(1735.28,-3)
?
round(3.1415926,3)
?
round(123.456,-2)
?
round(123.456,0)
?
int(123.456),int(-123.456)
?
round(123.456,1),round(123.456,0),round(123.456,-1)
?
max(30,-352,20*4)
?
mod(17,6),mod(17,-6),mod(-17,6),mod(-17,-6)
?
abs(2*3-10),sqrt(2*6+4)
字符处理函数
求字符串长度函数len(<字符表达式>)
功能:
返回<字符表达式>的字符个数
说明:
半角标点符号和空格占1个字符位置全角标点符号和汉字占2个字符位置,返回函数值为数值型
str1=“Computer_System:
计算机系统"
?
len(str1)
求子串位置函数
at(<字符表达式1>,<字符表达式2>,<数值表达式>)
atc(<字符表达式1>,<字符表达式2>,<数值表达式>)
功能:
若<字符表达式1>是<字符表达式2>的子串,则返回
<字符表达式1>在<字符表达式2>中第n次出现的位置,否则返回0。
n为数值表达式的计算结果,缺省时为1
说明:
函数值为数值型
atc()在子串比较时不区分字母的大小写
str1="ComputerSystem:
计算机系统"
?
at("PUt",str1),at("put",str1)
?
atC("PUT",str1),atC("put",str1)
?
at("系统",str1)
?
at("m",str1,2)
统计字符出现次数
occurs(<字符表达式1>,<字符表达式2>)
功能:
返回第一个字符串在第二个字符串中出现的次数,函数值为数值型。
若第一个字符串不是第二个字符串的子串,则返回0
str1="ComputerSystem:
计算机系统"
?
occurs("te",str1)
字符串匹配函数
like(<字符表达式1>,<字符表达式2>)
功能:
比较两个字符串对应位置上的字符,若所有对应字符都相匹配,函数返回逻辑真,否则返回逻辑假
说明:
<字符表达式1>中可以包含通配符*和?
,*代表多个任意字符,?
代表一个任意字符
str1="ComputerSystem:
计算机系统"
?
like("系统",str1),like("*系统",str1)
?
like("computer*",str1),like("Computer*",str1)
首字符测试函数
isalpha(<字符表达式>)&&测字母
isdigit(<字符表达式>)&&测数字
islower(<字符表达式>)&&测小写字母
isupper(<字符表达式>)&&测大写字母
功能:
若<字符表达式>的首字符分别是字母、数字、小写字母、大写字母,则返回.T.,否则返回.F.
?
isalpha(“Fox”),isdigit("Fox")
?
islower(“Fox”),isupper("Fox")
取子串函数
substr(<字符串表达式>,<起始位置>,<长度>)
left(<字符串表达式>,<长度>)
right(<字符表达式>,<长度>)
功能:
substr()从字符串的指定起始位置取指定长度的子串作为函数值,若长度缺省,则函数从指定位置一直取到最后一个字符
left()和right()分别从字符串的左端和右端取一个指定长度的子串作为函数值
str1="ComputerSystem:
计算机系统"
?
Substr(str1,9,6),left(str1,7),right(str1,10)
?
substr(“database”,4,2)
?
substr(“database”,4)
?
substr(“internation”,6)
删除前后空格函数
trim(<字符表达式>)&&去掉字符串的尾部空格
Ltrim(<字符表达式>)&&去掉字符串首部空格
alltrim(<字符表达式>)&&去掉字符串首尾部空格
说明:
函数值为字符型
str1=“_计算机_"
str2=“等级考试__"
?
["]+str1+str2+["]
?
["]+ltrim(str1)+trim(str2)+["]
?
["]+alltrim(str1+str2)+["]
生成字符串函数
space(<数值表达式>)
replicate(<字符表达式>,<数值表达式>)
功能:
space()返回由多个空格组成的字符串
replicate()返回<字符表达式>复制多次后形成的字符串。
复制次数由<数值表达式>的值决定.
?
replicate("fox",4)+space(4)+replicate("fox",4)
?
”200401”+space
(2)+”王大力”
X=“__1235_word__”
?
trim(x)
?
ltrim(x)
?
rtrim(x)
?
alltrim(x)
?
Left(“internation”,3)
?
right(“internation”,3)
转换函数
数值转换成字符串函数
str(<数值表达式>[,<长度>[,<小数位数>]])
功能:
将<数值表达式>的值转换成字符串,转换时<数值表达式>根据需要四舍五入处理
<长度>指转换后数据的总长度,其中包括符号位、小数点及小数点后的小数位数
小数位数表示转换后的数据小数点后的小数位数,若省略,则表示忽略数据中的小数位,并四舍五入。
说明:
◆省略<长度>、<小数位数>,系统约定字符串长度为10,小数位为0
◆若<长度>、<小数位数>有小数部分,小数部分无效(不四舍五入)
◆若<长度>值超过<数值表达式>的数据位数(整数位数+小数位数+1位小数点),字符串前自动添加适量的空格。
◆若<长度>值小于<数值表达式>的整数部分位数则结果显示一串星号(*)
◆若<长度>值大于<数值表达式>的整数部分位数则优先处理整数部分而自动调整小数位数
?
Str(142.1,5,2)
?
str(23.568)
?
str(23.468)
?
1234.56,str(1234.56,10,3)
?
str(12345678,5)
?
str(len("abc")+0.345
字符串转换成数值函数
val(<字符表达式>)
功能:
将由数字符号组成的<字符表达式>转换成相应的数值型数据,保留2位小数(小数遵循四舍五入原则)
说明:
若字符串中出现非数字字符,则只转换前面部分
若字符串的首字符为非数字字符(可以是空格),则返回数值0
?
val(“123.456”),val(“A123.45”)
?
val([12A3.45]),val([123.45])
字符串转换成日期或日期时间函数
ctod(<字符表达式>)
ctot(<字符表达式>)
功能:
分别将字符型数据转换成日期型和日期时间型数据
说明:
<字符表达式>必须是与系统设置相同的日期和日期时间格式的字符串
setdatetoymd
setcenturyon
?
ctod("2003/03/10")
?
ctod(“2003-05-06”)
SETDATETOmdy
SETCENTURYon
?
CTOD("06/05/01")
日期或日期时间换成字符串函数
dtoc(<日期表达式>|<日期时间表达式>[,1])
dtos(<日期表达式>|<日期时间表达式>)
ttoc(<日期时间表达式>[,1])
功能:
dtoc()和dtos()将日期数据或日期时间数据的日期部分转换成字符串
ttoc()将日期时间数据转换成字符串,使用参数1,则返回字符串格式:
yyyymmddhhmmss,采用24小时制
dtoc()日期转换格式为:
mm/dd/yy,使用参数1,则返回字符串格式:
yyyymmdd
dtos()日期转换格式为:
yyyyymmdd
系统日期和时间函数
date()返回系统当前日期,函数值为日期型
time()返回系统当前时间,函数值为字符型
datetime()返回系统当前的日期和时间函数值为日期时间型
求年份、月份和天数函数
year(<日期表达式>|<日期时间表达式>)
month(<日期表达式>|<日期时间表达式>)
day(<日期表达式>|<日期时间表达式>)
说明:
year()返回4位的年份值
在屏幕输出今天是:
今年是:
年
这个月是:
月
今天距离30号还有:
天
时、分、秒函数
hour(<日期时间表达式>)
minute(<日期时间表达式>)
sec(<日期时间表达式>)
在屏幕输出现在的时间是:
时分秒
表达式
由运算符将常量、变量、函数连接起来的式子,其中常量、变量、函数是表达式的特例。
在命令格式中的<表达式>,往往泛指常量、变量、函数和表达式
表达式中每一个运算符都占用一个字符,其中的运算符、标点符号和圆括号都必须使用西文半角符号。
每个表达式经过运算都会产生一个结果,即表达式的值。
根据表达式值的类型,可以将表达式分为算术表达式、字符表达式、日期时间表达式、关系表达式和逻辑表达式。
算术表达式
算术表达式的运算结果是数值型常数
优先顺序:
()→函数→**→*,/→%→+,-
?
6/2+3*4-5
?
17%6,17%-6,-17%6,-17%-6
?
2*56/(3+lOG(6))+6
字符表达式
字符表达式的运算结果是字符常数或逻辑型常数
X="中国"
Y="北京__"
Z="长城"
?
X+Y
?
X-Y+Z
str1="计算机_"
str2="课程"
?
str1+str2,"and",str1-str2+"安排"
关系表达式
关系运算符两侧表达式的类型要一致,关系运算符两边的表达式可以是字符表达式、数值表达式、逻辑表达式和日期时间表达式
关系运算符的优先级:
先计算两侧表达式的值后比较大小
数值比较:
按其值大小进行比较,并且包括正负号
日期数据比较:
日期在前的为小。
逻辑值值比较:
.F.<.T.
字符串进行比较:
按ASCII码值的大小比较,汉字按其机内码值的大小比较。
两个字符串比较时,系统对它们的字符从左向右逐个进行比较,对应字符不同时,根据两个字符的ASCII码值决定两个字符串的大小。
如,"abc"<"abd",结果为.T.。
=为不精确比较,串1尾部的空格不参加比较,串2尾部的空格参加比较.==为精确比较,串1与串2必须一致
?
2<3
?
"a"<"b"
?
8>=8
?
"ABC"<"ABC"
?
"ABC"="ABC"
?
"ABC"="ABC"
?
"ABC"="ABC"
?
"ABC"=="ABC"
?
100<>101
?
'李'$'李明'
作业
1.比较连接运算符“+”与“-”的异同?
2.求下列表达式的值。
⑴AT("人民","中华人民共和国")
⑵STR(123.456,6,2)+"30"
⑶REPLICATE("☆★",2)+"新北京"+SPACE
(2)+"新奥运"+REPLICATE("★☆",2)
⑷TRIM(SUBSTR("VisualFoxPro",7,3))+RIGHT("VisualFoxPro",3)+"6.0"
1、计算val(subs(“奔腾586”,5,1))+len(“VisualFoxPro”)
2、计算subs(right(‘Goodmorningeverybody’,9),6,5)
3、设op=“+”,计算100&88.88
4、设rq1=“2006/3/11”,rq2=ctod(“3/11/2006”),计算year(rq2)+val(rq1)
5、设x=15,执行?
y=x=16,观察执行结果
(1)x1=”123.456”
x2=-23.456
?
val(x1)+round(x2,1)
(2) store10toy1
store25toy2
?
y1>y2
?
(y1>=y2).or.(y1<>y2)
(3) store“EF”toz1
store“GH”toz2
?
z1+z2
?
z1-z2
?
.not.(z1=z2)
(4)va