资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,.,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,.,*,第三讲,Transact-SQL,1,.,2,.,1,、,Transact-SQL,概述,SQL,:,Structured Query Language,,,结构化查询语言,是一种用于,存取,,,查询数据,及其,管理数据库,的数据库查询和编程语言。,目前在,Microsoft SQL Server,和,Sybase Adaptive Server,中仍然被使用为核心的查询语言。,这种语言的语法结构类似于英语,易学易用,书写随意。,SQL,本身,不是独立的程序设计语言,,不能使用它进行用户界面设计,因此通常将,SQL,语言嵌入到如,C#,,,VB,,,Delphi,等语言中使用。,3,.,SQL,语句的构成,数据定义语言,DDL,(Data Definition Language),:,用于对数据库及其对象进行,创建,修改,删除,。包括,CREATE,(创建),,ALTER,(修改),,DROP,(删除)语句。,数据操纵语言,DML,(Data Manipulation Language),:,操纵数据库中的各种对象,包括,SELECT,(查询),,DELETE,(删除),,INSERT,(添加),,UPDATE,(修改)语句;,数据控制语言,DCL,(Data Control Language),:,控制数据库对象的操作权限,包括,GRANT,(授予权限),,REVOKE,(回收权限)。,4,.,熟悉,XK,数据库,5,.,Class,(班级表),ClassNo(,班级编码,),DepartNo,(系部编码),ClassName,(班级名称),Course,(课程表),CouNo(,课程编码,),CouName(,课程名称,),Kind(,课程分类,),Credit(,学分,),Teacher(,教师,),DepartNo(,系部编码,),SchoolTime(,上课时间,),LimitNum(,限制选课人数,),WillNum(,报名人数,),ChooseNum(,被选中上该课程的人数,),Student,(学生表),StuNo(,学号,),ClassNo(,班级编码,),StuName(,姓名,),Pwd(,密码,),Department,(部门表),DepartNo(,系部编码,),DepartName(,系部名称,),。,StuCou,(学生选课表),StuNo(,学号,),CouNo(,课程编码,),WillOrder(,自愿号,),State(,选课状态:报名和选中,),RandomNum(,随机数,),6,.,2,、查询与统计数据,2.1 Select,语句的基本格式,SELECT,子句:,指定要显示的列名,列名间用逗号隔开,FROM,子句:,指定查询的列名来自那些表,逗号隔开,WHERE,子句,:指定查询条件,7,.,实例数据库,XK,-,例:,从学生表中查询姓名为,“,张晶晶,”,的同学的学号、姓名和班级编码。,use xk,go,select StuNo,ClassNo,StuName,from dbo.Student,where StuName=,张晶晶,go,8,.,实例数据库,XK,-,例:从,Student,表中查询学号为的学生的信息,要求显示学生的学号(,StuNo,)和姓名(,StuName,)。,use xk,go,select StuNo,StuName,from student,where StuNo=00000003,go,9,.,练习,从学生表中查询全体学生的,(,StuNo,)和姓名(,StuName,)。,从学生表中检索姓名为,“,杨华,”,的同学的学号、姓名和班级编码。,10,.,2.2,、使用星号,(*),在选择列表中使用*,则从,FROM,子句中指定的表或视图中检索并返回,所有列,。选择表中给出具体的列明,则只查询所指定的列名。,例:显示学生表中姓名叫,张晶晶,的所有信息。,use xk,go,select *,from student,where stuname=,张晶晶,go,11,.,练习,查询课程表中,所有课程的信息,查询课程表中,任课教师是,“,李涛,”,的课程信息,12,.,2.3,消除取值重复的行,-,从课程表中查询课程类别信息,(kind),select kind,from course,go,13,.,-,从课程表中查询课程类别信息,(kind),消除重复项,select,distinct,kind,from course,go,14,.,练习,从学生表中检索学生的班级编码,要求显示班级编码并消除其重复值,15,.,分析下面两组,sql,语句的不同,-,消除,kind,和,credit,列值都相同的那些重复行,select kind,credit,from course,go,select distinct kind,credit,from course,go,16,.,2.4,使用,TOP n PERCENT,仅返回前,N,行,使用,TOP,关键字,可以从结果集中仅返回前,n,行。如果指定了,Percent,关键字,则仅返回前,n%,行。,17,.,例、,从学生表中查询所有信息,要求只显示查询结果的前,6,名,学生数据,。,use xk,go,select top 6*,from student,go,请分析下面的这几行,SQL,语句的查询结果是什么?,select top 6 percent *,from student,go,18,.,练习,从学生表中,查询,20000001,班的前,6,名同学。,19,.,练习,从课程表中查询所有信息,要求只显示查询结果的前,6%,的课程信息,。,20,.,2.5,改变查询结果列的标题,比较直观,21,.,-,例、,改变列的标题名称,select top 6 ,学号,=StuNo,姓名,=StuName,性别,=Gender,from student,go,22,.,修改检索结果中列标题的方法:(,p27,),select,课程编码,=CouNo,课程名称,=CouName,教师,=teacher from course,select CouNo,课程编码,CouName,课程名称,teacher,教师,from course,select CouNo as,课程编码,CouName as,课程名称,teacher as,教师,from course,23,.,练习,查询课程表中课程编号,课程名称,教师,上课时间,限选人数,报名人数。,列标题分别为:课程编号,课程名称,教师,上课时间,限选人数,报名人数,24,.,在查询结果中显示字符串,use xk,go,select,课程名称,=couname,课程编号是,课程编号,=couno,from course,go,25,.,在查询结果中显示字符串,在,select,子句中,将要增加的字符串用单引号括起来,然后和列名写在一起,中间用逗号隔开。,select ,课程名称,=couname,课程编号是,课程编号,=couno,26,.,练习,查询学生表,部分显示结果如下,请写出其,sql,语句。,27,.,use xk,go,select top 7,姓名,=stuname,的班级编号是,班级编号,=classno,from student,go,28,.,6,、使用,Where,限制查询条件,在学生表中,检索所有女同学。,use xk,go,select*,from student,where gender=,女,go,29,.,在学生表中,检索,20000003,班的所有女同学。,use xk,go,select*,from student,where gender=,女,and classno=20000003,go,30,.,使用,where,子句限制检索条件,这个条件通常是一个逻辑表达式,在表达式中可以使用,比较运算符,=,、,、,、,!=,、,=,、,、,!=30,go,32,.,练习,检索报名人数大于等于,30,并且小于等于,40,的课程信息,要求显示课程名称和报名人数。,33,.,use xk,go,select,课程名称,=couname,报名人数,=willnum,from course,where willnum between 30 and 40,Go,注意,WHERE WillNum BETWEEN 30 AND 40,包括,30,和,40,这两个值,34,.,请问下列,SQL,语句的查询功能是什么?,use xk,go,select,课程名称,=couname,报名人数,=willnum,from course,where willnum not between 30 and 40,go,35,.,7,、使用,IN,子句限制范围,检索课程编码为,001004013,的课程信息,方法一:使用逻辑运算符,OR,use xk,go,select *,from course,where couno=001 or couno=004,or couno=013,go,36,.,方法二:,使用,IN,关键字,(比使用逻辑运算符更为简单),use xk,go,select*,from course,where couno in(001,003,013),go,37,.,练习,查询学号分别为,“,00000003,、,00000013,、,00000023,”,的三个学生的信息。,请从课程表(,Course,)中查询课程号不为,004,,,007,,,013,的课程号和课程名称。,38,.,复习(任务单,3,),4,)查询学分不为,3.0,,不为,2.5,的课程信息,select*,from course,where credit3.0 and credit2.5,go,select*,from course,where credit not in(3.0,2.5),go,39,.,-5,)从学生表中检索学号在,“,00000003,”,到,“,00000013,”,-,之间的学生的信息。(用种方法实现),select*,from student,where stuno between00000003 and 00000013,go,select*,from student,where stuno=00000003 and stuno25,go,95,.,统计,系部编码为,01,的系所开设的课程总共有多少学生报名。,统计,所开设的课程总报名学生超过,300,的系部。,练习,96,.,97,.,练习,98,.,15,、子查询,99,.,
展开阅读全文