SQLserver数据库开发.ppt
《SQLserver数据库开发.ppt》由会员分享,可在线阅读,更多相关《SQLserver数据库开发.ppt(140页珍藏版)》请在三一办公上搜索。
1、河南新华电脑学院,数据库开发及ADO.Net,什么是数据库,数据库Database:数据的仓库DB仓库里有排货架(表),货物会分类存放。比如牙膏、牙刷会放到一个排货架上,面包会单独放在一个排货架上。仓库又分很多种粮仓、武器仓库。仓库中还会有仓库管理员(DBA)对货物进行管理从仓库中拿货物需要凭证,取货和进货的人(程序员),我们怎么存储数据,学校的档案室计算机文件,文件操作,开发人员需要熟悉操作磁盘文件的函数、必须编写复杂的搜寻算法才能高效的把数据从文件中检索出来、当数据格式发生变化时,需要编写复杂的文件格式升级程序、很难控制并发修改。数据库(其实也是文件),DBMS(数据库管理系统)RDBMS
2、对于数据不仅仅是需要存储,更重要的是将数据进行存储以后怎么才能方便快捷的查询、修改。数据库特点:海量存储、查找速度快、并发性问题控制、安全性、数据完整性(保存在数据库中的数据是正确的,真是的)。,数据库概述,DBMS(DataBase Management System,数据库管理系统)和数据库。平时谈到“数据库”可能有两种含义:MSSQLServer、Oracle等某种DBMS;存放一堆数据表的一个分类(Catalog)。不同品牌的DBMS有自己的不同的特点:MYSQL(速度很快,适合对数据要求并不是十分严谨的地方,去掉了很多中小型企业中不常用的功能)、MSSQLServer(与.net结合
3、很好,只能运行在windows平台下,大数据量、大交易量表现并不十分好)、DB2(大型)、Oracle(大型)、Access(文件)、SQLite(极其轻量级数据库)、Sybase等。对于开发人员来讲,大同小异SQL(语言)SQLServerMSSQLServer。最常见的错误。除了Access、SQLServerCE、SQLite等文件型数据库之外,大部分数据库都需要数据库服务器才能运行。学习、开发时是连接本机的数据库,上线运行时是数据库运行在单独的服务器。,数据库中的概念,数据库DataBase,不同类的数据应该放到不同的数据库中便于对各个数据类别的进行个性化管理 避免命名冲突安全性更高
4、Table(表):关系数据库中的关系指的就是表。不同的货物要放到各自的货物架,将这种区域叫做“表”(Table)。不同的表根据放的数据不同进行空间的优化,找起来也方便。列(Column)、字段(Field)、行(Row)元组用表格格式化数据:即便是引入了自动识别设备也很容易识别。,2003年5月入职,是产品开发部的,姓名马小虎,王二小,技术支持部,入职是2005年7月,思考:1.一张表中有很多条记录,有没有可能出现重复的记录?2.什么叫做重复的记录?3.我们可以允许表中有重复的记录吗?为什么?,主键(Primary Key)数据库的一种约束,主键就是数据行的唯一标识。不会重复的列才能当主键。一
5、个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都要设定主键主键有两种选用策略:业务主键和逻辑主键。业务主键是使用有业务意义的字段做主键,比如身份证号、银行账号等;逻辑主键是使用没有任何业务意义的字段做主键,完全给程序看的,业务人员不会看的数据。因为很难保证业务主键不会重复(身份证号重复)、不会变化(帐号升位),因此推荐用逻辑主键。,表间关联、外键(Foreign Key)冗余,SQLServer的管理,需要安装SQLServer2005或者SQLServer2008,若要使用SQLServer管理工具进行开发还要安装SQL Server Management Studio,还可以使用
6、VisualStudio进行管理使用免费的SQLServerExpress版本,Express版本的服务器名称.SQLEXPRESS,对于开发人员来讲和其他版本没有区别。(Express版本的数据库功能有一些限制,比如:数据文件最大大小为4GB等等。)SQLServer的两种验证方式:用户名验证和Windows验证,开发时用Windows验证就行。开发人员关注点在开发上,而不是配置、备份等之上,那是DBA做的事情。,创建数据库,创建数据库,创建表,设置主键数据库的分离和附加MS SQLServer的每个数据库包含:1个主数据文件(.mdf)必须。1个事务日志文件(.ldf)必须。可以包含:任意
7、多个次要数据文件(.ndf)多个事务日志文件文件组:可将多个数据文件逻辑的分到一组,方便日后管理维护(备份、将表建在指定的文件组上等等。)创建:部门Id,部门名称:员工Id,身份证号,姓名,性别,入职日期,年龄,地址,电话,所属部门、Email,数据库中的数据类型,练习,创建一个School数据库。创建一个班级表:TblClass:tClassId(班级编号,自动编号,主键)、tClassName(班级名称)、tClassDesc(班级简介)。创建一个学生信息表:TblStudent:tSId(学生编号,自动编号,主键)、tSName(学生姓名)、tSGender(性别)、tSAddress(
8、家庭地址)、tSPhone(电话)、tSAge(年龄)、tSBirthday(出生日期)、tSCardId(身份证号)、tClassId(班级Id)分离数据库在需要分离的数据库上点右键-任务-分离附加数据库(在其他计算机上,亲自测试!注意权限问题)在数据库节点上点右键-附加打开数据之前,要打开数据库服务,SQL语句入门(脚本、命令),SQL全名是结构化查询语言(Structured Query Language),是关系数据库管理系统的标准语言SQL语句是和DBMS“交谈”专用的语句,不同DBMS都认SQL语法。=SQL语句中字符串用单引号、单等号。select*、SeLeCT*:SQL语句是
9、大小写不敏感的,不敏感指的是SQL关键字,字符串值还是大小写敏感的(大小写是否敏感取决于具体的数据库排序规则设置)-在数据库中两个表示一个【转义】=建库、删除数据库、创建表、删除表不仅可以手工完成,还可以执行SQL语句完成,在自动化部署、数据导入中用的很多简单的Insert语句。(*)SQL主要分DDL(数据定义语言,建表、建库等语句。)、DML(数据操作语言)和DCL(数据库控制语言)。Create Table、Drop Table、Alter Table等属于DDL,Select、Insert、Update、Delete等属于DML,GRANT 授权、REVOKE 取消授权属于DCL,使用
10、sql语句创建数据库和表,使用SQL语句创建School数据库、TblClass表、TblStudent表。Go:将T-SQL语句分批发送到数据库实例执行。tSId tSNametSGendertSAddress tSPhone tSAge tSBirthday tSCardId tSClassId,创建表练习,创建数据库School,创建一个学生表TblStudent-tSId(主键)-tSName-tSGender-tSAddress-tSPhone-tSAge-tSBirthday-tSCardId-tSClassId 创建学生成绩表TblScoretScoreId(成绩id,主键,自动
11、编号)、tSId(学生编号)、tEnglish(英语成绩)、tMath(数学成绩)创建老师表TblTeachertTId、tTName、tTGender、tTAge、tTSalary、tTBirthday,介绍生成脚本工具,数据库右键任务生成脚本可选择生成什么样的脚本选择生成的数据库版本是否包含某些脚本等。是否生成带数据的脚本(2005、2008都有该功能express没有。),简单数据插入insert,向表中插入一行(该行的每一列都有数据)insert into 表(列名,列名)values(值1,值2)insert语句可以省略表名后的列名,但是不推荐。Insert into 表 value
12、s(值1,值2)插入数据时,只向某些列插入数据:如果插入的行中有些字段的值不确定,那么Insert的时候不指定那些列即可。Insert into 表(列1)values(值1)自动编号列不需要手动插入。【SET IDENTITY_INSERT 表名 ON】注意:主键不能有重复值。插入数据时的单引号问题。Insert into 表(列)select 列1,列2 unionInsert into 表(列)select 列1,列2 from 表Select 列 into 新表名 from 旧表N前缀:N字符串,在服务器上执行的代码中(例如在存储过程和触发器中)显示的 Unicode 字符串常量必须以
13、大写字母 N 为前缀。即使所引用的列已定义为 Unicode 类型,也应如此。如果不使用 N 前缀,字符串将转换为数据库的默认代码页。这可能导致不识别某些字符。在Northwind数据库下测试print 中文中文。通过Ado操作时如果遇到sql字符串也需要加前缀N。如果使用带参数sql语句则不需要加N.,简单数据更新(数据修改),更新一个列:update Student set sSex=男更新多个列:update Student set sSex=女,sAge=18,sBirthday=1989-8-8更新一部分数据:update Student set sClassId=4 where s
14、ClassId=1,用where语句表示只更新Name是tom的行,注意SQL中等于判断用单个=,而不是=。Where中还可以使用复杂的逻辑判断update Student set sAge=30 where sName=华佗 or sAge20 and sAge、=、(或!=)等,简单数据删除,删除表中全部数据:DELETE FROM Student。Delete只是删除数据,表还在,和Drop Table不同。Delete 也可以带where子句来删除一部分数据:DELETE FROM Student WHERE sAge 20=truncate table student 的作用与del
15、ete from student一样,都是删除student表中的全部数据,区别在于:1.truncate语句非常高效。由于truncate操作采用按最小方式来记录日志,所以效率非常高。对于数百万条数据使用truncate删除只要几秒钟,而使用delete则可能耗费几小时。2.truncate语句会把表中的自动编号重置为默认值。3.truncate语句不触发delete触发器。,练习:,插入3条老师信息和5条成绩信息、用SQL插入2条员工信息(注意:bit类型,在写代码中用1或0来表示,不要用false,会进行类型转换的。)EmpId,EmpIdCardNo,EmpName,EmpGender
16、,EmpJoinDate,EmpAge,EmpAddress,EmpPhone,EmpEmail,DeptId练习1:给studentId是1的英语成绩加10分练习2:考试题偏难,所有人的成绩加5分练习3:所有女学生的年龄减1岁删除工资大于2000的老师=将老师表清空=删除所有老师删除数据时候 把自增长列的值还原成种子,约束-保证数据完整性,见备注,创建Employee表和Department表。先用设计器创建约束、再用代码创建约束。数据库约束是为了保证数据的完整性(正确性)而实现的一套机制见文件Employee.sql非空约束主键约束(PK)primary key constraint 唯一
17、且不为空唯一约束(UQ)unique constraint 唯一,允许为空,但只能出现一次默认约束(DF)default constraint 默认值检查约束(CK)check constraint 范围以及格式限制外键约束(FK)foreign key constraint 表关系增加外键约束时,设置级联更新、级联删除:ON DELETE NO ACTION|CASCADE|SET NULL|SET DEFAULT ON UPDATE NO ACTION|CASCADE|SET NULL|SET DEFAULT,约束练习,Teacher表中tSex控制只能是男 女,默认男 tAge在30-4
18、0之间 默认30Score表中studentId 是外键 先要把Student表中的sId设置为主键测试外键约束:1:在学生表(主表)中删除在成绩表中被引用的学生记录。2:成绩表中添加一条新成绩,studentId在 学生表中没有。保存SQL脚本。再次打开即可执行。,用t-sql代码来创建约束,操作TblEmployee表。,数据检索(查询),执行备注中的代码创建测试数据表。简单的数据检索:SELECT*FROM Student只检索需要的列:SELECT sName FROM Student、ame FROM Student WHERE sSex=女。还可以检索不与任何表关联的数据:sele
19、ct 1+1;select select getdate();,Top、Distinct,Top 获取前几条数据,top一般都与order by连用获得年纪最小的5个学生获得年纪最大的10%的学生(percent)Distinct 去除重复数据select distinct sName from studentselect distinct sName,sAge from studentDISTINCT是对查询出的整个结果集进行数据重复处理的,而不是针对某一个列。1.建表,带重复数据。演示distinct2.通过alter table增加identity列,再演示distinct。alter
20、table TT2 add autoId int identity(1,1)3.演示查询除主键外的其他列重复数据。,聚合函数,SQL聚合函数:MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM(和)、COUNT(数量:记录的条数。)聚合函数对null值不计算。如果一行的数据都是null,count(*)包含对空值行、重复行的统计。平均成绩select avg(english)from score男学生出生日期的最大值和最小值:select max(sBirthday),min(sBirthday)from student where sSex=男,带条件的查询,Select from
21、where 查询没有及格的学生的学号查询年龄在20-30岁之间的男学生Betweenand 在之间查询年龄在20-30岁之间的男学生查询math成绩在80-90分之间的所有学生建议:使用between and。(闭区间)查询班级id为1,2,3的所有学生select sName,sAge from student where sClassId=1 or sClassId=2 or sClassId=3select sName,sAge from student where sClassId in(1,2,3)如果可能in尽可能替换为=1 and=3,带条件的查询-模糊查询(都是针对字符串操作的
22、),查询所有姓张的同学Select*from student where left(sName,1)=张 看上去很美,如果改成查询名字中带亮的学生怎么做?换一种做法 like Select*from student where sName like 张%会吧所有姓张的都查询到,现在我想查询姓张并且名字是一个字的学生?Select*from student where sName like%亮%_、%、只有MSSQL Server支持,其他DBMS用not like。通配符%多字符匹配的通配符,它匹配任意次数(零或多个)出现的任意字符通配符_ 单字符匹配,它匹配单个出现的字符 只匹配一个字符 并
23、且这个字符必须是范围内的 0-9 a-znot与like一起使用:not like.要通配_、%、这些字符怎么办?_、%、(不需要放到中括号里,因为只有放到中括号中才认为是通配符),空值处理,数据库中,一个列如果没有指定值,那么值就为null,数据库中的null表示“不知道”,而不是表示没有。因此select null+1结果是null,因为“不知道”加1的结果还是“不知道”。select*from score where english=null;select*from score where english!=null;都没有任何返回结果,因为数据库也“不知道”。SQL中使用is null
24、、is not null来进行空值判断:select*from score where english is null;select*from score where english is not null;ISNULL(check_expression,replacement_value),数据排序order by,ORDER BY子句位于SELECT语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列,ASC)还是降序(从大到小排列,DESC)。按照年龄升序排序所有学生信息的列表:SELECT*FROM Student ORDER BY sAge AS
25、C 按照英语成绩从大到小排序,如果英语成绩相同则按照数学成绩从大到小排序:SELECT*FROM Score ORDER BY english DESC,math DESCORDER BY子句要放到WHERE子句之后:SELECT*FROM Score where english=60 and math=60 ORDER BY english DESC,math DESCOrder by 语句一般要放到所有语句的后面,就是先让其他语句进行筛选,全部筛选完成后,最后排序一下。(表中数据是集合,集合是没有顺序的。Order by 返回的数据是有顺序的,故此我们把order by 以后返回的数据集合
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQLserver 数据库 开发
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5449396.html