大学计算机-计算思维导论2013-2014ResearchCenteronIntelligentComputingforEnterprises&Services,HarbinInstituteofTechnology战德臣哈尔滨工业大学教授.博士生导师教育部大学计算机课程教学指导委员会委员OKZhanDCOKZhanDC第11讲怎样管理和利用数据(II)2013-2014ResearchCenteronIntelligentComputingforEnterprises&Services,HarbinInstituteofTechnology战德臣哈尔滨工业大学教授.博士生导师教育部大学计算机课程教学指导委员会委员OKZhanDCOKZhanDC第11讲怎样管理和利用数据(II)用数据说话、用数据决策、用数据创新已形成社会的一种常态和共识,数据已被视为知识的来源、被认为是一种财富。继续学习数据库相关知识,体验基于数据库的数据运用方法,理解基本的数据化思维方式战德臣教授4/62怎样管理和利用数据(II)1.由关系模型到结构化数据库语言SQL由关系模型到结构化数据库语言SQL战德臣教授5/621.由关系模型到结构化数据库语言SQL1.1回顾数据库系统的概念数据格式数据981102数据库李四99秋02王四90谁能访问数据更新数据有什么要求…………用户定义的数据安全性约束条件阶段1:User/DBAP通过数据定义语言(DCL)定义数据表的格式阶段2:User/DBAP通过数据操纵语言(DML)操纵数据进出数据库User/DBA通过数据控制语言(DCL)定义数据安全性班级课程教师学期学号姓名成绩981101数据库李四98秋01张三100981101数据库李四98秋02张四90981101数据库李四98秋03张五80981101计算机李五98秋01张三89981101计算机李五98秋02张四98981101计算机李五98秋03张五72981102数据库李四99秋01王三30981102数据库李四99秋02王四90981102数据库李四99秋03王武78学生成绩单DBUserDBMS•检查用户合法性•检查数据合法性•按用户要求的操作执行并返回结果。DBAP战德臣教授6/62数据库语言SQLSelect列名[[,列名]…]From表名1[[,表名2],…][Where检索条件];语义:将From后面的所有表串接起来,检索出满足“检索条件”的元组,并按给定的列名及顺序进行投影显示。列名,…,列名(检索条件(表名1表名2…))关系运算式1.由关系模型到结构化数据库语言SQL1.2由关系模型到结构化数据库语言SQL战德臣教授7/62SQL:StructuralQueryLanguageSQL语言是数据库系统的标准语言,它可以定义数据库、操纵数据库和进行数据库控制。SQL语言主要由以下9个单词引导的操作语句来构成,但每一种语句都能表达复杂的操作请求。DDL语句引导词:Create(建立),Alter(修改),Drop(撤消)定义Database,Table,View,IndexDML语句引导词:Insert(插入),Update(更新),Delete(删除),Select(查询)各种方式的更新与检索操作各种条件的查询操作,如连接查找,模糊查找,分组查找,嵌套查找等各种聚集操作,求平均、求和、…等,分组聚集,分组过滤等DCL语句引导词:Grant,Revoke安全性控制---授权和撤消授权1.由关系模型到结构化数据库语言SQL1.3什么是结构化数据库语言SQL战德臣教授8/621.由关系模型到结构化数据库语言SQL1.4用SQL语言创建数据库并定义表-简介创建课程学习数据库:SCTCreateDatabaseSCT;SCT定义学生表:StudentCreateTableStudent(S#char(8)notnull,Snamechar(10),Ssexchar(2),Sageinteger,D#char(2),Sclasschar(6));定义课程表:CourseCreateTableCourse(C#char(3),Cnamechar(12),Choursinteger,Creditfloat(1),T#char(3));同学可自己定义其他的表:Dept,Teacher,SCStudentCoursecreatetable表名(列名数据类型[notnull][,列名数据类型,…]);战德臣教授9/621.由关系模型到结构化数据库语言SQL1.5用SQL语言在所定义表中增加记录-简介insertinto表名[(列名[,列名]…]values(值[,值],…);追加学生表中的元组InsertIntoStudentValues(‘98030101’,‘张三’,‘男’,20,’03’,‘980301’);InsertIntoStudent(S#,Sname,Ssex,Sage,D#,Sclass)Values(‘98030102’,‘张四’,‘女’,20,’03’,‘980301’);追加课程表中的元组InsertIntoCourse/*所有列名省略,须与定义或存储的列名顺序一致Values(‘001’,‘数据库’,40,6,’001’);/*如列名未省略,须与语句中列名的顺序一致InsertIntoCourse(Cname,C#,Credit,Chours,T#);Values(‘数据库’,‘001’,6,20,‘001’);战德臣教授10/62已经建立好的数据库---供后面学习和训练使用1.由关系模型到结构化数据库语言SQL1.6已经建立起的数据库战德臣教授11/62怎样管理和利用数据(II)2.SQL-SELECT之简单使用SQL-SELECT之简单使用----基本检索----结果排序----结果去重复----模糊查找战德臣教授12/62Select的简单语法形式为:Select列名[[,列名]…]From表名[Where检索条件];语义:从表名所给出的表中,查询出满足检索条件的元组,并按给定的列名及顺序进行投影显示列名,…,列名(检索条件(表名))2.SQL-SELECT之简单使用2.1基本检索操作的表达方法战德臣教授13/62例如:检索学生表中所有学生的信息SelectS#,Sname,Ssex,Sage,Sclass,D#FromStudent;Select*FromStudent;//如投影所有列,则可以用*来简写再如:检索学生表中所有学生的姓名及年龄SelectSname,Sage//投影出某些列FromStudent;再如:检索学生表中所有年龄小于19岁的学生的年龄及姓名SelectSage,Sname//投影的列可以重新排定顺序FromStudentWhereSage=19;2.SQL-SELECT之简单使用2.2基本检索条件书写SELECT…FROM…WHERE…战德臣教授14/62例如:求或者学过001号课程,或者学过002号课程的学生的学号SelectS#FromSCWhereC#=‘001’ORC#=‘002’;再例如:求既学过001号课程,又学过002号课程的学生的学号?如下书写SQL语句会得到正确结果吗?它能得到什么结果?怎样正确书写?SelectS#FromSCWhereC#=‘001’ANDC#=‘002’;//正确的SQL语句在讲义后面的示例中讲解2.SQL-SELECT之简单使用2.2基本检索条件书写对于每一行应用Where子句的条件SELECT…FROM…WHERE…战德臣教授15/62例如:在选课表中,检索成绩大于80分的所有学号SelectS#FromSCWhereScore80;//有重复元组出现,比如一个同学两门以上课程大于80SelectDISTINCTS#FromSCWhereScore80;//重复元组被DISTINCT过滤掉,只保留一份检索结果去重复:DISTINCT表(Table)和关系(Relation)在大部分情况下概念通用,但有细微差别:前者可允许有重复元组,而后者不允许2.SQL-SELECT之简单使用2.3检索结果的去重复战德臣教授16/62Select语句中结果排序是通过增加orderby子句实现的orderby列名[asc|desc]意义为结果按指定列名进行排序,若后跟asc或省略,则为升序;若后跟desc,则为降序。例如:按学号由小到大的顺序显示出所有学生的学号及姓名SelectS#,SnameFromStudentOrderByS#ASC;再如:检索002号课大于80分的所有同学学号并按成绩由高到低顺序显示SelectS#FromSCWhereC#=‘002’andScore80OrderByScoreDESC;基本的检索操作2.SQL-SELECT之简单使用2.4检索结果的排序SELECT…FROM…WHERE…ORDERBY…战德臣教授17/62模糊查询问题。比如检索姓张的学生,检索张某某;这类查询问题,Select语句是通过在检索条件中引入运算符like来表示的含有like运算符的表达式列名[not]like“字符串”找出匹配给定字符串的字符串。其中给定字符串中可以出现%,_等匹配符.匹配规则:“%”匹配零个或多个字符“_”匹配任意单个字符“\”转义字符,用于去掉一些特殊字符的特定含义,使其被作为普通字符看待,如用“\%”去匹配字符%,用\_去匹配字符_2.SQL-SELECT之简单使用2.5模糊查询战德臣教授18/62例如:检索所有姓张的学生学号及姓名SelectS#,SnameFromStudentWhereSnameLike‘张%’;再如:检索名字为张某某的所有同学姓名SelectSnameFromStudentWhereSnameLike‘张__’;再如:检索名字不姓张的所有同学姓名SelectSnameFromStudentWhereSnameNotLike‘张%’;2.SQL-SELECT之简单使用2.5模糊查询战德臣教授19/62怎样管理和利用数据(II)3.SQL-SELECT之多表联合操作SQL-SELECT之多表联合操作----多表联合操作之连接条件----表与列的别名----表与自身的连接战德臣教授20/62Select的多表联合检索语句如下:Select列名[[,列名]…]From表名1,表名2,…Where检索条件;相当于列名,…,列名(检索条件(表名1表名2…))检索条件中要包含连接条件,通过不同的连接条件可以实现各种连接操作。3.SQL-SELECT之多表联合操作3.1多表联合检索的表达方法战德臣教授21/62例如:按“001”号课成绩由高到低的顺序显示出所有学生的姓名(二表连接)SelectSnameFromStudent,SCWhereStudent.S#=SC.S#andSC.C#=‘001’OrderByScoreDESC;当多表连接时,如果两个表的属性名相同,则需采用表名.属性名方式来限定该属性是属于哪一个表再如:按‘数据库’课程成绩由高到低顺序显示所有同学姓名(三表连接)SelectSnameFromStudent,SC,CourseWhereStudent.S#=SC.S#andSC.C#=Course.C#andCname=‘数据库’OrderByScoreDESC;3.SQL-SELECT之多表联合操作3.2多表联合检索之连接条件书写Student(S#,Sname,Ssex,Sage,D#,Sclass)Course(C#,Cname,Chours,Credit,T#)SC(S#,C#,Score)Dept(D#,Dname,Dean)Teacher(T#,Tname,D#,Salary)战德臣教授22/62连接运算涉及到重名的问题,如两个表中的属性重名,连接的两个表重名(同一表的