数据库应用第六章:T-SQL语言基础

一.T-SQL和SQL的关系是什么?

    SQL全称是"结构化查询语言(Structured Query Language),SQL是一种数据库
查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
    T-SQL是标准 SQL 程式设计语言的增强版,它是用来让应用程式与SQL Server 沟通
的主要语言。T-SQL提供标准SQL的DDL和DML 功能,加上延伸的函数、系统预存程序以及程
式设计结构(例如 IF 和 WHILE)让程式设计更有弹性。可以理解成T-sql是Sql Server
支持的sql语法,而不是软件。

二.试述T-SQL语言的特点。

    1)一体化。T-SQL语言包含4个组成元素: 数据查询语言、数据操纵语言DML、
数据定义语言DDL和数据控制语言。这些元素集数据定义、数据查询、数据操纵、 数
据控制、事务管理和附加语言元素为一体,方便用户使用。 
    2)两种使用方式:T-SQL支持交互方式和嵌入式方式。 
    3)非过程化语言。在T-SQL语句中,用户只需指出“做什么”,而不需要指出系统 
“如何做”,语句具体的操作过程由系统自动完成。 
    4)以记录集合作为操作对象。 
    5)类似于人的思维习惯,容易理解和掌握。

三.T-SQL的注释方式是什么?

    注释也称注解,是程序代码中不执行的文本字符串。注释主要描述程序名称、作者名称、
变量说明、代码更改日期、算法描述等。使用注释对代码进行说明,不仅能够使程序易读易懂,
而且有助于日后对程序的管理与维护。

在T-SQL中,可以使用两种类型的注释符:
1.注释符“--”用于单行注释
    使用双连字符 “--”作为注释符时,从双连字符开始到行尾的内容都是注释内容。
这些注释内容既可以与要执行的代码处于同一行,也可以另起一行。双连字符“--”注释
方式主要用于在一行中对代码进行解释和描述。

2.注释符“/* */”,用于注释多行文字
    在正斜线星号“/*?/”注释方式中,开始注释对“/*”和结束注释对“*/”之间的所有内容 
均视为注释。这些注释字符既可用于多行文字,也可以与执行的代码处在同一行,甚至还可以
在可执行代码的内部。

四.说明变量的分类及各类变量的特点。

    在SQL中,我们常常使用临时表来存储临时结果,但当结果仅仅是一个数据或者是几个数据
时,还要去建一个表,显得就比较麻烦,我们可以考虑使用变量,另外,当一个SQL语句中的某
些元素经常变化时,比如选择条件,也可以使用变量。变量分为局部变量和全局变量。

在SQL Server 2008系统中,变量的命名规则如下:
    第一个字符必须是字母、数字、下画线或@符号。需要注意的是,符号“@”开头的变量表示
局部变量、符号“@@”开头的变量表示全局变量。
    变量名不能是T-SQL语言的系统保留字(如IFELSECONTINUE等),包括大写和小写
形式。
    变量名中不允许出现空格或其他特殊字符。

五.如何使用IF ELSE和WHILE流程控制语句?

IF ELSE语句在程序中对于给定条件进行判断。语法格式如下:
IF 条件表达式
    {语句体1}
[ELSE
    {语句体2}
]

说明:
    条件表达式的运算结果应该为TRUE(真)或FALSE(假),如果条件表达式中含有
SELECT语句,则必须用圆括号将SELECT语句括起来;
    当条件表达式的值为TRUE时执行语句体1,然后执行IF语句之后的语句;
如果条件表达式的值为FALSE,则执行ELSE关键字后面的语句体2,然后执行IF语句之后的语
句;
    可以在IF区域或者ELSE区域嵌套另一个IF语句,对于嵌套的层数没有限制。

    WHILE语句是一种将同一段代码循环运行多次的方法,它可以根据一个条件表达式的
结果,将代码从0次开始运行到指定次数,或者是持续运行直到遇见BREAK关键字退出循环。
WHILE语句的语法格式如下: 
WHILE 条件表达式
    循环体
语句的执行流程如图所示。

这里写图片描述

说明:
    条件表达式的运算结果为TRUEFALSE:当条件表达式的值为TRUE时,执行循环体中
的语句,然后再次进行条件判断,重复上述操作,直至条件表达式的值为FALSE,退出循环 
体的执行。
    循环体中可以继续使用WHILE语句,称之为循环的嵌套。
    可以在循环体内设置BREAKCONTINUE关键字,以便控制循环语句的执行。

