网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

SQLserver

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
【例1-1】查询XSCJ数据库中所有学生基本信息。
    使用查询分析器实现这个查询的具体步骤如下:
    ①依照本章1.3.1节中介绍的方法登录到服务器,打开查询分析器窗口,如图1-26所示。
    ②在查询编辑窗口中用户可以输入SQL语句如下:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    GO
    例1-2】查询学生成绩信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM成绩表
    GO
    【例1-2】查询pubs示例数据库中authors表的信息。
    USEpubs
    GO
    SELECT*FROMauthors
    GO
    【例2-1】在数据库XSCJ中定义一个长度为12的字符串类型变量@student,对该变量进行赋值,并且查询出“学生基本信息表“中该变量所指定的学生信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    DECLARE@studentCHAR(12)
    SET@student='王倩倩'
    SELECT*FROM学生基本信息表WHERE=@student
    【例2-2】在数据库XSCJ中定义两个日期时间类型的变量@max_csrq、@min_csrq,分别用于查询“学生基本信息表”中“出生日期”的最大值、最小值。
    USEXSCJ
    GO
    DECLARE@max_csrqDATETIME,@min_csrqDATETIME
    SELECT@max_csrq=MAX(出生日期),@min_csrq=MIN(出生日期)FROM学生基本信息表
    PRINT@max_csrq
    PRINT@min_csrq
    【例2-3】计算XSCJ数据库中“学生基本信息表”的总行数。
    USEXSCJ
    GO
    SELECTCOUNT(*)AS'学生总人数'FROM学生基本信息表
    GO
    【例2-4】计算XSCJ数据库中课程编号为003的课程总成绩和平均成绩。
    USEXSCJ
    GO
    SELECTSUM(成绩)AS'课程总分',AVG(成绩)AS'课程平均分'
    FROM成绩表WHERE课程编号='003'
    GO
    【例2-5】在成绩表中查询课程编号为003的课程的最高分和最低分。
    USEXSCJ
    GO
    SELECTMAX(成绩)AS'最高分',MIN(成绩)AS'最低分'
    FROM成绩表
    WHERE课程编号='003'
    GO
    【例2-6】分别输出2的3次幂、-1的绝对值、2的平方、3.14的整数部分。
    PRINTPOWER(2,3)
    PRINTABS(-1)
    PRINTSQUARE(2)
    PRINTFLOOR(3.14)
    GO
    【例2-7】使用LEN函数显示字符串常量以及字符串变量的长度。
    提示:LEN函数用于计算字符串中所包含的字符个数,如果字符串尾部含有空格则会被忽略。
    PRINTLEN('computerdepartment')
    DECLARE@s1char(10)
    DECLARE@s2char(10)
    SET@s1='welcome'
    SET@s2='hellow'
    PRINTLEN(@s1)
    PRINTLEN(@s2)
    【例2-8】给定一个字符串’haveagoodtime’,判断字符’g’在整个字符串中的位置。
    提示:CHARINDEX函数用于在规定字符串中对子字符串进行查询。当返回值大于零时表示子字符串的起始位置,返回值为0时表明没有查询结果。
    DECLARE@sCHAR(20)
    SET@s='haveagoodtime'
    PRINTCHARINDEX('g',@s)
    【例2-9】获取系统时间信息,在查询分析器中分别显示系统时间中的年份、月份以及日期。
    提示:GETDATE函数用于返回当前的系统时间,YEAR,MONTH,DAY函数可以取得时间中的年、月、日的数值。
    在查询分析器中运行如下命令:
    DECLARE@xtsjDATETIME
    SET@xtsj=GETDATE()
    SELECTYEAR(@xtsj)
    SELECTMONTH(@xtsj)
    SELECTDAY(@xtsj)
    【例2-10】通过对“学生基本信息表”中的“出生日期”字段进行计算,查询每一位学生的年龄。
    提示:利用DATEDIFF函数可以计算出两个日期之间的距离,该函数含有三个参数,第一个参数通常可以为yy(年)或mm(月)或dd(日),若第一个参数为yy时,该函数返回值为后两个日期参数之间年份的差距。在本例中,当前的日期由GETDATE函数获得后,计算与每一位学生的出生日期之间年份的差距,从而获得学生的年龄并在查询结果中显示。
    SELECT,,DATEDIFF(yy,出生日期,GETDATE())from学生基本信息表
    【例2-11】查询“学生基本信息表”中的、、年龄,并且将这三个字段通过“+”运算符进行连结显示在查询结果中。
    提示:由于计算学生年龄的结果为整数,而、均为字符串类型的值,因而在运算之前,需要将年龄的计算结果转化为字符串,即CAST(DATEDIFF(yy,出生日期,GETDATE())ASCHAR(2))。
    SELECT++'年龄:'+CAST(DATEDIFF(yy,出生日期,GETDATE())ASCHAR(2))
    FROM学生基本信息表
    【例2-12】将常量3.14分别转换为整数类型以及字符串类型并且输出结果。
    PRINTCONVERT(INTEGER,3.14)
    PRINTCONVERT(CHAR(4),3.14)
    【例2-13】取得系统当前时间,并且将其转化为mm/dd/yyyy格式的字符串并且显示结果。
    提示;由于mm/dd/yyyy格式所对应的参数为101,所以在使用CONVERT函数时,日期格式样式参数设定为101。
    DECLARE@xtsjDATETIME
    SET@xtsj=GETDATE()
    PRINTCONVERT(CHAR(50),@xtsj,101)
    【例2-14】显示XSCJ数据库信息。
    sp_helpdbXSCJ
    【例2-15】创建一个名称为somename的数据库,利用sp_renamedb存储过程将该数据库重命名为newname
    CREATEDATABASEsomename
    GO
    sp_renamedb'somename','newname'
    GO
    【例2-16】显示超级用户dbo的用户信息。
    sp_helpuserdbo
    【例2-17】在系统中添加一个名为test、密码为1234的登录帐号。
    sp_addlogintest,1234
    【例2-18】在SQLServer中添加一个名称为test的用户。
    sp_addlogintest
    GO
    sp_addusertest
    GO
    【例2-19】删除名称为test的用户。
    sp_dropusertest
    【例2-20】添加一个名为myrole的角色,并将test用户加入该角色中。
    sp_addrolemyrole
    GO
    sp_addmembermyrole,test
    GO
    【例2-21】删除已有的角色myrole。
    sp_droprolemyrole
    【例2-22】执行批处理程序,依次查询系部表、系部总数、班级表、班级总数。
    USEXSCJ
    GO
    SELECT*FROM系部表
    SELECTCOUNT(*)FROM系部表
    SELECT*FROM班级表
    SELECTCOUNT(*)FROM班级表
    GO
    【例2-23】在“学生基本信息表”中查询班级编号为20041001的班级中是否有党员。要求:如果有党员则显示党员的人数,否则,提示该班级没有党员。
    USEXSCJ
    GO
    IF(SELECTCOUNT(*)FROM学生基本信息表WHERE班级编号='20041001'AND政治面貌='党员')>0
    BEGIN
    DECLARE@dyINTEGER
    SELECT@dy=COUNT(*)FROM学生基本信息表WHERE班级编号='20041001'AND政治面貌='党员'
    PRINT'党员的人数为:'
    PRINT@dy
    END
    ELSE
    PRINT'该班级没有党员'
    【例2-24】根据系统时间判断当前日期所对应的星期值并且输出结果。
    DECLARE@dtDATETIME
    SET@dt=DATEPART(w,GETDATE())
    SELECT
    CASE@dt
    WHEN1THEN'星期天'
    WHEN2THEN'星期一'
    WHEN3THEN'星期二'
    WHEN4THEN'星期三'
    WHEN5THEN'星期四'
    WHEN6THEN'星期五'
    WHEN7THEN'星期六'
    END
    【例2-25】取得系统时间,并且判断当前时间在一天中所处的时间段,并且在查询分析器中输出提示信息。
    DECLARE@sjDATETIME
    SET@sj=DATEPART(hh,GETDATE())
    SELECT
    CASE
    WHEN@sj>=20and@sj<24THEN'晚上'
    WHEN@sj>=14and@sj<20THEN'下午'
    WHEN@sj>=12and@sj<14THEN'中午'
    WHEN@sj>=10and@sj<12THEN'早晨'
    WHEN@sj>=0and@sj<10THEN'临晨'
    END
    【例2-26】利用循环计算1+2+3+…+99+100的值。
    DECLARE@sumint,@iint
    SET@sum=0
    SET@i=1
    WHILE@i<=100
    BEGIN
    SET@sum=@sum+@i
    SET@i=@i+1
    END
    PRINT@sum
    【例2-27】利用WHILE循环计算当前时间距离2007年1月1日之间的天数。
    DECLARE@numint,@sjDATETIME
    SET@sj=GETDATE()
    PRINT'当前时间为:'+CAST(@sjASCHAR(20))
    SET@num=0WHILE1=1BEGIN
    SET@sj=DATEADD(day,1,@sj)
    SET@num=@num+1
    IFDATEPART(yy,@sj)=2007
    BREAK
    END
    PRINT'距离2007年1月1日还有'+CAST(@numASVARCHAR(10))+'天'
    【例3-2】创建一个XJGL数据库,该数据库的主文件逻辑名称为XJGL_data,物理文件名为XJGL.mdf,初始大小为1MB,最大尺寸为3MB,增长速度为10%;数据库的日志文件逻辑名称为XJGL_log,物理文件名为XJGL.ldf,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。文件存放在C:\下。
    CREATEDATABASEXJGL
    ON
    (NAME=XJGL_Data,
    FILENAME='C:\XJGL_Data.MDF',
    SIZE=1,
    MAXSIZE=3,
    FILEGROWTH=10%)
    LOGON
    (NAME='XJGL_Log',
    FILENAME='C:\XJGL_Log.LDF',
    SIZE=1,
    MAXSIZE=5,
    FILEGROWTH=10%)
    【例3-3】创建名为stu的数据库,它有3个数据文件组成,其中主文件为stu_data1.mdf,使用PRIMARY关键字指定。Stu_data2_.ndf、stu_data3.ndf是次文件,尺寸分别为5MB,3MB,2MB。事务日志文件有2个,分别为4MB、3MB。数据文件和事务日志文件的最大尺寸均为20MB,文件增量为2MB。
    CREATEDATABASEstu
    ON
    PRIMARY(NAME=stu_data1,
    FILENAME='C:\stu_data1.mdf',
    SIZE=5MB,
    MAXSIZE=20MB,
    FILEGROWTH=2MB),
    (NAME=stu_data2,
    FILENAME='C:\stu_data2.ndf',
    SIZE=3MB,
    MAXSIZE=20MB,
    FILEGROWTH=2MB),
    (NAME=stu_data3,
    FILENAME='C:\stu_data3.ndf',
    SIZE=2MB,
    MAXSIZE=20MB,
    FILEGROWTH=2MB)
    LOGON
    (NAME=stu_log1,
    FILENAME='C:\stu_log1.Ldf',
    SIZE=4MB,
    MAXSIZE=20MB,
    FILEGROWTH=2MB),
    (NAME=stu_log2,
    FILENAME='C:\stu_log2.Ldf',
    SIZE=3MB,
    MAXSIZE=20MB,
    FILEGROWTH=2MB)
    【例3-6】将数据库的数据文件XSCJ_data和XSCJ_log分别由原先的1MB扩充为2MB。
    USEXSCJ
    GO
    ALTERDATABASEXSCJ
    MODIFYFILE
    (NAME='XSCJ_DATA',
    SIZE=2MB)
    GO
    ALTERDA
    【例3-8】将stu数据库的数据文件stu_data1由5MB压缩为1MB。
    USEstu
    GO
    DBCCSHRINKFILE(STU_DATA1,1)
    TABASEXSCJ
    MODIFYFILE(NAME='XSCJ_LOG',
    SIZE=2MB)
    【例3-9】将数据库stu更名为student。
    sp_renamedb'stu','student'
    GO
    【例3-10】删除stu数据库
    DROPDATABASEstu
    【例4-3】使用SQL语句创建“班级表”、“课程信息表”、“成绩表”。
    USEXSCJ
    GO
    CREATETABLE班级表
    (
    班级编号char(8)NOTNULL,
    系部编号char(2)NOTNULL,
    班级名称char(16)NOTNULL
    )
    GO
    CREATETABLE课程信息表
    (
    课程编号char(4)NOTNULL,
    课程名称char(30)NOTNULL,
    学分decimal(5)NOTNULL,
    学时decimal(5)NOTNULL,
    考核类型char(6)NOTNULL,
    任课教师char(12)NOTNULL,
    系部编号char(2)NOTNULL,
    上课时间char(40)NOTNULL
    )
    GO
    CREATETABLE成绩表
    (
    char(8)NOTNULL,
    课程编号char(4)NOTNULL,
    成绩decimal(9)NOTNULL
    )
    GO
    【例4-5】使用SQL语句把“课程信息表”的“课程编号”列设置为主键“PX_课程信息表”,再将其删除
    USEXSCJ
    GO
    ALTERTABLE课程信息表
    ADDCONSTRAINTPX_课程信息表
    PRIMARYKEYCLUSTERED
    (课程编号)
    GO
    【例4-6】向“学生基本信息表”中添加“Email:”列。
    USEXSCJ
    GO
    ALTERTABLE学生基本信息表
    ADDEmail:varchar(20)NULL
    GO
    【例4-7】将“学生基本信息表”中添加的“Email:”列删除。
    USEXSCJ
    GO
    ALTERTABLE学生基本信息表
    DROPCOLUMNEmail:
    GO
    【例4-8】将“学生基本信息表”中的“”列改为最大长度为20的varchar型数据,且不允许空值。
    USEXSCJ
    GO
    ALTERTABLE学生基本信息表
    ALTERCOLUMNvarchar(20)NOTNULL
    GO
    【例4-10】使用SQL命令将XSCJ数据库中的“学生成绩表”重新更名为“成绩表”。
    USEXSCJ
    GO
    EXECsp_rename‘学生成绩表’,’成绩表’
    GO
    【例4-12】使用SQL语句删除XSCJ数据库中的“学生基本信息表”。
    
    USEXSCJ
    GO
    DROPTABLE学生基本信息表
    GO
    【例4-13】向“班级表”中输入一行数据。
    USEXSCJ
    GO
    INSERTINTO班级表
    VALUES(‘20051004’,’01’,’05高职网络’)
    GO
    【例4-14】向“学生基本信息表”中输入一行数据。
    USEXSCJ
    GO
    INSERTINTO学生基本信息表(,,家庭住址)
    VALUES(‘000107’,’巴尔夏提’,’新疆库尔勒市’)
    GO
    【例4-16】删除“学生基本信息表”中为杨文利的学生记录。
    USEXSCJ
    GO
    DELETEFROM学生基本信息表
    WHERE=’杨文利’
    GO
    【例4-16】将刘瑞恒的出生日期改为1985/10/31。
    USEXSCJ
    GO
    UPDATE学生基本信息表
    SET出生日期='1985/10/31'
    WHERE=’刘瑞恒’
    GO
    【例5-1】查询学生基本信息表中的所有信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    GO
    【例5-2】在学生基本信息表中查询学生的、、性别和族别信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,,性别,族别FROM学生基本信息表
    GO
    【例5-3】从学生基本信息表中查询学生由几个民族构成。
    从例2结果可知,学生的族别有多行重复,要快速查询学生的民族构成,实际上就是对相同值的族别只需要显示一行,可使用DISTINCT关键字实现。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTDISTINCT族别FROM学生基本信息表
    GO
    【例5-4】显示课程信息表中前5行的信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTTOP5*FROM学生基本信息表
    GO
    运行结果如图5-4所示,只显示查询结果的前5行数据。
    【例5-5】从学生基本信息表中只显示5%的信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTTOP5PERCENT*FROM学生基本信息表
    GO
    【例5-6】从学生基本信息表中查询所有团员的信息资料,并形成新表为团员基本信息表。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*INTO团员基本信息表FROM学生基本信息表
    WHERE政治面貌='团员'
    GO
    SELECT*FROM团员基本信息表
    GO
    【例5-7】从成绩表中查询学生成绩。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM成绩表
    GO
    【例5-8】从相关表中查询每一位学生的、、课程名称、成绩。
    从各表数据可知,“”存在于“学生基本信息表”和“成绩表”,“”存在于“学生基本信息表”,“课程名称”存在于“课程信息表”,“成绩”存在于“成绩表”,要实现本例查询,则需要对“学生基本信息表”、“课程信息表”、“成绩表”进行多表检索,也可以来自不同的数据库。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT学生基本信息表.,,课程名称,成绩FROM学生基本信息表,课程信息表,成绩表
    WHERE学生基本信息表.=成绩表.AND课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-9】在课程信息表中查找“Delphi程序设计”课程的任课老师。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT任课教师FROM课程信息表
    WHERE课程名称='Delphi程序设计'
    GO
    【例5-10】查询少数民族学生的基本情况。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE族别<>'汉族'
    GO
    【例5-11】检索1985年1月1日以后出生的女生基本信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE出生日期>'1985-01-01'AND性别='女'
    GO
    【例5-12】查询每位同学的课程门数、总成绩、平均成绩。
    查询每位学生的课程成绩情况,实际上就是按照“”列分类统计,可使用GROUPBY子句,统计课程门数、总成绩、平均成绩分别可以使用聚合函数COUNT(课程编号)、SUM(成绩)、AVG(成绩)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,COUNT(课程编号)AS'课程门数',SUM(成绩)AS'总成绩',AVG(成绩)AS'平均成绩'FROM成绩表
    GROUPBY
    GO
    【例5-13】从学生基本信息表中统计各民族学生人数。
    此例实际上是将要对学生按民族进行分类统计,可使用聚合函数COUNT(族别)实现功能。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT族别,COUNT(族别)AS'学生人数'FROM学生基本信息表
    GROUPBY族别
    GO
    【例5-14】从学生基本信息表中统计汉族学生的人数。
    此例就是在上例统计出各民族学生人数的基础上进一步限定查询汉族学生人数,可在GROUPBY子句之后跟HAVING族别='汉族'子句实现此功能。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT族别,COUNT(族别)AS'学生人数'FROM学生基本信息表
    GROUPBY族别
    HAVING族别='汉族'
    GO
    此例也可使用WHERE子句完成功能。
    USEXSCJ
    GO
    SELECT族别,COUNT(族别)AS'学生人数'FROM学生基本信息表
    WHERE族别='汉族'
    GROUPBY族别
    GO
    【例5-15】显示平均成绩大于等于80分以上的学生情况。
    此例的限定条件是AVG(成绩)>=80,只能使用HAVING子句,如果使用WHERE子句限定条件,则系统会显示如图5-16所示的错误信息。
    错误使用WHERE子句的SELECT语句如下:
    USEXSCJ
    GO
    SELECT,AVG(成绩)AS'平均成绩'FROM成绩表
    WHEREAVG(成绩)>=80
    GROUPBY
    GO
    使用HAVING子句的正确语句如下:
    USEXSCJ
    GO
    SELECT,AVG(成绩)AS'平均成绩'FROM成绩表
    GROUPBY
    HAVINGAVG(成绩)>=80
    GO
    【例5-16】将学生平均成绩按升序排序。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,AVG(成绩)AS'平均成绩'FROM成绩表
    GROUPBY
    ORDERBYAVG(成绩)
    GO
    【例5-17】查询成绩表中的全部信息,要求查询结果首先按升序排序,相同时,按成绩降序排序。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM成绩表
    ORDERBY,成绩DESC
    GO
    【例5-18】按显示学生成绩,并计算每人的平均成绩和总成绩。
    此例要求按人对课程及成绩进行分组显示,并计算每人的平均成绩、总成绩。则显示成绩应按分类,分组计算平均成绩、总成绩的语句为COMPUTEAVG(成绩),SUM(成绩)BY,使用COMPUTEBY子句首先要用ORDERBY子句对要分组的列排序,即ORDERBY。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*
    FROM成绩表
    ORDERBY
    COMPUTEAVG(成绩),SUM(成绩)BY
    GO
    【例5-19】从系部表中检索系部名称,从班级表中检索班级名称。
    从系部表中检索系部名称的SELECT语句为:SELECT系部名称FROM系部表,从班级表中检索班级名称的SELECT语句为:SELECT班级名称FROM班级表,合并这两个查询结果,需要使用UNION运算符。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT系部名称FROM系部表
    UNION
    SELECT班级名称FROM班级表
    GO
    【例5-20】查询1985年出生的学生基本信息。
    1985年出生的学生即出生日期在1985年1月1日至12月31日之间的学生。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE出生日期BETWEEN'1985-01-01'AND'1985-12-31'
    GO
    【例5-21】查询不及格学生成绩信息。
    查询不及格学生成绩信息,也就是查询0—59之间的学生成绩,可用BETWEEN关键字表示为:WHERE成绩BETWEEN0AND59。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM成绩表
    WHERE成绩BETWEEN0AND59
    GO
    【例5-22】查询课程编号为002、003、007、014的课程编号、课程名称、任课教师和上课时间。
    课程编号为002、003、007、014可以写成:WHERE课程编号IN('002','003','007','014'),也可写成WHERE课程编号=’002’OR课程编号=’003’OR课程编号=’007’OR课程编号=’014’。显然,使用IN关键字进行检索比使用3个OR运算符进行检索更为简单,而且易于理解和阅读。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT课程编号,课程名称,任课教师,上课时间FROM课程信息表
    WHERE课程编号IN('002','003','007','014')
    GO
    在查询分析器中运行以下命令,也可得到相同的查询结果,但这种写法显然比较繁琐。
    USEXSCJ
    GO
    SELECT课程编号,课程名称,任课教师,上课时间FROM课程信息表
    WHERE课程编号=’002’OR课程编号=’003’OR课程编号=’007’OR课程编号=’014’
    GO
    【例5-23】检索所有姓刘的学生基本信息。
    匹配所有姓刘的学生可以表示为:LIKE‘刘%’。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERELIKE'刘%'
    GO
    【例5-24】检索包含“技术”两字的课程信息。
    匹配“技术”两字的课程名称可以表示为:课程名称LIKE‘%技术%’。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM课程信息表
    WHERE课程名称LIKE'%技术%'
    GO
    【例5-25】检索少数民族学生的基本信息。
    少数民族学生或以表示为:WHERE族别NOTLIKE‘汉族’。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE族别NOTLIKE'汉族'
    GO
    【例5-26】查询第2个字为“丽”的学生信息。
    在学生基本信息表中,匹配第2个字为“丽”的学生应表示为:LIKE‘_丽%’。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERELIKE'_丽%'
    GO
    【例5-27】查询课程信息表中教师未定的课程信息。
    课程信息表中教师未定的表达式可以表示为:WHERE任课教师ISNULL。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM课程信息表
    WHERE任课教师ISNULL
    GO
    【例5-28】统计成绩表中各门课程的学生人数、总成绩、平均成绩。
    统计成绩表中各门课程信息,需要将学生成绩按课程编号分组GROUPBY课程编号,统计学生人数、总成绩、平均成绩分别需要使用聚合函数COUNT()、SUM(成绩)、AVG(成绩)。因为新生成的学生人数、总成绩、平均成绩三列没有列名,所以可使用AS子句实现。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT课程编号,COUNT()AS'学生人数',SUM(成绩)AS'总成绩',AVG(成绩)AS'平均成绩'
    FROM成绩表
    GROUPBY课程编号
    GO
    【例5-28-1】检索单科成绩高于全班平均分的学生成绩信息。
    此例中,全班平均成绩为SELECTAVG(成绩)AS'平均成绩'FROM成绩表,单科成绩高于全班平均分可以表述为WHERE成绩>(SELECTAVG(成绩)FROM成绩表)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTAVG(成绩)AS'平均成绩'FROM成绩表
    GO
    SELECT*FROM成绩表
    WHERE成绩>(SELECTAVG(成绩)FROM成绩表)
    GO
    【例5-29】检索系部信息和班级信息。
    此例要检索系部表和班级表的所有信息,即显示两个表的所有信息。可在SELECT子句中使用*、系部表.*或班级表.*,连接条件是两个表的系部编号的值要相等,即系部表.系部编号=班级表.系部编号。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM系部表,班级表
    WHERE系部表.系部编号=班级表.系部编号
    GO
    使用ANSI连接语法的SELECT语句如下:
    USEXSCJ
    GO
    SELECT*FROM系部表INNERJOIN班级表
    ON系部表.系部编号=班级表.系部编号
    GO
    【例5-30】检索系部信息和班级信息,要求连接的列只显示一次。
    本例与上例的区别是对连接的列只显示一列,用SELECT子句可以写成:SELECT系部表.*,班级编号,班级名称。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT系部表.*,班级编号,班级名称FROM系部表,班级表
    WHERE系部表.系部编号=班级表.系部编号
    GO
    使用ANSI连接语法的SELECT语句如下:
    USEXSCJ
    GO
    SELECT系部表.*,班级编号,班级名称FROM系部表INNERJOIN班级表
    ON系部表.系部编号=班级表.系部编号
    GO
    【例5-31】检索没有录入成绩的课课程情况。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTDISTINCT课程信息表.*FROM课程信息表,成绩表
    WHERE课程信息表.课程编号<>成绩表.课程编号
    GO
    【例5-32】使用左外连接检索学生成绩信息(,,课程名称)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,课程信息表.课程编号,课程信息表.课程名称,成绩
    FROM课程信息表LEFTJOIN成绩表ON课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-33】使用右外连接检索学生成绩信息(,,课程名称)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,课程信息表.课程编号,课程信息表.课程名称,成绩
    FROM课程信息表RIGHTJOIN成绩表ON课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-34】使用全外连接检索学生成绩信息(,,课程名称)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,课程信息表.课程编号,课程信息表.课程名称,成绩
    FROM课程信息表FULLJOIN成绩表ON课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-35】计算系部表和班级表的交叉连接。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM班级表CROSSJOIN系部表
    GO
    此例也可用FROM子句写成如下语句,运行结果相同。
    USEXSCJ
    GO
    SELECT*FROM班级表,系部表
    GO
    【例5-36】查找同名同姓的学生信息。
    该例是对学生基本信息表进行行自连接,这里将学生基本信息表分别定义别名为A1、A2,将FROM子句写成FROM学生基本信息表A1,学生基本信息表A2,连接条件为WHEREA1.=A2.ANDA1.<>A2.。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTA1.*FROM学生基本信息表A1,学生基本信息表A2
    WHEREA1.=A2.ANDA1.<>A2.
    GO
    【例5-1】查询学生基本信息表中的所有信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    GO
    【例5-2】在学生基本信息表中查询学生的、、性别和族别信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,,性别,族别FROM学生基本信息表
    GO
    【例5-3】从学生基本信息表中查询学生由几个民族构成。
    从例2结果可知,学生的族别有多行重复,要快速查询学生的民族构成,实际上就是对相同值的族别只需要显示一行,可使用DISTINCT关键字实现。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTDISTINCT族别FROM学生基本信息表
    GO
    【例5-4】显示课程信息表中前5行的信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTTOP5*FROM学生基本信息表
    GO
    运行结果如图5-4所示,只显示查询结果的前5行数据。
    【例5-5】从学生基本信息表中只显示5%的信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTTOP5PERCENT*FROM学生基本信息表
    GO
    【例5-6】从学生基本信息表中查询所有团员的信息资料,并形成新表为团员基本信息表。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*INTO团员基本信息表FROM学生基本信息表
    WHERE政治面貌='团员'
    GO
    SELECT*FROM团员基本信息表
    GO
    【例5-7】从成绩表中查询学生成绩。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM成绩表
    GO
    【例5-8】从相关表中查询每一位学生的、、课程名称、成绩。
    从各表数据可知,“”存在于“学生基本信息表”和“成绩表”,“”存在于“学生基本信息表”,“课程名称”存在于“课程信息表”,“成绩”存在于“成绩表”,要实现本例查询,则需要对“学生基本信息表”、“课程信息表”、“成绩表”进行多表检索,也可以来自不同的数据库。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT学生基本信息表.,,课程名称,成绩FROM学生基本信息表,课程信息表,成绩表
    WHERE学生基本信息表.=成绩表.AND课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-9】在课程信息表中查找“Delphi程序设计”课程的任课老师。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT任课教师FROM课程信息表
    WHERE课程名称='Delphi程序设计'
    GO
    【例5-10】查询少数民族学生的基本情况。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE族别<>'汉族'
    GO
    【例5-11】检索1985年1月1日以后出生的女生基本信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE出生日期>'1985-01-01'AND性别='女'
    GO
    【例5-12】查询每位同学的课程门数、总成绩、平均成绩。
    查询每位学生的课程成绩情况,实际上就是按照“”列分类统计,可使用GROUPBY子句,统计课程门数、总成绩、平均成绩分别可以使用聚合函数COUNT(课程编号)、SUM(成绩)、AVG(成绩)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,COUNT(课程编号)AS'课程门数',SUM(成绩)AS'总成绩',AVG(成绩)AS'平均成绩'FROM成绩表
    GROUPBY
    GO
    【例5-13】从学生基本信息表中统计各民族学生人数。
    此例实际上是将要对学生按民族进行分类统计,可使用聚合函数COUNT(族别)实现功能。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT族别,COUNT(族别)AS'学生人数'FROM学生基本信息表
    GROUPBY族别
    GO
    【例5-14】从学生基本信息表中统计汉族学生的人数。
    此例就是在上例统计出各民族学生人数的基础上进一步限定查询汉族学生人数,可在GROUPBY子句之后跟HAVING族别='汉族'子句实现此功能。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT族别,COUNT(族别)AS'学生人数'FROM学生基本信息表
    GROUPBY族别
    HAVING族别='汉族'
    GO
    此例也可使用WHERE子句完成功能。
    USEXSCJ
    GO
    SELECT族别,COUNT(族别)AS'学生人数'FROM学生基本信息表
    WHERE族别='汉族'
    GROUPBY族别
    GO
    【例5-15】显示平均成绩大于等于80分以上的学生情况。
    此例的限定条件是AVG(成绩)>=80,只能使用HAVING子句,如果使用WHERE子句限定条件,则系统会显示如图5-16所示的错误信息。
    错误使用WHERE子句的SELECT语句如下:
    USEXSCJ
    GO
    SELECT,AVG(成绩)AS'平均成绩'FROM成绩表
    WHEREAVG(成绩)>=80
    GROUPBY
    GO
    使用HAVING子句的正确语句如下:
    USEXSCJ
    GO
    SELECT,AVG(成绩)AS'平均成绩'FROM成绩表
    GROUPBY
    HAVINGAVG(成绩)>=80
    GO
    【例5-16】将学生平均成绩按升序排序。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,AVG(成绩)AS'平均成绩'FROM成绩表
    GROUPBY
    ORDERBYAVG(成绩)
    GO
    【例5-17】查询成绩表中的全部信息,要求查询结果首先按升序排序,相同时,按成绩降序排序。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM成绩表
    ORDERBY,成绩DESC
    GO
    【例5-18】按显示学生成绩,并计算每人的平均成绩和总成绩。
    此例要求按人对课程及成绩进行分组显示,并计算每人的平均成绩、总成绩。则显示成绩应按分类,分组计算平均成绩、总成绩的语句为COMPUTEAVG(成绩),SUM(成绩)BY,使用COMPUTEBY子句首先要用ORDERBY子句对要分组的列排序,即ORDERBY。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*
    FROM成绩表
    ORDERBY
    COMPUTEAVG(成绩),SUM(成绩)BY
    GO
    【例5-19】从系部表中检索系部名称,从班级表中检索班级名称。
    从系部表中检索系部名称的SELECT语句为:SELECT系部名称FROM系部表,从班级表中检索班级名称的SELECT语句为:SELECT班级名称FROM班级表,合并这两个查询结果,需要使用UNION运算符。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT系部名称FROM系部表
    UNION
    SELECT班级名称FROM班级表
    GO
    【例5-20】查询1985年出生的学生基本信息。
    1985年出生的学生即出生日期在1985年1月1日至12月31日之间的学生。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE出生日期BETWEEN'1985-01-01'AND'1985-12-31'
    GO
    【例5-21】查询不及格学生成绩信息。
    查询不及格学生成绩信息,也就是查询0—59之间的学生成绩,可用BETWEEN关键字表示为:WHERE成绩BETWEEN0AND59。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM成绩表
    WHERE成绩BETWEEN0AND59
    GO
    【例5-22】查询课程编号为002、003、007、014的课程编号、课程名称、任课教师和上课时间。
    课程编号为002、003、007、014可以写成:WHERE课程编号IN('002','003','007','014'),也可写成WHERE课程编号=’002’OR课程编号=’003’OR课程编号=’007’OR课程编号=’014’。显然,使用IN关键字进行检索比使用3个OR运算符进行检索更为简单,而且易于理解和阅读。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT课程编号,课程名称,任课教师,上课时间FROM课程信息表
    WHERE课程编号IN('002','003','007','014')
    GO
    在查询分析器中运行以下命令,也可得到相同的查询结果,但这种写法显然比较繁琐。
    USEXSCJ
    GO
    SELECT课程编号,课程名称,任课教师,上课时间FROM课程信息表
    WHERE课程编号=’002’OR课程编号=’003’OR课程编号=’007’OR课程编号=’014’
    GO
    【例5-23】检索所有姓刘的学生基本信息。
    匹配所有姓刘的学生可以表示为:LIKE‘刘%’。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERELIKE'刘%'
    GO
    【例5-24】检索包含“技术”两字的课程信息。
    匹配“技术”两字的课程名称可以表示为:课程名称LIKE‘%技术%’。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM课程信息表
    WHERE课程名称LIKE'%技术%'
    GO
    【例5-25】检索少数民族学生的基本信息。
    少数民族学生或以表示为:WHERE族别NOTLIKE‘汉族’。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE族别NOTLIKE'汉族'
    GO
    【例5-26】查询第2个字为“丽”的学生信息。
    在学生基本信息表中,匹配第2个字为“丽”的学生应表示为:LIKE‘_丽%’。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERELIKE'_丽%'
    GO
    【例5-27】查询课程信息表中教师未定的课程信息。
    课程信息表中教师未定的表达式可以表示为:WHERE任课教师ISNULL。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM课程信息表
    WHERE任课教师ISNULL
    GO
    【例5-28】统计成绩表中各门课程的学生人数、总成绩、平均成绩。
    统计成绩表中各门课程信息,需要将学生成绩按课程编号分组GROUPBY课程编号,统计学生人数、总成绩、平均成绩分别需要使用聚合函数COUNT()、SUM(成绩)、AVG(成绩)。因为新生成的学生人数、总成绩、平均成绩三列没有列名,所以可使用AS子句实现。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT课程编号,COUNT()AS'学生人数',SUM(成绩)AS'总成绩',AVG(成绩)AS'平均成绩'
    FROM成绩表
    GROUPBY课程编号
    GO
    【例5-28-1】检索单科成绩高于全班平均分的学生成绩信息。
    此例中,全班平均成绩为SELECTAVG(成绩)AS'平均成绩'FROM成绩表,单科成绩高于全班平均分可以表述为WHERE成绩>(SELECTAVG(成绩)FROM成绩表)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTAVG(成绩)AS'平均成绩'FROM成绩表
    GO
    SELECT*FROM成绩表
    WHERE成绩>(SELECTAVG(成绩)FROM成绩表)
    GO
    【例5-29】检索系部信息和班级信息。
    此例要检索系部表和班级表的所有信息,即显示两个表的所有信息。可在SELECT子句中使用*、系部表.*或班级表.*,连接条件是两个表的系部编号的值要相等,即系部表.系部编号=班级表.系部编号。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM系部表,班级表
    WHERE系部表.系部编号=班级表.系部编号
    GO
    使用ANSI连接语法的SELECT语句如下:
    USEXSCJ
    GO
    SELECT*FROM系部表INNERJOIN班级表
    ON系部表.系部编号=班级表.系部编号
    GO
    【例5-30】检索系部信息和班级信息,要求连接的列只显示一次。
    本例与上例的区别是对连接的列只显示一列,用SELECT子句可以写成:SELECT系部表.*,班级编号,班级名称。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT系部表.*,班级编号,班级名称FROM系部表,班级表
    WHERE系部表.系部编号=班级表.系部编号
    GO
    使用ANSI连接语法的SELECT语句如下:
    USEXSCJ
    GO
    SELECT系部表.*,班级编号,班级名称FROM系部表INNERJOIN班级表
    ON系部表.系部编号=班级表.系部编号
    GO
    【例5-31】检索没有录入成绩的课课程情况。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTDISTINCT课程信息表.*FROM课程信息表,成绩表
    WHERE课程信息表.课程编号<>成绩表.课程编号
    GO
    【例5-32】使用左外连接检索学生成绩信息(,,课程名称)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,课程信息表.课程编号,课程信息表.课程名称,成绩
    FROM课程信息表LEFTJOIN成绩表ON课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-33】使用右外连接检索学生成绩信息(,,课程名称)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,课程信息表.课程编号,课程信息表.课程名称,成绩
    FROM课程信息表RIGHTJOIN成绩表ON课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-34】使用全外连接检索学生成绩信息(,,课程名称)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,课程信息表.课程编号,课程信息表.课程名称,成绩
    FROM课程信息表FULLJOIN成绩表ON课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-35】计算系部表和班级表的交叉连接。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM班级表CROSSJOIN系部表
    GO
    此例也可用FROM子句写成如下语句,运行结果相同。
    USEXSCJ
    GO
    SELECT*FROM班级表,系部表
    GO
    【例5-36】查找同名同姓的学生信息。
    该例是对学生基本信息表进行行自连接,这里将学生基本信息表分别定义别名为A1、A2,将FROM子句写成FROM学生基本信息表A1,学生基本信息表A2,连接条件为WHEREA1.=A2.ANDA1.<>A2.。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTA1.*FROM学生基本信息表A1,学生基本信息表A2
    WHEREA1.=A2.ANDA1.<>A2.
    GO
    【例5-1】查询学生基本信息表中的所有信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    GO
    【例5-2】在学生基本信息表中查询学生的、、性别和族别信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,,性别,族别FROM学生基本信息表
    GO
    【例5-3】从学生基本信息表中查询学生由几个民族构成。
    从例2结果可知,学生的族别有多行重复,要快速查询学生的民族构成,实际上就是对相同值的族别只需要显示一行,可使用DISTINCT关键字实现。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTDISTINCT族别FROM学生基本信息表
    GO
    【例5-4】显示课程信息表中前5行的信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTTOP5*FROM学生基本信息表
    GO
    运行结果如图5-4所示,只显示查询结果的前5行数据。
    【例5-5】从学生基本信息表中只显示5%的信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTTOP5PERCENT*FROM学生基本信息表
    GO
    【例5-6】从学生基本信息表中查询所有团员的信息资料,并形成新表为团员基本信息表。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*INTO团员基本信息表FROM学生基本信息表
    WHERE政治面貌='团员'
    GO
    SELECT*FROM团员基本信息表
    GO
    【例5-7】从成绩表中查询学生成绩。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM成绩表
    GO
    【例5-8】从相关表中查询每一位学生的、、课程名称、成绩。
    从各表数据可知,“”存在于“学生基本信息表”和“成绩表”,“”存在于“学生基本信息表”,“课程名称”存在于“课程信息表”,“成绩”存在于“成绩表”,要实现本例查询,则需要对“学生基本信息表”、“课程信息表”、“成绩表”进行多表检索,也可以来自不同的数据库。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT学生基本信息表.,,课程名称,成绩FROM学生基本信息表,课程信息表,成绩表
    WHERE学生基本信息表.=成绩表.AND课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-9】在课程信息表中查找“Delphi程序设计”课程的任课老师。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT任课教师FROM课程信息表
    WHERE课程名称='Delphi程序设计'
    GO
    【例5-10】查询少数民族学生的基本情况。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE族别<>'汉族'
    GO
    【例5-11】检索1985年1月1日以后出生的女生基本信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE出生日期>'1985-01-01'AND性别='女'
    GO
    【例5-12】查询每位同学的课程门数、总成绩、平均成绩。
    查询每位学生的课程成绩情况,实际上就是按照“”列分类统计,可使用GROUPBY子句,统计课程门数、总成绩、平均成绩分别可以使用聚合函数COUNT(课程编号)、SUM(成绩)、AVG(成绩)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,COUNT(课程编号)AS'课程门数',SUM(成绩)AS'总成绩',AVG(成绩)AS'平均成绩'FROM成绩表
    GROUPBY
    GO
    【例5-13】从学生基本信息表中统计各民族学生人数。
    此例实际上是将要对学生按民族进行分类统计,可使用聚合函数COUNT(族别)实现功能。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT族别,COUNT(族别)AS'学生人数'FROM学生基本信息表
    GROUPBY族别
    GO
    【例5-14】从学生基本信息表中统计汉族学生的人数。
    此例就是在上例统计出各民族学生人数的基础上进一步限定查询汉族学生人数,可在GROUPBY子句之后跟HAVING族别='汉族'子句实现此功能。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT族别,COUNT(族别)AS'学生人数'FROM学生基本信息表
    GROUPBY族别
    HAVING族别='汉族'
    , ;GO
    此例也可使用WHERE子句完成功能。
    USEXSCJ
    GO
    SELECT族别,COUNT(族别)AS'学生人数'FROM学生基本信息表
    WHERE族别='汉族'
    GROUPBY族别
    GO
    【例5-15】显示平均成绩大于等于80分以上的学生情况。
    此例的限定条件是AVG(成绩)>=80,只能使用HAVING子句,如果使用WHERE子句限定条件,则系统会显示如图5-16所示的错误信息。
    错误使用WHERE子句的SELECT语句如下:
    USEXSCJ
    GO
    SELECT,AVG(成绩)AS'平均成绩'FROM成绩表
    WHEREAVG(成绩)>=80
    GROUPBY
    GO
    使用HAVING子句的正确语句如下:
    USEXSCJ
    GO
    SELECT,AVG(成绩)AS'平均成绩'FROM成绩表
    GROUPBY
    HAVINGAVG(成绩)>=80
    GO
    【例5-16】将学生平均成绩按升序排序。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,AVG(成绩)AS'平均成绩'FROM成绩表
    GROUPBY
    ORDERBYAVG(成绩)
    GO
    【例5-17】查询成绩表中的全部信息,要求查询结果首先按升序排序,相同时,按成绩降序排序。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM成绩表
    ORDERBY,成绩DESC
    GO
    【例5-18】按显示学生成绩,并计算每人的平均成绩和总成绩。
    此例要求按人对课程及成绩进行分组显示,并计算每人的平均成绩、总成绩。则显示成绩应按分类,分组计算平均成绩、总成绩的语句为COMPUTEAVG(成绩),SUM(成绩)BY,使用COMPUTEBY子句首先要用ORDERBY子句对要分组的列排序,即ORDERBY。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*
    FROM成绩表
    ORDERBY
    COMPUTEAVG(成绩),SUM(成绩)BY
    GO
    【例5-19】从系部表中检索系部名称,从班级表中检索班级名称。
    从系部表中检索系部名称的SELECT语句为:SELECT系部名称FROM系部表,从班级表中检索班级名称的SELECT语句为:SELECT班级名称FROM班级表,合并这两个查询结果,需要使用UNION运算符。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT系部名称FROM系部表
    UNION
    SELECT班级名称FROM班级表
    GO
    【例5-20】查询1985年出生的学生基本信息。
    1985年出生的学生即出生日期在1985年1月1日至12月31日之间的学生。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE出生日期BETWEEN'1985-01-01'AND'1985-12-31'
    GO
    【例5-21】查询不及格学生成绩信息。
    查询不及格学生成绩信息,也就是查询0—59之间的学生成绩,可用BETWEEN关键字表示为:WHERE成绩BETWEEN0AND59。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM成绩表
    WHERE成绩BETWEEN0AND59
    GO
    【例5-22】查询课程编号为002、003、007、014的课程编号、课程名称、任课教师和上课时间。
    课程编号为002、003、007、014可以写成:WHERE课程编号IN('002','003','007','014'),也可写成WHERE课程编号=’002’OR课程编号=’003’OR课程编号=’007’OR课程编号=’014’。显然,使用IN关键字进行检索比使用3个OR运算符进行检索更为简单,而且易于理解和阅读。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT课程编号,课程名称,任课教师,上课时间FROM课程信息表
    WHERE课程编号IN('002','003','007','014')
    GO
    在查询分析器中运行以下命令,也可得到相同的查询结果,但这种写法显然比较繁琐。
    USEXSCJ
    GO
    SELECT课程编号,课程名称,任课教师,上课时间FROM课程信息表
    WHERE课程编号=’002’OR课程编号=’003’OR课程编号=’007’OR课程编号=’014’
    GO
    【例5-23】检索所有姓刘的学生基本信息。
    匹配所有姓刘的学生可以表示为:LIKE‘刘%’。在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERELIKE'刘%'
    GO
    【例5-24】检索包含“技术”两字的课程信息。
    匹配“技术”两字的课程名称可以表示为:课程名称LIKE‘%技术%’。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM课程信息表
    WHERE课程名称LIKE'%技术%'
    GO
    【例5-25】检索少数民族学生的基本信息。
    少数民族学生或以表示为:WHERE族别NOTLIKE‘汉族’。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERE族别NOTLIKE'汉族'
    GO
    【例5-26】查询第2个字为“丽”的学生信息。
    在学生基本信息表中,匹配第2个字为“丽”的学生应表示为:LIKE‘_丽%’。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM学生基本信息表
    WHERELIKE'_丽%'
    GO
    【例5-27】查询课程信息表中教师未定的课程信息。
    课程信息表中教师未定的表达式可以表示为:WHERE任课教师ISNULL。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM课程信息表
    WHERE任课教师ISNULL
    GO
    【例5-28】统计成绩表中各门课程的学生人数、总成绩、平均成绩。
    统计成绩表中各门课程信息,需要将学生成绩按课程编号分组GROUPBY课程编号,统计学生人数、总成绩、平均成绩分别需要使用聚合函数COUNT()、SUM(成绩)、AVG(成绩)。因为新生成的学生人数、总成绩、平均成绩三列没有列名,所以可使用AS子句实现。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT课程编号,COUNT()AS'学生人数',SUM(成绩)AS'总成绩',AVG(成绩)AS'平均成绩'
    FROM成绩表
    GROUPBY课程编号
    GO
    【例5-28-1】检索单科成绩高于全班平均分的学生成绩信息。
    此例中,全班平均成绩为SELECTAVG(成绩)AS'平均成绩'FROM成绩表,单科成绩高于全班平均分可以表述为WHERE成绩>(SELECTAVG(成绩)FROM成绩表)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTAVG(成绩)AS'平均成绩'FROM成绩表
    GO
    SELECT*FROM成绩表
    WHERE成绩>(SELECTAVG(成绩)FROM成绩表)
    GO
    【例5-29】检索系部信息和班级信息。
    此例要检索系部表和班级表的所有信息,即显示两个表的所有信息。可在SELECT子句中使用*、系部表.*或班级表.*,连接条件是两个表的系部编号的值要相等,即系部表.系部编号=班级表.系部编号。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM系部表,班级表
    WHERE系部表.系部编号=班级表.系部编号
    GO
    使用ANSI连接语法的SELECT语句如下:
    USEXSCJ
    GO
    SELECT*FROM系部表INNERJOIN班级表
    ON系部表.系部编号=班级表.系部编号
    GO
    【例5-30】检索系部信息和班级信息,要求连接的列只显示一次。
    本例与上例的区别是对连接的列只显示一列,用SELECT子句可以写成:SELECT系部表.*,班级编号,班级名称。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT系部表.*,班级编号,班级名称FROM系部表,班级表
    WHERE系部表.系部编号=班级表.系部编号
    GO
    使用ANSI连接语法的SELECT语句如下:
    USEXSCJ
    GO
    SELECT系部表.*,班级编号,班级名称FROM系部表INNERJOIN班级表
    ON系部表.系部编号=班级表.系部编号
    GO
    【例5-31】检索没有录入成绩的课课程情况。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTDISTINCT课程信息表.*FROM课程信息表,成绩表
    WHERE课程信息表.课程编号<>成绩表.课程编号
    GO
    【例5-32】使用左外连接检索学生成绩信息(,,课程名称)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,课程信息表.课程编号,课程信息表.课程名称,成绩
    FROM课程信息表LEFTJOIN成绩表ON课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-33】使用右外连接检索学生成绩信息(,,课程名称)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,课程信息表.课程编号,课程信息表.课程名称,成绩
    FROM课程信息表RIGHTJOIN成绩表ON课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-34】使用全外连接检索学生成绩信息(,,课程名称)。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT,课程信息表.课程编号,课程信息表.课程名称,成绩
    FROM课程信息表FULLJOIN成绩表ON课程信息表.课程编号=成绩表.课程编号
    GO
    【例5-35】计算系部表和班级表的交叉连接。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM班级表CROSSJOIN系部表
    GO
    此例也可用FROM子句写成如下语句,运行结果相同。
    USEXSCJ
    GO
    SELECT*FROM班级表,系部表
    GO
    【例5-36】查找同名同姓的学生信息。
    该例是对学生基本信息表进行行自连接,这里将学生基本信息表分别定义别名为A1、A2,将FROM子句写成FROM学生基本信息表A1,学生基本信息表A2,连接条件为WHEREA1.=A2.ANDA1.<>A2.。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECTA1.*FROM学生基本信息表A1,学生基本信息表A2
    WHEREA1.=A2.ANDA1.<>A2.
    GO
    【例6-3】创建一个名为“V_计算机系课程信息”的视图,要求显示系部编号为01的课程信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    CREATEVIEWV_计算机系课程信息
    AS
    SELECT*FROM课程信息表WHERE系部编号='01'
    GO
    【例6-4】使用SELECT语句查看“V_计算机系课程信息”视图的返回结果。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    SELECT*FROM
    GO
    【例6-6】使用系统存储过程sp_helptext查看“V_计算机系课程信息”视图的定义信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    EXECsp_helptextV_计算机系课程信息
    GO
    【例6-7】使用系统存储过程sp_help显示视图“V_05GZYY”特征。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    sp_helpV_05GZYY
    GO
    【例6-8】使用系统存储过程sp_depends显示视图“V_05GZYY”所依赖的对象。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    sp_dependsV_05GZYY
    GO
    【例6-10】使用ALTERVIEW语句修改视图“V_计算机系课程信息”,使其只显示“课程编号”、“课程名称”、“考核类型”、“任课教师”信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    ALTERVIEWV_计算机系课程信息
    AS
    SELECT课程编号,课程名称,考核类型,任课教师FROM课程信息表WHERE系部编号='01'
    GO
    【例6-12】使用系统存储过程sp_rename将视图“V_05高职应用”改回为“V_05GZYY”。
    在企业管理器中运行如下命令:
    USEXSCJ
    GO
    sp_renameV_05高职应用,V_05GZYY
    GO
    【例6-14】使用DROPVIEW语句删除视图“V_计算机系课程信息”、“V_少数民族信息”。
    在企业管理器中运行如下命令:
    USEXSCJ
    GO
    DROPVIEWV_计算机系课程信息,V_少数民族信息
    GO
    【例6-16】使用CREATEINDEX语句在XSCJ数据库的“成绩表”上创建名为“IX_课号”的聚集、惟一、复合索引,该索引基于“”和“课程编号”列创建。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    CREATEUNIQUECLUSTERED
    INDEXIX_课号ON成绩表(,课程编号)
    GO
    【例6-17】使用系统存储过程sp_helpindex查看XSCJ数据库中“成绩表”的索引信息。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    sp_helpindex'成绩表'
    GO
    
    【例6-18】使用系统存储过程将索引“PK_成绩表”更名为“IX_成绩表”。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    EXECsp_rename'成绩表.PK_成绩表','IX_成绩表'
    GO
    【例6-19】删除“学生基本信息表”中名为“IX_学生”的索引。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    DROPINDEX学生基本信息表.IX_学生
    GO
    【例7-13】在示例数据库Northwind中创建一个名为new_employees的新表,分别定义id_num列,数据类型为int,设置IDENTITY列,初始值和步长值分别取默认值,定义fname列,数据类型为varchar,长度20,定义minit列,数据类型为char,长度30。
    USENorthwind
    GO
    CREATETABLEnew_employees
    (
    id_numintIDENTITY(1,1),
    fnamevarchar(20),
    minitchar(1),
    lnamevarchar(30)
    )
    GO
    【例7-14】在示例数据库Northwind中利用修改表doc_exe时增加一个IDENTITY列,初始值为3,步长为2
    USENorthwind
    GO
    ALTERTABLEdoc_exeADD
    column_aINTIDENTITY(3,2)
    CONSTRAINTcolumn_a_pkPRIMARYKEY
    GO
    【例7-15】在数据库XSCJ中新建表iden,并向表中插入10条记录。
    在查询分析器中执行如下命令:
    ①建立表iden
    USEXSCJ
    GO
    CREATETABLEiden
    (
    IdintIDENTITY(1,2),
    fnamevarchar(20),
    sexchar(1),
    lnamevarchar(30)
    )
    GO
    ②向表iden插入十条记录
    INSERTINTOiden(fname,sex,lname)VALUES('zhang1','F','san')
    INSERTINTOiden(fname,sex,lname)VALUES('zhang2','M','san')
    INSERTINTOiden(fname,sex,lname)VALUES('zhang3','M','san')
    INSERTINTOiden(fname,sex,lname)VALUES('zhang4','F','san')
    INSERTINTOiden(fname,sex,lname)VALUES('zhang5','F','san')
    INSERTINTOiden(fname,sex,lname)VALUES('zhang6','M','san')
    INSERTINTOiden(fname,sex,lname)VALUES('zhang7','M','san')
    INSERTINTOiden(fname,sex,lname)VALUES('zhang8','F','san')
    INSERTINTOiden(fname,sex,lname)VALUES('zhang9','F','san')
    INSERTINTOiden(fname,sex,lname)VALUES('zhang10','M','san')
    ③查询表iden
    SELECT*FROMiden
    GO
    【例7-16】在数据库XSCJ中创建一个新数据类型ziptype(邮政编码类型),并将其定义为char数据类型,长度为6,可以为空,并将其应用到建立新表“职工表”中。
    在查询分析器中执行如下命令:
    USEXSCJ
    GO
    sp_addtypeziptype,’char(6)’,’null’
    GO
    CREATETABLE职工表
    (
    Varchar(10),
    性别Char(1),
    家庭住址Varchar(20),
    邮政编码ziptype,
    电话Char(15)
    )
    GO
    【例7-17】删除【例7-16】所创建的数据类型ziptype。
    在查询分析器中运行如下命令:
    USEXSCJ
    GO
    DROPTABLE职工表
    GO
    sp_droptypeziptype
    GO
    【例7-18】在Northwind数据库中创建一个标量函数fn_NewRegion,用于检查如果是NULL值时,返回【不知道】。
    在查询分析器中执行如下语句:
    USENorthwind
    GO
    CREATEFUNCTIONfn_NewRegion(@inputnvarchar(30))
    RETURNSnvarchar(30)
    BEGIN
    if@inputisNULL
    set@input='不知道'
    RETURN@input
    END
    GO
    SELECTlastname,city,region,countryFROMemployees
    SELECTlastname,city,dbo.fn_newregion(region)asregion,country
    FROMemployees
    GO
    【例7-19】在Northwind数据库中创建内嵌表值函数量函数fn_customerNamesInRegion,使用其返回某区域的客户
    在查询分析器中执行如下语句:
    USENorthwind
    GO--定义内嵌表值函数
    CREATEFUNCTIONfn_customerNamesInRegion(@Regionnvarchar(30))
    RETURNSTABLE
    AS
    RETURN
    (SELECTcustomerID,companyName
    FROMnorthwind.dbo.customers
    WHEREregion=@Region
    )
    --使用内嵌表值函数
    SELECT*FROMfn_customerNamesInRegion('WA')
    SELECTcustomerID,companyname,regionFROMnorthwind.dbo.customers
    WHEREregion='wa'
    GO
    【例7-21】在Northwind示例数据库中删除用户自定义函数fn_employees。
    在查询分析器中执行如下语句:
    USENorthwind
    GO
    DROPFUNCTIONfn_employees
    GO
    【例8-1】使用CREATEPROCEDURE语句创建一个名称为proc_bjrs的存储过程,用于检索现有班级及人数。
    CREATEPROCEDUREproc_bjrsAS
    SELECTDISTINCT(班级表.班级编号),班级表.班级名称,人数=COUNT(学生基本信息表.)
    FROM学生基本信息表,班级表
    WHERE班级表.班级编号=学生基本信息表.班级编号
    GROUPBY班级表.班级编号,班级表.班级名称
    GO
    【例8-2】设计一个带有参数的存储过程,该参数用于传递班级编号,根据该参数在学生基本信息表中检索出某一个班级中所有学生的信息。
    CREATEPROCEDUREproc_bjcx@bjbhVARCHAR(8)
    AS
    SELECT*FROM学生基本信息表WHERE班级编号=@bjbh
    GO
    【例8-3】修改已经创建的存储过程proc_bjcx及其功能,将其修改为可以根据系部编号来查询某一个系部中所有学生的信息。修改后将存储过程名称重命名为proc_xbcx。
    在查询分析器中运行如下命令,即可完成重命名:
    ALTERPROCEDUREproc_bjcx@xbbhVARCHAR(2)
    AS
    SELECT*FROM学生基本信息表
    WHERE班级编号
    IN(SELECT班级编号FROM班级表WHERE系部编号=@xbbh)
    GO
    SP_RENAME'proc_bjcx','proc_xbcx'
    GO
    【例8-4】同时删除当前数据库中的两个存储过程,proc_a和proc_b。
    在查询分析器中运行如下命令,即可完成删除操作:
    DROPPROCEDUREproc_a,proc_b
    GO
    【例8-5】在数据库XSCJ中设计一个触发器,该触发器的作用为:当在班级表中删除某一个班级时,在学生基本信息表中该班级所包含的学生信息也全部被删除。
    提示:在此例中,由于涉及到了班级表的删除操作,因而需要设计一个DELETE类型的触发器。
    USEXSCJ
    GO
    CREATETRIGGERdel_bjON班级表
    AFTERDELETE
    AS
    DELETEFROM学生基本信息表WHERE班级编号
    IN(SELECT班级编号FROMDELETED)
    GO
    【例8-6】在数据库XSCJ中设计一个触发器,该触发器能够保证在学生基本信息表中添加新的纪录时,新学生的班级编号必须已经存在于班级表中。
    提示:设计该触发器有助于实现学生信息的完整性。在此例中由于涉及到了学生基本信息表中的添加操作,因而需要设计一个INSERT类型的触发器。
    USEXSCJ
    GO
    CREATETRIGGERinsert_xsON学生基本信息表
    AFTERINSERT
    AS
    IFEXISTS
    (
    SELECT*FROMINSERTED
    WHERE班级编号IN(SELECT班级编号FROM班级表)
    )
    PRINT'添加成功!'
    ELSE
    BEGIN
    PRINT'班级编号与现有的班级不符!'
    ROLLBACKTRANSACTION
    END
    【例8-7】修改del_bj触发器,使得在班级表中删除某一个班级时,不仅在学生基本信息表中该班级所包含的学生信息将被删除,而且在成绩表中与学生相关的数据也将被删除。
    在查询分析器中运行如下命令:
    ALTERTRIGGERdel_bjON班级表
    AFTERDELETE
    AS
    DELETEFROM成绩表WHERE
    IN(SELECTFROM学生基本信息表WHERE班级编号
    IN(SELECT班级编号FROMDELETED))
    DELETEFROM学生基本信息表WHERE班级编号
    IN(SELECT班级编号FROMDELETED)
    【例8-8】删除触发器del_bj以及insert_xs。
    USEXSCJ
    GO
    DROPTRIGGERdel_bj,insert_xs
    【例9-1】声明一个游标jbxxb_cursor,用于访问数据库XSCJ中的“学生基本信息表”。
    USEXSCJ
    GO
    DECLAREjbxxb_cursorCURSOR
    FORSELECT*FROM学生基本信息表
    【例9-2】使用游标查看数据库XSCJ中“学生基本信息表”中满足条件的记录个数。代码如下:
    USEXSCJ
    GO
    DECLAREjbxxb_CursorCURSORFOR
    SELECT,
    FROMxscj.dbo.学生基本信息表
    WHERE族别LIKE'哈萨克'
    OPENjbxxb_Cursor
    FETCHNEXTFROMjbxxb_Cursor
    WHILE@@FETCH_STATUS=0
    BEGIN
    FETCHNEXTFROMjbxxb_Cursor
    END
    CLOSEjbxxb_Cursor
    DEALLOCATEjbxxb_Cursor
    【例9-3】为“学生基本信息表”中以“张”开头的行声明一个简单的游标jbxxb1_cursor,并使用FETCHNEXT逐个提取这些行。FETCH语句以单行结果集形式返回由DECLARECURSOR指定列的值。
    USEXSCJ
    GO
    DECLAREjbxxb1_cursorCURSORFOR
    SELECTFROM学生基本信息表
    WHERELIKE'张%'
    ORDERBY
    OPENjbxxb1_cursor
    FETCHNEXTFROMjbxxb1_cursor
    WHILE@@FETCH_STATUS=0
    BEGIN
    FETCHNEXTFROMjbxxb1_cursor
    END
    CLOSEjbxxb1_cursor
    DEALLOCATEjbxxb1_cursor
    【例9-4】本例与上例相似,使用FETCH语句将值存入变量,但FETCH语句的值存储于局部变量而不是直接返回给基表。PRINT语句将变量组合成单一字符串并将其返回到基表。代码如下:
    USEXSCJ
    GO
    DECLARE@varchar(40),@varchar(20)
    DECLARExb_cursorCURSORFOR
    SELECT,FROM学生基本信息表
    WHERELIKE'张%'
    ORDERBY
    OPENxb_cursor
    FETCHNEXTFROMxb_cursor
    INTO@,@
    WHILE@@FETCH_STATUS=0
    BEGIN
    PRINT'学生为:'+@+';为'+@
    FETCHNEXTFROMxb_cursor
    INTO@,@
    END
    CLOSExb_cursor
    DEALLOCATExb_cursor
    【例9-5】定义一事务charu(未提交)并将“学生基本信息表”中族别不是“汉族”的学生“族别”改成“少数民族”。代码如下:
    USEXSCJ
    GO
    BEGINTRANSACTIONcharu
    GO
    UPDATE学生基本信息表
    SET族别='少数民族'
    WHERE族别!='汉族'
    GO
    【例9-6】事务的嵌套,通过本例可以知道嵌套事务中,内部事务所做的修改等提交完最外层事务之后才能生效。
    USEXSCJ
    GO
    CREATETABLE综合表(INTPRIMARYKEY,CHAR(8),年龄int)
    BEGINTRANSACTIONcharu
    INSERTINTO综合表VALUES(1,'卡吾萨尔',18)
    BEGINTRANSACTIONcharu1
    INSERTINTO综合表VALUES(2,'夏尔巴提',20)
    BEGINTRANSACTIONcharu2
    INSERTINTO综合表VALUES(3,'张莉',19)
    COMMITTRANSACTIONcharu2
    COMMITTRANSACTIONcharu1
    COMMITTRANSACTIONcharu
    【例10-4】给public角色授予SELECT权限。然后,将特定的权限授予用户wang、zhangsan、tom。于是这些用户有了对“班级表”的所有权限。
    在查询分析器中执行以下命令即可:
    GRANTSELECTON班级表TOpublic
    GRANTINSERT,UPDATE,DELETEON班级表TOwang,zhangsan,tom
    上述过程既是分配对象权限的过程。
    撤消权限只要将GRANT换为REVOKE,拒绝权限只要将GRANT换为DENY即可。
    【例10-5】使用户wang和dss_ibm390x\zhangsan做建立数据库和建立表的工作。
    在查询分析器中执行以下命令即可:
    GRANTCREATEDATABASE,CREATETABLETOwang,[dss_ibm390x\zhangsan]
    上述过程既是分配语句权限的过程。
    撤消权限只要将GRANT换为REVOKE,拒绝权限只要将GRANT换为DENY即可。
    【例11-3】在本地硬盘上创建一个备份设备,其逻辑名称为“data_backup”,物理名称为E:\back\data.bak】。相应的语句为:
    USEMASTER
    GO
    EXECUTEsp_addumpdevice'disk','data_backup','e:\back\data.bak'
    【例11-9】还原完整数据库备份和差异备份。下例还原完整数据库备份后还原差异备份。
    RESTOREDATABASEXSCJ
    FROMdata_backup
    WITHNORECOVERY
    RESTOREDATABASEXSCJ
    FROMdata_backup
    WITHFILE=1
    【例11-10】还原数据库并将文件移动至C:\下的指定位置
    USEMASTER
    GO
    RESTOREDATABASEXSCJ
    FROMdatbackup
    WITHNORECOVERY,
    MOVE'XSCJ_data'TO'c:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\XSCJ_data.mdf',
    MOVE'XSCJ_log'TO'c:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\XSCJ_log.ldf'
    RESTORELOGXSCJ
    FROMdata_backup
    WITHRECOVERY
    
  • 上一篇资讯: sql基础
  • 下一篇资讯: SQLServer(2)
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师