1•SQL(structurequerylanguage)是关系数据库系统的国际标准语言,当前主流的数据库都提供对该语言的支持,具有很大的通用型。•SQL既可以命令方式交互使用,又可以嵌入到程序中,使用非常方便。•SQL功能强大,包括数据定义、数据操纵(查询和更新)、数据控制(安全性和完整性)功能。第5章结构化查询语言—SQL2操作对象创建删除修改表文件createtabledroptablealtertable数据库createdatabasedropdatabasealterdatabase索引createindexdropindex视图createviewdropviewSQL的数据定义命令数据定义3定义数据库格式:createdatabase数据库名功能:在默认路径下创建数据库,数据库名由数据库名指定,默认扩展名:dbc。例:在默认路径下创建“学生管理”数据库。createdatabase学生管理4定义自由表和数据库表createtable|dbf表名[free](字段名1类型(宽度[,小数位数])[null|notnull];[check字段1限制条件[error出错提示信息][default默认值];[primarykey|unique|candidate];[,字段名2…,…][foreignkey关键字表达式1tag索引名1references关联表名];[,…]][,check记录限制条件[error出错提示信息])索引类型:主索引、唯一索引、候选索引。缺省为普通索引外键关联表说明:•如果执行命令时已经打开一个数据库,则表明创建数据库表;如果没有数据库打开,或使用free选项则创建自由表。•对于自由表,不能使用check,defaule,foreignkey,primarykey,references短语。5定义自由表和数据库表createtable|dbf表名[free](字段名1类型(宽度[,小数位数])[null|notnull];[check字段1限制条件[error出错提示信息][default默认值];[primarykey|unique|candidate];[,字段名2…,…][foreignkey关键字表达式1tag索引名1references关联表名];[,…]][,check记录限制条件[error出错提示信息])索引类型:主索引、唯一索引、候选索引。缺省为普通索引外键关联表说明:•空格间隔•在写命令语句时,一条命令若比较长,一行写不完,可以在行尾加英文分号“;”续行符并回车换行。6定义自由表和数据库表字段类型字段宽度小数位说明Cn–字符型字段(Character)宽度为nNnd数值字段类型(Numeric)宽度为n,小数位为dI––整数类型(Integer)D––日期类型(Date)T––日期时间类型(DateTime)L––逻辑类型(Logical)M––备注类型(Memo)G––通用类型(General)VisualFoxPro常用的数据类型7例如:使用sql数据定义命令创建“学生成绩”数据库,包含如下三个表:学生(学号C(8),姓名C(6),性别C(2),出生日期D,奖学金N(4),贷款否L,简历M(4))。成绩(学号C(8),课程代码C(3),成绩N(4,1))课程(课程代码C(3),课程名C(20))createdatabase学生成绩&&建立数据库&&建立学生表createtable学生(学号c(8),姓名c(10),性别c(2),;出生日期d,奖学金n(4),贷款否l,简历m)定义自由表和数据库表8例如:使用sql定义数据命令创建“学生成绩”数据库,包含如下三个表:学生(学号C(8),姓名C(6),性别C(2),出生日期D,奖学金N(4),贷款否L,简历M(4))。成绩(学号C(8),课程代码C(3),成绩N(4,1))课程(课程代码C(3),课程名C(20))要求:①学生表:文件名为“学生”,学号主索引,姓名不可空,性别默认“男”,出生日期可空。奖学金不少于100元,如输入数据小于100元,显示提示信息“奖学金不少于100元”。&&建立学生表createtable学生(学号c(8)primarykey,姓名c(10)notnull,;性别c(2)default男,出生日期dnull,;奖学金n(4)check奖学金=100error奖学金不少于100元,;贷款否l,简历m)定义自由表和数据库表9例如:使用sql定义数据命令创建“学生成绩”数据库,包含如下三个表:学生(学号C(8),姓名C(6),性别C(2),出生日期D,奖学金N(4),贷款否L,简历M4)。成绩(学号C(8),课程代码C(3),成绩N(4,1))课程(课程代码C(3),课程名C(20))要求:②课程表:文件名为“课程”,课程代码主索引。&&建立课程表createtable课程(课程代码c(3)primarykey,课程名c(20))定义自由表和数据库表10例如:使用sql定义数据命令创建“学生成绩”数据库,包含如下三个表:学生(学号C(8),姓名C(6),性别C(2),出生日期D,奖学金N(4),贷款否L,简历M4)。成绩(学号C(8),课程代码C(3),成绩N(4,1))课程(课程代码C(3),课程名C(20))要求:②成绩表:文件名为“成绩”,子表,学号、课程代码外键。&&建立成绩表createtable成绩(学号c(8),课程代码c(3),成绩n(4,1),;foreignkey学号tagxhreferences学生,;foreignkey课程代码tagkcdmreferences课程)定义自由表和数据库表11图5-1使用SQL命令创建的数据库12格式:createview视图名asselect-命令功能:在数据库设计器中创建视图。说明:命令中的asselect-命令语句,是从一个或多个表中选择数据,作为视图的内容。例如:根据学生基本信息表创建名为“学生视图”的视图,包括学号、姓名、出生日期字段数据。createview学生视图as;select学号,姓名,出生日期from学生基本信息表定义视图13修改表结构格式:altertable表名[add……]增加字段[drop……]删除字段[rename……]修改字段名[alter……]修改字段中除字段名以外的属性14修改表结构•添加字段altertable表名add字段名字段类型[(宽度[,小数位数])][null|notnull][check表达式[error提示信息]][default默认值][primarykey|unique|candidate]例(1)为“课程”表增加字段“学时数n(3)”(2)为“课程”表增加字段“学分”并设置字段有效性规则。altertable课程add学时数n(3)altertable课程add学分n(3,1);check(学分0.and.学分10)error学分在0-10之间!15修改表结构•删除指定字段altertable表名drop字段名例:删除“学生”表“贷款否”字段altertable学生drop贷款否16修改表结构•修改指定字段的名字(即重命名字段)altertable表名rename原字段名to新字段名(4)将“课程”表的“课程代码“字段改名为“课程号”altertable课程rename课程代码to课程号17修改表结构•修改或定义指定字段除字段名以外的属性altertable表名alter字段名数据类型[(宽度[,小数位数])][null|notnull]setcheck(表达式)[error“提示信息”]setdefault默认值dropcheckdropdefault例1:将“学生”表“姓名”字段的宽度改为8altertable学生alter姓名c(8)例2:将“学生”表中的性别字段的默认值设置为女altertable学生alter性别setdefault女例3:删除“学生”表“奖学金”字段的有效性规则和默认值altertable学生alter奖学金dropdefaultdropcheckaltertable学生alter奖学金dropdefault;alter奖学金dropcheck18删除基本表格式:droptable表名说明:表一旦被删除,表中的数据及在此表基础上建立的索引、视图将自动全部被删除掉。19数据操纵操作对象插入更新删除查询表文件(记录)insertupdatedeleteselect20数据操纵—插入记录•格式1:insertinto表名[(字段名1[,字段名2[,…]])]values(表达式1[,表达式2[,…]])•功能:指定表的表尾添加一条新记录,其值为values后面表达式的值。说明:字段值由values短语中表达式依次指定,未列出的字段值为空。若为新记录的全部字段指定值,可省略字段名,但插入数据的格式及顺序必须与表的结构完全吻合。例如:向学生表添加新记录。insertinto学生;values(01060507,李明,男,{^1993/3/12},500,优秀团干)insertinto学生(学号,姓名,出生日期);values(01060515,林琳,{^1994-06-07})21数据操纵—插入记录•格式2:insertinto表名fromarray数组名|frommemvar]功能:在指定表的表尾添加一条新记录,其值来自于对应的数组或同名内存变量。例如:dimensionarr(3)arr(1)=07arr(2)=管理学arr(3)=80insertinto课程fromarrayarr22数据操纵—插入记录•格式2:insertinto表名fromarray数组名|frommemvar]功能:在指定表的表尾添加一条新记录,其值来自于对应的数组或同名内存变量例如:课程代码=08课程名=经济学学时数=90insertinto课程frommemvar23数据操纵—更新记录•格式:update表名set字段名1=表达式1[,字段名2=表达式2…][where条件]•功能:对指定表满足条件记录的字段值用表达式的值替换。•说明:①一次可以更新多个字段,短语间用逗号分隔。②where短语指定记录满足的条件,缺省条件,更新表中全部记录。例如:将“学生”表中“张宏”的出生日期改为1995年5月18日update学生set出生日期={^1995-05-18};where姓名=张宏24数据操纵—删除记录•格式:deletefrom表名[where条件表达式]•功能:从指定表中,按指定的条件逻辑删除记录。•说明:若缺省where短语,则删除所有记录。若要物理删除记录,还要执行pack命令。若要恢复逻辑删除的记录,使用recall命令。例如:将“学生”表中姓名为“林琳”的记录做删除标记。deletefrom学生where姓名=林琳25数据查询Select查询列表From数据表列表;[Where查询筛选条件、连接条件][Orderby排序依据[Having筛选条件]][topn|percent]];[Groupby分组字段[Having筛选条件]];[Join表名On连接条件];[To输出去向][Into保存形式]说明:先介绍单表查询,再介绍多表查询。26简单查询格式:select[all|distinct][表达式1[as显示列名][,表达式2[as显示列名…]]from[数据库名!]表名as[别名]功能:所谓简单查询是指无条件查询,即不指定where子句。说明:•all:表示输出所有记录,包括重复记录,默认。•distinct:表示输出无重复值的记录。•表达式