实验五 SQL函数与T-SQL编程

    xiaoxiao2021-08-14  138

    实验五 SQL函数与T-SQL编程

    1、集合函数

    --统计选修了课程的学生人数 SELECT COUNT(DISTINCT SNo) 选修了课程的学生人数 FROM dbo.SC; --用GROUP BY统计不同职称的教师人数 SELECT Prof 职称,COUNT(*) 教师人数 FROM dbo.Teacher GROUP BY Prof; --COMPUTE BY统计不同职称的教师人数 SELECT TNo,Prof FROM dbo.Teacher ORDER BY Prof COMPUTE COUNT(TNo) BY Prof;

    2、数据类型转换函数

    --从tblTeacher表中查询教师的电话号码中的最后8位数字能被9整除的教师信息 SELECT * FROM dbo.Teacher WHERE CONVERT(INT,RIGHT(Mobile,8)) %9=0 --查询学生的学号、姓名、出生日期。要求将出生日期转化为整数后显示 SELECT SNo,SName,CONVERT(INT,BirthDate)出生日期的内部存储形式 FROM dbo.Student SELECT SNo,SName,BirthDate FROM dbo.Student

    3、日期函数

    --把当前日期转换为样式 101 SELECT CONVERT(CHAR(10),GETDATE(),101) AS 当前日期 --计算所有学生的平均年龄 SELECT AVG(DATEDIFF(yy,BirthDate,GETDATE())) FROM dbo.Student; --查询最近两年选修课程的课程号 SELECT DISTINCT SNo FROM dbo.SC WHERE DATEDIFF(yy,SDate,GETDATE())>=12; --分别获取数据库当前时间的年、月、日、小时 SELECT YEAR(GETDATE()) 年,MONTH(GETDATE())月,DAY(GETDATE())日,DATEPART(hh,GETDATE())时 SELECT GETDATE()

    4、数学函数

    --以2为随机数种子产生一随机数 SELECT RAND (2) 随机数 --对数字1223.75进行整数的四舍五入和取整 SELECT ROUND(1223.75,0) 四舍五入,FLOOR(1223.75) 取整

    5、字符串函数

    --求在字符串‘They call me the hunter'中从5个字符开始,"the"出现的位置 SELECT CHARINDEX('the','They call me the hunter',5) '"the"出现的位置' --返回Teacher表中的所有老师的姓氏(不重复) SELECT DISTINCT SUBSTRING(TName,1,1) 教师姓氏 FROM dbo.Teacher ; --用 ZZZ 替换 abcdefghi 中的字符串 cde SELECT REPLACE('abcdefghi','cde','zzz') --组合字符串‘hello‘和‘join‘,中间加入一空格 SELECT 'hello'+' '+'join' go

    6、系统函数

    --系统函数可以在不直接访问系统表的情况下,获取SQL SERVER系统表中的信息。 --请输出系统信息,并用字符串函数将其连接起来:当前数据库ID是: 当前数据库名: 当前主机ID: 当前主机名: PRINT '当前数据库ID:'+RTRIM(CONVERT(CHAR(10) ,DB_ID()))+ CHAR(10) +'当前数据库名:'+RTRIM(CONVERT(CHAR(10), DB_NAME())) + CHAR(10)+'当前主机ID: '+RTRIM(CONVERT(CHAR(10) ,HOST_ID())) + CHAR(10)+'当前主机名:'+RTRIM(CONVERT(CHAR(10),HOST_NAME())) /* SQL的换行 制表符 CHAR(9) 换行符 CHAR(10) 回车 CHAR(13) */ PRINT 'Test'+CHAR(13)+'Name' PRINT 'Test'+CHAR(10)+'Age' PRINT 'Test'+CHAR(9)+'Tel' --以文本格式显示结果 SELECT 'AAA'+ CHAR(10)+'BBB'--AAA BBB SELECT 'AAA'+ CHAR(13)+'BBB'--AAA BBB SELECT 'AAA' + CHAR(10) + CHAR(13) + 'BBB'--AAA BBB go

    7、用户自定义函数

    --创建标量函数myfunction1,从SC表中查询指定学生(由输入的学号确定)的平均成绩。 --自定义函数名,参数 CREATE FUNCTION dbo.myfunction1(@SNo varchar(20)) --返回值类型 RETURNS NUMERIC(4,1) BEGIN --声明返回值 DECLARE @aveScore NUMERIC(4,1) -- 通过查询给返回值赋值 SELECT @aveScore=AVG(score) FROM dbo.SC GROUP BY SNo HAVING SNo=@SNo -- return返回值 RETURN @aveScore END go --标量值函数的调用 select dbo.myfunction1('108') as 平均分 go --创建内嵌表值函数myfunction2,从student和sc表中查询指定年份出生的学生的学号、姓名、年龄平均成绩。 CREATE FUNCTION myfunction2(@byear INT) RETURNS TABLE AS --查询返回结果集的SQL语句 RETURN( SELECT dbo.SC.SNo,SName, datediff(yy,birthdate,getdate()) age,Score FROM dbo.SC,dbo.Student WHERE dbo.SC.SNo=dbo.Student.SNo AND YEAR(BirthDate)=@byear ) go SELECT DISTINCT* FROM dbo.myfunction2('1980') go --删除函数myfunction1 DROP FUNCTION dbo.myfunction2 --用流控制语言统计tblSelCourse表中的成绩为A、B、C、D各个层次的学生数。假如规定:A--[90100} B--[8089] C[6080] D[060] DECLARE @a INT,@b INT,@c INT ,@d INT SET @a=0 SET @b=0 SET @c=0 SET @d=0 DECLARE @score DECIMAL(4,1) --定义游标cursor1 DECLARE SC_Cursor CURSOR FOR --使用游标的对象 SELECT score FROM SC --打开游标 OPEN SC_Cursor --将将游标向下移1行,获取的数据放入之前定义的变量@score中 FETCH NEXT FROM SC_Cursor into @score --判断是否成功获取数据 WHILE @@FETCH_STATUS = 0 BEGIN IF @score<60 SET @d=@d+1 IF @score>=60 AND @score<80 SET @c=@c+1 IF @score>=80 AND @score<90 SET @b=@b+1 IF @score>=90 SET @a=@a+1 --将游标向下移1行,获取的数据放入之前定义的变量@score中 FETCH NEXT FROM SC_Cursor into @score END PRINT @a PRINT @b PRINT @c PRINT @d --关闭游标 CLOSE SC_Cursor --删除游标 DEALLOCATE SC_Cursor go --游标一般格式: --DECLARE 游标名称 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ... --OPEN 游标名称 --FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,... --WHILE @@FETCH_STATUS=0 -- BEGIN -- SQL语句执行过程... ... -- FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,... -- END --CLOSE 游标名称 --DEALLOCATE 游标名称 (删除游标)
    转载请注明原文地址: https://ju.6miu.com/read-676324.html

    最新回复(0)