六.试述常用函数的分类及各函数的特点。

    在SQL中常用函数分为:数学函数、字符串函数和日期时间函数,它们的特点如下:

    数学函数可以执行对数、指数、三角函数、平方根等数学运算,并返回运算结果。 

    对输入的字符串进行各种操作的函数称为字符串函数。与数学函数一样,字符串函
数也是经常使用的函数。 

    SQL Server 2008提供的日期时间函数不多,但非常实用。这些函数可以执行
正确的DATETIME计算,并考虑闰年及其他历法的细节。在T-SQL中,可以将日期时间
函数用在SELECT查询语句的选择列表或用于WHERE子句中。

七. 在students数据库中写出完成下面任务的SQL语句。students数据库模式如下:

create database students;
go
use students;
create table student(
    Sno char9primary key,
    Sname char10not null unique,
    Ssex char2default '男',
    Sage numeric2),
    Sdept char2));
    create table course(
    Cnochar(3primary key,
    Cnamechar(10unique,
    Cpnochar(1),
    Ccreditnumeric(1));

create table sc(
    sno char9not null ,
    cno char3not null,
    gradenumeric(3check(grade>=0 and grade<=100),
    primary key(sno,cno))

(1)在students数据库中,查询选修”数据库”课程的平均成绩,写出sql代码。
(2)查询信息系(IS)选修了3门以上课程的学生的学号。
(3)将选修’数学’课的女同学选课元组全部删除。
(4)将’数学’课不及格的成绩全改为60分。

(1)在students数据库中,查询选修"数据库"课程的平均成绩,写出sql代码。 
    select 
        avg(grade) 数据库平均成绩 
    from sc,course 
    where sc.cno=course.cno and cname='数据库'2)查询信息系(IS)选修了3门以上课程的学生的学号。 
    select sc.sno 
    from sc,student  
    where sc.sno=student.sno and sdept='IS'  
    group by sc.sno having count(*)>33)将选修'数学'课的女同学选课元组全部删除。
    DELETE  
    FROM SC  
    WHERE CNO IN (  
                  SELECT CNO 
                  FROM COURSE  
                  WHERE CNAME='数学' )  
    AND SNO INSELECT SNO  
                FROM STUDENT  
                WHERE SSEX='女')

(4)将'数学'课不及格的成绩全改为60分。
UPDATE SC SET GRADE=60 WHERE GRADE < 60 AND CNO INSELECT CNO FROM COURSE WHERE CNAME='数学'

八.在students数据库中写出完成下面任务的SQL语句。students数据库模式如下:

create database students;
go
use students;
create table student(
    Sno char9primary key,
    Sname char10not null unique,
    Ssex char2default '男',
    Sage numeric2),
    Sdept char2));

create table course(
    Cnochar(3primary key,
    Cnamechar(10unique,
    Cpnochar(1),
    Ccreditnumeric(1));

create table sc(
    sno char9not null,
    cno char3not null,
    gradenumeric(3check(grade>=0 and grade<=100),
    primary key(sno,cno))

(1)查询至少选修两门课程的学生的姓名和学号。
(2)检索没有选修”数学”课的女学生姓名和学号。
(3)求年龄大于女同学平均年龄的男学生姓名和年龄;
(4)将低于所有课程总平均成绩的男同学成绩提高5%。

(1)查询至少选修两门课程的学生的姓名和学号。
    SELECT SNO,SNAME 
    FROM STUDENT  
    WHERE SNO IN( 
        SELECT SNO  
        FROM SC  
        GROUP BY SNO  
        HAVING COUNT(*)>=2)

(2)检索没有选修"数学"课的女学生姓名和学号。
    SELECT SNAME,SNO FROM STUDENT WHERE SNO NOT INSELECT SNO FROM SC WHERE CNO INSELECT CNO FROM COURSE WHERE CNAME='数学'))  
    AND SSEX='女'3)求年龄大于女同学平均年龄的男学生姓名和年龄;
    SELECT SNAME,SAGE FROM STUDENT WHERE SAGE  
    >(SELECT AVG(SAGE)FROM STUDENT WHERE SSEX='女'AND SSEX='男'4)将低于所有课程总平均成绩的男同学成绩提高5%。
    UPDATE SC SET GRADE=GRADE*(10.05WHERE GRADE <  
        (SELECT AVG(GRADE) FROM SC WHERE GRADE IS NOT NULLAND SNO INSELECT SNO FROM STUDENT WHERE SSEX='男'

猜你喜欢

转载自blog.csdn.net/weixin_37519752/article/details/80913773
今日推荐