1/37回顾和作业点评建立数据库表之间的主外键关系是为了维护数据库的哪种完整性?年龄信息、性别信息分别采用哪种数据类型存储比较合适?限制年龄在18-40岁之间的检查约束表达式如何写?2/37提问SQL语句的作用是什么?插入语句使用的是INSERT、UPDATE还是DELETE?TRUNCATE语句的作用是什么?预习检查3/37提问本章任务学生数据库中数据的增加、修改和删除数据4/37本章目标使用T-SQL向表中插入数据使用T-SQL更新表中数据使用T-SQL删除表中数据5/37SQL简介SQL是什么?StructuredQueryLanguage:结构化查询语言为何要使用SQL?难道仅仅使用SQLServerManagementStudio操作数据库?应用程序如何与数据库打交道?何时使用?对SQLServer执行所有的操作都可以程序中的增删改查怎么使用?…6/37问题SQL和T-SQLT-SQL:Transact-SQLT-SQL是SQL的增强版对功能进行了扩充:如变量说明、流程控制、功能函数7/37SQL的组成DML(数据操作语言)插入、删除和修改数据库中的数据DCL(数据控制语言)用来控制存取许可、存取权限等DQL(数据查询语言)用来查询数据库中的数据DDL(数据定义语言)用来建立数据库、数据库对象和定义表的列8/37INSERT、UPDATE、DELETE等GRANT、REVOKE等CREATETABLE、DROPTABLE等SELECT等SQL中的运算符3-1算术运算符9/37运算符一种符号,它是用来进行列间或者变量之间的比较和数学运算的包括算术运算符、赋值运算符、比较运算符、逻辑运算符运算符说明+加运算,求两个数或表达式相加的和,如6+8-减运算,求两个数或表达式相减的差*乘运算,求两个数或表达式相乘的积/除运算,求两个数或表达式相除的商,如5/3的值为1%取模运算,求两个数或表达式相除的余数,如:5%3的值为2SQL中的运算符3-210/37赋值运算符逻辑运算符运算符说明=把一个数或变量或表达式赋值给另一变量,如:Name='王华'运算符说明AND当且仅当两个布尔表达式都为true时,返回TRUE。OR当且仅当两个布尔表达式都为false,返回FALSE。NOT布尔表达式的值取反SQL中的运算符3-311/37比较运算符运算符说明=等于,例如:age=23大于,例如:price100小于不等于=大于等于=小于等于!=不等于(非SQL-92标准)语法检查执行结果查询窗口的介绍12/37数据库对象执行调试T-SQLINSERT[INTO]表名[(列名)]VALUES(值列表)INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('张青裁','上海松江',6,'ZQC@Sohu.com',0)向学生表中插入一行数据插入数据行语法13/37演示示例1:插入一条学生记录语法示例注意事项1:每次插入一行数据,不能只插入半行或者几列数据插入的数据是否有效将按照整行的完整性的要求来检验INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('张青裁')插入数据行注意事项3-114/37注意事项2:每个数据值的数据类型、精度和小数位数必须与相应的列匹配INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('张青裁','上海松江',ZQC,'ZQC@Sohu.com','ZG')注意事项3:不能为标识列指定值INSERTINTOStudents(SCode,SName,SAddress,SGrade,SEmail,SSEX)VALUES(32,'张青裁','上海松江',6,'ZQC@Sohu.com',0)注意事项4:如果在设计表的时候就指定了某列不允许为空,则必须插入数据INSERTINTOStudents(SAddress,SGrade,SEmail,SSEX)VALUES(‘上海松江’,6,,0)插入数据行注意事项3-215/37注意事项5:插入的数据项,要求符合检查约束的要求INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('张青裁','上海松江',6,'ZQC',0)注意事项6:具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('张青裁',DEFAULT,6,'ZQC@Sohu.com',0)插入数据行注意事项3-316/37INSERTINTOAddressList(姓名,地址,电子邮件)SELECTSName,SAddress,SEmailFROMStudentsINSERTINTO表名(列名)SELECT列名FROM源表名插入多行数据4-117/37演示示例2:插入多条学生记录示例语法•通过INSERTSELECT语句将现有表中的数据添加到已存在的表中方法一注意AddressList表必须预先创建,并具有姓名,地址和电子邮件三列SELECTStudents.SName,Students.SAddress,Students.SEmailINTOAddressListFROMStudents插入多行数据4-218/37演示示例2:插入多条学生记录SELECT(列名)INTO表名FROM源表名语法示例•通过SELECTINTO语句将现有表中的数据添加到新表中方法二注意该语句只能执行一次插入多行数据4-319/37演示示例2:插入多条学生记录INSERTSTUDENTS(SName,SGrade,SSex)SELECT'张可',7,1UNIONSELECT'李扬',4,0UNIONSELECT'杨晓',2,0UNIONSELECT'汤美',3,0UNIONSELECT'苏三东',7,1UNIONSELECT'王立岩',3,1UNIONSELECT'张伟',7,1UNIONSELECT'陈刚',4,1UNIONSELECT'王娟娟',7,0示例INSERTINTO表名(列名)SELECT列名UNIONSELECT列名UNION……语法•通过UNION关键字合并数据进行插入方法三学员操作——增加学生记录2-1训练要点:使用INSERT语句向数据库表插入数据需求说明:在Student表中使用T-SQL插入如下数据20/37讲解需求说明指导学号密码姓名性别年级联系电话现住址生日电子邮件S1201302001zhangsan张三男101062768866解放路1994-1-1zhangsan@126.comS1201302002lisi89李四男113812345678长江路1992-2-1S1201302003(默认值)王五男113912345678(默认值)1992-5-3S1201302004wanglili王丽丽女113112345678(默认值)1991-6-2wangll@sohu.comS1201302005(默认值)张峰男113212345678(默认值)1994-8-8学员操作——增加学生记录2-2难点分析默认值的插入方式、日期型数据的插入方式、允许空值的列插入方式21/37INSERTINTOStudent(StudentNo,LoginPwd,StudentName,Sex,GradeId,Phone,Address,BornDate)VALUES('S1200902005',DEFAULT,'张峰','男',1,'13212345678',DEFAULT,'1987-6-2')指导完成时间:20分钟学员操作——创建学生通讯录需求说明:根据学生信息表Student,使用INSERTSELECT语句创建通讯录表Address_IS根据学生信息表Student,使用SELECTINTO语句创建通讯录表Address_SI保存T-SQL为“创建通讯录.sql”文件22/37完成时间:10分钟练习学员操作——增加科目23/37完成时间:10分钟需求说明:在Subject表中使用T-SQL插入如下数据保存T-SQL为“增加科目记录.sql”文件练习科目名称课时所属年级SubjectNameClassHourGradeId走进Java编程世界401TML和CSS网页技术601学员操作——增加成绩信息24/37需求说明:在Result表中使用T-SQL插入如下数据保存T-SQL为“增加成绩记录.sql”文件练习完成时间:10分钟学号所考科目分数考试日期StudentNoSubjectIdStudentResultExamDateS12013020011802013-9-13S12013020021452013-9-13S12013020012902013-10-18S12013020022602013-10-18UPDATE表名SET列名=更新值[WHERE更新条件]UPDATEStudentsSETSSEX=0UPDATEStudentsSETSAddress='北京女子职业技术学校家政班'WHERESAddress='北京女子职业技术学校刺绣班'UPDATEScoresSETScores=Scores+5WHEREScores=95使用UPDATE更新数据行25/37语法示例演示示例3:修改记录注意1、更新多列数据使用逗号隔开2、勿忘条件限制,以防有效数据的丢失教员指导——修改学生记录2-126/37训练要点:使用UPDATE语句修改数据库表中的数据需求说明:修改学生的住址修改学生的所属年级修改某课程的学时数提高某课程分数修改某学生分数修改空值的记录指导讲解需求说明学员指导——修改学生记录2-2难点分析多条件的联合使用AND日期的比较判断列是否为空27/37WHEREExamDate='2013-9-13'ANDSubjectId=1ANDStudentResult60WHEREExamDate='2013-9-13'WHEREEmailISNULLOREmail=''指导完成时间:20分钟共性问题集中讲解28/37常见调试问题及解决办法代码规范问题共性问题集中讲解DELETE[FROM]表名[WHERE删除条件]DELETEFROMStudentsWHERESName='张青裁'DELETEFROM学生信息表WHERE学号='0010012'运行错误河南新乡赵可以0010016河南新乡张丽鹃0010015江西南昌雷铜0010014湖南新田吴兰0010013山东定陶李山0010012…地址姓名学号980010016数学810010013语文670010012语文740010013数学880010012数学….分数学号科目使用DELETE删除数据行29/37语法示例演示示例4:删除学生记录TRUNCATETABLE表名DELETEFROMStudents使用TRUNCATE删除数据行30/37语法TRUNCATETABLEStudents示例演示示例4:删除学生记录功能类似1.表结构、列、约束等不被改动2.不能用于有外键约束引用的表3.标识列重新开始编号注意经验实际工作中应用尽量少用TRUNCATETABLE,因为它删除的数据不能恢复学员操作——删除学生记录31/37需求说明:学校要求不允许1995年7月1日后出生的学生入学保存T-SQL为“删除记录.sql”文件练习完成时间:5分钟总结SQL语言是数据库能够识别的通用指令集一次插入多行数据的方法有:INSERTSELECTSELECTINTOUNION关键字使用UPDATE更新数据,一般有限制条件使用DELETE