T-SQL上机练习习题和答案
练习8 T-SQL编程答案
1.在查询分析器中分别调试如下程序,先修正错误再将结果以注释语句的形式写在相应程序的下方。
(1)declare @n decimal(5,2),@m varchar(10)go@n=99.995@m='n 的值为'print @m+@ngo改为:declare @n decimal(5,2),@m varchar(10)set @n=99.995set @m='n 的值为'PRINT @m+str(@n)Go(2)exec sp_addtype cy1,varchar(24)declare @a cy1set @a='abcd'select @a,datalength(@a)改为:exec sp_addtype cy1,'varchar(24)'godeclare @a cy1set @a='abcd'select @a,datalength(@a)(3)Use Studentgoselect 学号,成绩,等级=casewhen 成绩<=100 then 'A'when 成绩<90 then 'B'when 成绩<80 t hen 'C‟when 成绩<70 then …D‟when 成绩<60 then 'E'else …成绩输入有误!‟endfrom 课程注册go改为:Use Studentgoselect 学号,成绩,等级=casewhen 成绩<60 then 'E'when 成绩<70 then 'D'when 成绩<80 then 'C'when 成绩<90 then 'B'when 成绩<=100 then 'A'else '成绩输入有误!'endfrom 课程注册go(4)--本题的功能是求100以内的自然数之和declare @i int;@s intset @i=1set @s=0while @i<=100@s=@s+@i@i=@i+1print '100以内的自然数之和为: '+ltrim(str(@s))改为:declare @i int,@s intset @i=1set @s=0while @i<=100beginset @s=@s+@iset @i=@i+1endprint '100以内的自然数之和为: '+ltrim(str(@s))(5)/*本程序的功能是统计随机产生的1000个0到1之间小数以0.5为分界出现的次数,用以说明随机数的均匀性*/declare @r numeric(10,2),@m int,declare @n1 int,@n2 intset @n1=0set @n2=0while @m<=1000beginset @r=rand()if @r<=0.5@n1=@n1+1else@n2=@n2+1@m=@m+1endprint '小于等于0.5的随机数出现了'+ @n1+‟次‟print '小大于0.5的随机数出现了'+@n2‟+‟次‟改为:declare @r numeric(10,2),@m intdeclare @n1 int,@n2 intset @m=1set @n1=0set @n2=0while @m<=1000beginset @r=rand()if @r<=0.5set @n1=@n1+1elseset @n2=@n2+1set @m=@m+1endprint '小于等于.5的随机数出现了'+ str(@n1)+'次' print '小大于.5的随机数出现了'+str(@n2)+'次'2.计算1到10之间的奇数之和declare @i tinyint,@sum intset @sum=0set @i=0while @i>=0beginif(@i>=10)beginselect '总和'=@sumendelsebeginset @i=@i+1if(@i % 2) = 0continueelseset @sum=@sum+@iendend3.利用GOTO语句求出从1加到5的总和。
T-SQL试卷答案
1.HAVING字句中应后跟(B )A.行条件表达式B.分组条件表达式C.试图序列D.列名序列2.数据定义语言的缩写词为(A )A.DDLB.DCLC.DMLD.DBL3.在SQL语言中,建立存储过程的命令为(A )A.CREATE PROCEDUREB.CREATE RULEC.CREATE DURED.CREATE FILE4.在SQL中,建立视图的命令为(C )A.CREATE SCHEMAB.CREATE TABLEC.CREATE VIEWD.CREATE INDEX5.SQL的视图的数据是从(A )中产生的A.基本表B.视图C.基本表或视图D.数据库6.从“产品”表里查询出价格高于产品名为“一次性纸杯”的产品的记录,此SQL语句为(D )A.Select * from 产品where 价格>’一次性纸杯’B.Select * from 产品where 价格>(select * from 产品where 产品名称>’一次性纸杯’)C.Select * from 产品where exists (产品名称=’一次性纸杯’)D.Select * from 产品where 价格>(select 价格from 产品where 产品名称=’一次性纸杯’)7.假设订单表orders用来存储的订单信息,cid代表客户编号,money代表单次订购额,现要查询每个客户的订购次数和每个客户的订购总金额,下面(A )sql语句可以返回正确结果。
A.Select cid,count(distinct(cid)),sum(money) from orders group by cidB.Select cid,count(distinct(cid)),sum(money) from orders order by cidC.Select cid count(cid),sum(money) from orders order by cidD.Select cid count(cid),sum(money) from orders group by cid8.实体关系中学生与任课教师之间具有(D )联系A.一对一B.一对多C.多对一D.多对多9.在SQL中,建立索引用(C )命名A.CREATE SCHEMAB.CREATE TABLEC.CREATE INDEXD.CREATE VIEW10.在SQL Server 2008中,声明一个最多可以存储10个字符的变量pwd,正确的代码是(B )A.DECLARE pwd VARCHAR(10)B.DECLARE @pwd VACHAR(10)C.pwd VARCHAR(10)D.@pwd VARCHAR(10)11.E-R图中,关系用下面(C )来表示A.矩形B.椭圆形C.菱形D.圆形12.下面变量中属于T-SQL中用户自定义的变量是(B )A.@@errorB.@numberC.AbcD.num113.在数据库中查询数据,一般根据(C )查询速度较快A.设置默认值的列B.设置为外键的列C.设置为主键的列D.设置检查约束的列14.分析下面的代码段,说法错误的是(D )(选择一项)1 CREATE PROCEDURE proc_stuInfo2 @stuName VARCHAR(10),3 @n INT OUTPUT,4 @stuAge=18 INT5 AS6 ….代码略7 GO89 DECLARE @s INT10 EXEC proc_stuInfo ‘张三’,@s,3011 EXEC proc_stuInfo @stuAge=22,@stuName=’李四’,@n=@s OUTPUTA.此代码段创建了一个存储过程,并测试调用此存储过程B.第4行代码有误C.第10行代码有误D.第11行代码有误15.关于存储过程,以下说法正确的是(A )A.不能在存储过程中使用CREATE VIEW命令B.T-SQL批代码的执行速度要快于存储过程C.存储过程必须带有参数D.存储过程不能返回结果集16.现有书目表book,包含字段:price(float);现在查询一条书价最高的书目的详细信息,以下语句正确的是(BC )(选两项)A.Select top1 * from book order by price ascB.Select top1 * from book order by price descC.Select top1 * from book where price=(select max(price) from book)D.Select top1 * from book where price=max(price)17.现有订单表orders,包含数据如下表。
T-SQL练习题参考答案
T-SQL练习题参考答案一、StudentInfo数据库已发给大家。
其中包含两个表:stuInfo和stuMarks。
根据这个数据库完成下列各题:1.编写T-SQL查找李文才的左右同桌?分析:第一步,找出“李文才“的座位号;第二步,李文才的座位号加1或减1/*--查找李文才的信息--*/DECLARE @name varchar(8) --学员姓名 SET @name='李文才' --使用SET 赋值SELECT * FROM stuInfo WHERE stuName = @name /*--查找李文才的左右同桌--*/ DECLARE @seat int --座位号SELECT @seat=stuSeat FROM stuInfo --使用SELECT赋值 WHEREstuName=@name SELECT * FROM stuInfoWHERE (stuSeat = @seat+1) OR (stuSeat = @seat-1) GO2. 统计并显示本班笔试平均分,如果平均分在70以上,显示“成绩优秀“,并显示前三名学员的考试信息;如果在70以下,显示“本班成绩较差“,并显示后三名学员的考试信息。
分析:第一步,统计平均成绩存入临时变量;第二步,用IF-ELSE判断;declare @myavg floatselect @myavg=avg(writtenExam) from stuMarks --使用select赋值print '本班的平均分:'+convert(varchar(5),@myavg) if (@myavg>70) beginprint '本班笔试成绩优秀!'select top 3 * from stuMarks order by writtenExam desc end elsebeginprint '本班笔试成绩优秀!'select top 3 * from stuMarks order by writtenExam end go3. 本次笔试成绩较差,假定要提分,确保每人笔试都通过。
T-SQL作业答案
24.写出下列每条语句或程序段的功能假设存在名为AAA的数据库,包括Students(学号 char(8),姓名varchar(8),年龄 int,专业 varchar(20),入学日期 DateTime)和Score (学号 char(8),课程名 varchar(10),成绩 numeric(5,2))两张表。
(1)SELECT *FROM StudentsWHERE DATEPART(year,入学日期) =DATEPART(year,GETDATE())((1)从Students表中查询出所有当年(系统时间)入学的学生记录。
)(2)DECLARE @MyNO CHAR(8)SET @MyNO='20030001'IF (SELECT 专业FROM Students WHERE 学号=@MyNO)='计算机软件'BEGINSELECT AVG(成绩) AS 平均成绩FROM ScoreWHERE 学号=@MyNOENDELSEPRINT '学号为' +@MyNO+'的学生不存在或不属于软件专业' GO((2)首先定义一个名为@MyNo的局部变量,并给它赋初值,如果@MyNo属于计算机软件专业,则显示出平均成绩,否则显示“学号为@MyNo 的学生不存在或不属于软件专业”)(3)declare @a numeric(5,2)set @a=(select avg(成绩) from score)select *from scorewhere 成绩>=@a(从score表中查询出大于等于平均成绩的所有记录。
)(4)declare @a numeric(5,2),@b numeric(5,2) set @a=(select max(成绩) from score)set @b=(select min(成绩) from score)print @a-@b(求出score表中最高成绩与最低成绩的分数之差。
SQL Server实用教程上机7T-SQL编程(附答案)
《SQL Server实用教程》教案实验7 T-SQL编程授课教师:课时:2学时●实验目的掌握索引的使用方法掌握数据完整性实现方法●实验重点索引的使用方法●实验难点索引的使用方法●实验内容与步骤1、建立索引(1)对YGGL数据库的Employees表中的DepartmantID列建立索引。
(2)对XSCJ数据库的KC表中的课程号列建立索引。
(3)对XSCJ数据库的XS_KC表中的学号列和课程号列建立复合索引。
2、数据完整性1、创建一个表EmployeeID、Name、Sex和Education列。
将Name设为主键,作为列Name的约束。
对EmployeeID列进行unique约束。
2、删除上题中创建的unique约束。
3、创建一个表cjb2包含学号,课程号,成绩将学号和课程号使用复合列作为主键创建约束。
3、创建新表student,只考虑号码和性别两列,性别只能包含男或女。
4、创建新表salary2,完成后修改salary2表,增加“departmentid”字段且添加约束departmentid 的值在1-5之间。
a、测试check约束的有效性。
●实验小结(要求学生写)答案下页1.对YGGL数据库的Employees表中的DepartmantID列建立索引。
use ygglgocreate index kc_name_indon dbo.Departments(DepartmentID)2.对XSCJ数据库的KC表中的课程号列建立索引。
use PXSCJgocreate index kch_nameon dbo.KCB(CourseId)3.对XSCJ数据库的XS_KC表中的学号列和课程号列建立复合索引。
use PXSCJgocreate index xh_kc_nameon {dbo.XSB(StudentId) dbo.KCB(CourseId)};with (drop_existing=on)4.创建一个表EmployeeID、Name、Sex和Education列。
T-SQL语句练习题
一、根据要求用T-SQL语句创建数据库和表。
创建数据库“英才大学成绩管理”。
分别创建三个表,具体的表名、字段名如下:学生(学号,姓名,性别,出生年月,籍贯,班级) 其中性别字段只能为“男”或“女”课程(课程编号,课程名称,学分) 其中课程名称字段为唯一值约束成绩(学号,课程编号,成绩)带下划线的字段为主键,表之间的外键关联参考下图,各字段的数据类型应尽量合理。
CREATE DATABASE 英才大学成绩管理create table 学生(学号 char(6) primary key,姓名 char(6),性别 char(2) check(性别='男' or 性别='女'),出生年月 datetime,籍贯 varchar(50),班级 char(12),)create table 课程(课程编号 char(5) primary key,课程名称 char(20) unique,学分 smallint,)create table 成绩(学号 char(6) references 学生(学号),课程编号 char(5) references 课程(课程编号),成绩 decimal(5,2),primary key(学号,课程编号))二、根据T-SQL语句写出执行结果(20分,每题4分)对上题所创建的表添加记录后如图所示,详细写出下面的SQL语句的执行结果。
1、select * from 课程 where 课程编号='30442'1、2、select 姓名 from 学生where 性别='女' and 籍贯='辽宁'2、3、select 姓名,课程名称,成绩 from 学生,课程,成绩where 学生.学号=成绩.学号 and 课程.课程编号=成绩.课程编号and 学分='4'3、4、select max(成绩) as 最高分 from 课程,成绩where 课程.课程编号=成绩.课程编号 and 课程名称='C语言程序设计' 4、5、select 籍贯,count(*) as 人数from 学生where 班级='计ZG091' group by 籍贯5、三、对第一题中的表用T-SQL语句完成如下操作。
数据库上机考试试题与答案
1下列说法中正确的是:( D )A 、 SQL 中局部变量可以不声明就使用B 、 SQL 中全局变量必须先声明再使用C 、 SQL 中所有变量都必须先声明后使用D 、 SQL 中只有局部变量先声明后使用;全局变量是由系统提供的用户不能自己建立。
2.哪个关键字用于测试跟随的子查询中的行是否存在(B)。
A.MOV B.EXISTSC.UNION D.HAVING3 .下列哪些语句用于创建存储过程(A)?A、CREATE PROCEDUREB、CREATE TABLEC、DROP PROCEDURED、其他5.在SQL中,SELECT语句的“SELECT DISTINCT”表示查询结果中 ( C )。
A.属性名都不相同B.去掉了重复的列C.行都不相同D.属性值都不相同6.SQL 语言集数据查询、数据操作、数据定义和数据控制功能于一体,语句INSERT、DELETE、UPDATA实现下列哪类功___A_____。
A. 数据查询B. 数据操纵C. 数据定义D. 数据控制7.SQL Server 2000 采用的身份验证模式有(D)。
(A)仅Windows身份验证模式(B)仅SQL Server身份验证模式(C)仅混合模式(D)Windows身份验证模式和混合模式10.SQL Server 2000 企业版可以安装在操作系统上。
( C )(A)Microsoft Windows 98(B)Microsoft Windows 2000 Professional(C)Microsoft Windows 2000 Server(D)Microsoft Windows XP11.SQL Server是一个(C)的数据库系统。
(A)网状型(B)层次型(C)关系型(D)以上都不是12.SQL语言中,删除一个视图的命令是( B )。
A. DELETEB. DROPC. CLEARD. REMOVE13.SQL语言中,删除记录的命令是(A)。
T-SQL编程及练习题
• Case语句
CASE 表达式 WHEN 值1 THEN 返回值1 …… [ELSE 返回值n] END CASE WHEN 表达式1 THEN 返回 值1 …… [ELSE 返回值n] END
T-SQL流程控制示例
示例:求1到100间的偶数和
declare @isum int declare @i int begin set @isum=0 set @i=0 while(@i<100) begin set @i=@i+1 if(@i%2=0) begin set @isum=@isum+@i print '@i='+cast(@i as varchar) end else continue end print @isum end
• 执行存储过程时,可以有3种不同的返回值
– 以return n的形式返回一个整数值。 – 指定output返回参数来返回值。 – 执行T-SQL语句返回数据集,如select语句。
• 示例:return n形式
CREATE PROCEDURE [dbo].[test2] AS BEGIN Declare @avgsal money SELECT @avgsal=avg(salary) FROM employees Return @avgsal END
CREATE PROCEDURE [dbo].[test1] @department_id int AS SELECT * FROM employees WHERE department_id=@department_id
• 执行:
EXECUTE test1 @department_id=10
存储过程返回值
用户定义函数的两种类型
T-SQL综合练习(参考答案)
T-SQL综合练习(参考答案)1.USE AdventureWorksSELECT CardNumber AS [Credit Card Number]FROM Sales.CreditCard2.SELECT categoryid '产品类别代号',productname,unitprice '单价'FROM NorthWind.dbo.productsORDER BY categoryid,unitprice DESC3.-- 使用DISTINCT 关键字列出不重复的Title 数据行SELECT DISTINCT TitleFROM AdventureWorks.HumanResources.EmployeeORDER BY Title4.---透过GETDATE() 系统函数取得当前执行的日期与时间,并通过运算符示范加减日期。
SELECT GETDATE()'今天',GETDATE()+1 '明天',GETDATE()-2 '前天'5.--加号「+」运用在字串与数值表达式中的执行结果。
USE AdventureWorks;SELECT c.FirstName+'.'+stName FullName, VacationHours, SickLeaveHours,VacationHours + SickLeaveHours '休假总时数'FROM HumanResources.Employee AS eJOIN Person.Contact AS c ON e.ContactID = c.ContactID6.--通过CONVERT 转换函数,将数值数据转换为字串类型,则两个相同类型的字串即可相加SELECT ProductID,Name,convert(nvarchar,'04')+ProductNumberFROM AdventureWorks.Production.Product p或者SELECT ProductID,Name,'04'+ProductNumberFROM AdventureWorks.Production.Product p7.SELECT PhoneFROM AdventureWorks.Person.ContactWHERE Phone like'415%'8.select distinct City , PostalCode from Person.Addresswhere PostalCode LIKE'[A-E][A-Z][0-9][0-9]'SELECT FirstName, LastNameFROM Person.ContactWHERE FirstName LIKE'Al[^a]%'ORDER BY FirstNameSELECT CustomerID,NameFROM AdventureWorks.Sales.StoreWHERE CustomerID LIKE'1%'AND Name LIKE N'B%'9.SELECT EmployeeID, TitleFROM AdventureWorks.HumanResources.EmployeeWHERE Title NOT IN('Design Engineer','Tool Designer','Marketing Assistant')或者SELECT EmployeeID, TitleFROM AdventureWorks.HumanResources.EmployeeWHERE Title <>'Design Engineer'AND Title <>'Tool Designer'AND Title <>'Marketing Assistant'10.SELECT ProductID, ProductModelIDFROM AdventureWorks.Production.ProductWHERE ProductModelID = 20 OR ProductModelID = 21AND Color ='Red'SELECT ProductID, ProductModelIDFROM AdventureWorks.Production.ProductWHERE(ProductModelID = 20 OR ProductModelID = 21)AND Color ='Red'11.--取回指定范围内的数据(使用BETWEEN AND关键字)SELECT ProductID,Name,ListPriceFROM AdventureWorks.Production.ProductWHERE ListPrice BETWEEN 20 AND 25SELECT ProductID,NameFROM AdventureWorks.Production.ProductWHERE ListPrice NOT BETWEEN 15 AND 2512SELECT Title,AVG(VacationHours)as [平均休假时数],SUM(SickLeaveHours)as [病假总时数]FROM HumanResources.EmployeeGroup BY Title13a.CREATE TABLE dbo.EmployeeEmployeeID VARCHAR(10)NOT NULL PRIMARY KEY,Employee VARCHAR(30)NOT NULL);b.CREATE TABLE dbo.Orders(OrderID VARCHAR(10)NOT NULL,--PRIMARY KEY,EmployeeID VARCHAR(10)NULL,Price INT NULL);C.INSERT INTO dbo.Employee(EmployeeID, Employee)VALUES('1001','Sandy'); INSERT INTO dbo.Employee(EmployeeID, Employee)VALUES('1002','Byron'); INSERT INTO dbo.Employee(EmployeeID, Employee)VALUES('1003','Bill'); INSERT INTO dbo.Employee(EmployeeID, Employee)VALUES('1004','Lisa');INSERT INTO dbo.Orders(OrderID,EmployeeID,Price)VALUES('A013','1001', 150);INSERT INTO dbo.Orders(OrderID,EmployeeID,Price)VALUES('A014','1002', 50);INSERT INTO dbo.Orders(OrderID,EmployeeID,Price)VALUES('B103','1003', 370);INSERT INTO dbo.Orders(OrderID,EmployeeID,Price)VALUES('B140','1003', 110);INSERT INTO dbo.Orders(OrderID,EmployeeID,Price)VALUES('C239','1001', 1020);INSERT INTOdbo.Orders(OrderID,EmployeeID,Price)VALUES('E134','1002',200);d.SELECT Employee,count(OrderId)订单数量,sum(Price)业绩FROM Employee AS EINNER JOIN Orders AS OON O.EmployeeID = E.EmployeeIDGROUP BY Employeee.SELECT Employee,count(OrderId)订单数量,sum(Price)业绩FROM Employee AS ELEFT JOIN Orders AS OON O.EmployeeID = E.EmployeeIDGROUP BY Employee14.ALTER TABLE Orders ALTER COLUMN OrderID integer15.1)SELECT TempDate FROM tblTemp WHERE TempID%2=02)SELECT*FROM tblTemp WHERE TempID=(SELECT MAX(TempID)FROM tblTemp) 16.1)SELECT*FROM physicians WHERE state='NY'OR state='WA'OR state='VA' OR state='CA'或者SELECT*FROM physicians WHERE state in('NY','WA','VA','CA')2)SELECT DISTINCT state FROM physicians3)SELECT physicians.*,'Amt_Due'=(co_pay+5)FROM physicians或者SELECT physicians.*,(co_pay+5)'Amt_Due'FROM physicians17.1)CREATE TABLE tblCustomerInfo(代号int IDENTITY(10001,5)NOT NULL,名称VARCHAR(80),电话VARCHAR(20),传真VARCHAR(20),备注VARCHAR(2000))2) ATLTER TABLE tblCustomerInfo ADD手机CHAR(11)。
SQL数据库题库及答案 (1)
实训131.使用T-SQL语句创建“Windows身份验证”登录名(对应的Windows用户为testwin)。
create login [stu1001\testwin]from windowsexec sp_addlogin 'aa' , '123' /*用存储过程创建sql登录名*/2.使用T-SQL语句查看所创建的登录名“testwin”的属性。
select loginname,sid from master.sys.syslogins3.使用T-SQL删除登录名“testwin”。
drop login [stu1001\testwin]4.使用SSMS创建与登录名“testsql”对应的数据库用户“sqluser”(对应于数据库WebShop),并查看其属性5.使用SSMS删除数据库用户“sqluser”。
6.使用T-SQL语句创建与登录名“testwin”对应的数据库用户“winuser”。
use webshopcreate user [winuser] for login [stu1001\testwin]7.将数据库用户“winuser”修改为“win”。
use webshopalter user [winuser]with name=win/*Alter User的语法结构:ALTER USER userNameWITH <set_item> [ ,...n ]<set_item> ::=NAME = newUserName| DEFAULT_SCHEMA = { schemaName | NULL }| LOGIN = loginName| PASSWORD = 'password' [ OLD_PASSWORD ='oldpassword' ]| DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }*/1.使用SSMS或T-SQL语句查看WebShop数据库中数据库用户的信息。
T-SQL内部测试笔试题和答案1
T-SQL内部测试笔试题和答案1《MySchool数据库设计优化》内部测试-笔试试卷1)在SQLServer中,为数据库表建立索引能够()。
A.防止非法的删除操作B.防止非法的插入操作C.提高查询性能D.节约数据库的磁盘空间2)在SQLSERVER中,创建一个表使用()语句。
A.INSERTB.DROPC.CREATED.ALERT3)在SQLSERVER中,下面关于视图说法错误的是()。
A.对查询执行的大多数操作也可以在视图上进行B.使用视图可以增加数据库的安全性C.不能利用视图增加,删除,修改数据库中的数据D.视图使用户更灵活的访问所需要的数据4)在数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的()阶段。
A.需求分析B.概要设计C.逻辑设计D.物理设计5)在SQLServer数据库中,如果强制要求grade表中的学员必须是Student表中存在的学员,以下描述正确的是()。
A.在grade表中创建外键约束B.在grade表中创建检查约束C.在grade表中创建唯一约束D.在grade表中创建默认约束6)在SQLServer数据库中,下面的T-SQL语句段执行第三句时出现错误,数据库中的内容修改情况是()。
BEGINTRANSACTIONROLLBACKTRANSACTIONELSECOMMITTRANSACTION7)A.B.C.D.Account表中id为1的记录中balance字段的值被修改为7800Account表中id为1的记录中balance字段的值被修改为9000Account表中id为1的记录中balance字段的值不变不可能发生这种情况8)9)UPDATEtuMarkSETwrittenE某am=writtenE某am+5WHEREwrittenE某am<60ELSEBREAKSELECTtuNo,成绩=CASEWHENwrittenE某am<60THEN'不及格'ELSE'及格'ENDFROMtuMarkA.给不及格的学员反复提5分直到通过为止,最后展示所有学员是否及格的情况信息B.给不及格的学员提10分,最后展示所有学员是否及格的情况信息C.给不及格的学员提5分,提分后仍不及格的学员再提5分,最后展示所有学员是否及格的情况信息在SQLSERVER中,下面关于子查询的说法你认为正确的是()。
T-SQL综合练习
T-SQL综合练习T-SQL综合练习注:没有指定表的,所有都是使用AdventureWorks,用T-SQL 语句完成题目要求。
1.查询表Sales.CreditCard中的CardNumber,更改列标题为…Credit CardNumber?2.查询表product中的categoryid,unitprice并分别给定例标题产品类别代号,单价;系统先对产品类别递增排序,然后在每个产品类别内按照单价减序排列。
3.查询表employee中的title(产品标识符),要求得到唯一的产品标识符。
4.利用查询得到今天,明天,前天的现在时间.5.在employee表和contact表中,查询列为fullname,VacationHours,SickLeaveHours,?休假总数?.其中fullname为firstname、lastname 字符的结合字符串,休假总数,为前两列的和。
6.为所有的product表中的productNuberm数据开头增加04编号,要求0要出现。
7.查询contact表中区号为415的所有电话号码。
8.查询address表中地址为4个字符的邮政编码,其邮政编码的第一个字符限制在A-E、第二个字符为A-Z,最后两个字符分别为数字。
查询表contact中所有一AI开头,并且第三个字母不是a的名称,并用firstname 对其进行排序。
查询store表中所有CustomID以1开头,且Name以B开头的行。
9.查询employees表中职称title不是Design Engineer、ToolDesigner或者Marketing Assistant的员工的名单。
10.在表produst中查询ProductID,ProductModelID列,并且要求ProductModelID产品型号为20及21的红色(red)产品。
在表produst中查询ProductID,ProductModelID,并且要求ProductModelID产品型号为20和21的红色(red)产品。
数据库上机内容及答案
使用T-SQL语句创建数据库YGGL启动查询分析器→在“查询”窗口中输入如下T-SQL语句:CREATE DATABASE YGGLON(NAME='YGGL_Data',FILENAME='C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\DATA\YGGL.mdf',SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=5%)LOG ON(NAME='YGGL_Log',FILENAME='C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\DATA\YGGL_Log.ldf',SIZE=2MB,MAXSIZE=5MB,FILEGROWTH=1MB)GO单击快捷工具栏的执行图标执行上述语句,并在企业管理器中查看执行结果。
4.在企业管理器中分别创建表Employees、Departments和Salary在企业管理器中选择数据库YGGL→在YGGL上单击鼠标右键→新建→表→输入Employees表各字段信息→单击保存图标→输入表名Employees,即创建了表Employees。
按同样的操作过程创建表Departments和Salary。
5.在企业管理器中删除创建的Employees、Departments和Salary表在企业管理器中选择数据库YGGL的表Employees→在Employees上单击鼠标右键-→删除,即删除了表Employees。
按同样的操作过程删除表Departments和Salary。
6.使用T-SOL语句创建表Employees、Departments和Salary启动查询分析器→在“查询”窗口中输入以下T-SQL语句:USE YGGLCREATE TABLE Employees(EmployeeID char(6)NOT NULL,Name char(10)NOT NULL,Birthday datetime NOT NULL,Sex bit NOT NULL,Address char(20)NOT NULL,Zip char(6)NULL,PhoneNumber char(12)NULL,EmailAddress char(20)NULL,DepartmentID char(3)NOT NULL)GO单击快捷工具栏的执行图标,执行上述语句,即可创建表Employees。
T_SQL函数习题及答案(完整版)
作业参考答案:--1.设数据库中有学生成绩表sc(sno char(10),cno char(5),grade tinyint),设计一个函数Count_course,返回指定学生的选修的课程门数. 注意:没有选修时应返回0;create function Count_course(@sno char(10))returns intas beginreturn( select count(0) from sc where sno=@sno)end--2.写一个T-sql函数reversion,完成颠倒一个字符串,即:select dbo.reversion('abcd') 输出的结果为dcba;create function reversion(@str varchar(4000))returns varchar(4000)as begindeclare @ret varchar(4000)declare @i intset @ret=''set @i=len(@str)while @i>0 beginset @ret=@ret+substring(@str,@i,1)set @i=@i -1endreturn @retend--select dbo.reversion('abcdefg')--对照: 下面的算法有错误,当字符串长度超过2000后不能得到正确结果create alter function reversion2(@str varchar(4000))returns varchar(4000)as begindeclare @i int, @j intset @i=len(@str)set @j=len(@str)while @i>0 beginset @str=@str+substring(@str,@i,1)set @i=@i -1endset @str=right(@str,@j)return @strend--select dbo.reversion2('abcdefg')--3.写一个函数T-sql函数elimination(a,b)将出现在第一个字符串中的第二个字符串中的所有字符删除,即:select dbo.elimination('abcdefg12345','bd2') 输出为:acefg1345;create function elimination(@a varchar(4000),@b varchar(4000))returns varchar(4000)as begin--declare @ret varchar(4000)declare @i int--set @ret=''set @i=1while @i < len(@b) beginset@a=replace(@a,substring(@b,@i,1),'')set @i= @i + 1endreturn @aend--select dbo.elimination('abcdefg12345','bd2') --4.写一个函数Output_RMB,完成将人民币数值转换为汉字大写,即:select dbo.Output_RMB(4567.12) 输出为:肆仟伍佰陆拾柒元壹角贰分;/*方法二:推荐使用的方法,支撑两种转换类型select dbo.Convert_money('20002.45',0) select dbo.Convert_money('20002.45',1)*/Create function Convert_money(@n_LowerMoney numeric(15,2),@v_TransType int)returns varchar(200)ASbeginDeclare @v_LowerStr V ARCHAR(200) -- 小写金额Declare @v_UpperPart V ARCHAR(200)Declare @v_UpperStr V ARCHAR(200) -- 大写金额Declare @i_I intselect @v_LowerStr=LTRIM(RTRIM(STR(@n_LowerMoney,20,2) )) --四舍五入为指定的精度并删除数据左右空格select @i_I = 1select @v_UpperStr = ''while ( @i_I <= len(@v_LowerStr))beginselect @v_UpperPart=casesubstring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1) WHEN '.' THEN '元'WHEN '0' THEN '零'WHEN '1' THEN '壹'WHEN '2' THEN '贰'WHEN '3' THEN '叁'WHEN '4' THEN '肆'WHEN '5' THEN '伍'WHEN '6' THEN '陆'WHEN '7' THEN '柒'WHEN '8' THEN '捌'WHEN '9' THEN '玖'END+ case @i_IWHEN 1 THEN '分'WHEN 2 THEN '角'WHEN 3 THEN ''WHEN 4 THEN ''WHEN 5 THEN '拾'WHEN 6 THEN '佰'WHEN 7 THEN '仟'WHEN 8 THEN '万'WHEN 9 THEN '拾'WHEN 10 THEN '佰'WHEN 11 THEN '仟'WHEN 12 THEN '亿'WHEN 13 THEN '拾'WHEN 14 THEN '佰'WHEN 15 THEN '仟'WHEN 16 THEN '万'ELSE ''ENDselect @v_UpperStr = @v_UpperPart + @v_UpperStrselect @i_I = @i_I + 1end--print '//v_UpperStr='+@v_UpperStr +'//' if ( @v_TransType=0 )beginselect @v_UpperStr=REPLACE(@v_UpperStr,'零拾','零')select @v_UpperStr=REPLACE(@v_UpperStr,'零佰','零')select @v_UpperStr=REPLACE(@v_UpperStr,'零仟','零')select @v_UpperStr=REPLACE(@v_UpperStr,'零零零','零') select @v_UpperStr=REPLACE(@v_UpperStr,'零零','零')select @v_UpperStr=REPLACE(@v_UpperStr,'零角零分','整') select @v_UpperStr=REPLACE(@v_UpperStr,'零分','整')select @v_UpperStr=REPLACE(@v_UpperStr,'零角','零')select @v_UpperStr=REPLACE(@v_UpperStr,'零亿零万零元','亿元')select @v_UpperStr=REPLACE(@v_UpperStr,'亿零万零元','亿元' select @v_UpperStr=REPLACE(@v_UpperStr,'零亿零万','亿') select @v_UpperStr=REPLACE(@v_UpperStr,'零万零元','万元') select @v_UpperStr=REPLACE(@v_UpperStr,'万零元','万元') select @v_UpperStr=REPLACE(@v_UpperStr,'零亿','亿')select @v_UpperStr=REPLACE(@v_UpperStr,'零万','万')select @v_UpperStr=REPLACE(@v_UpperStr,'零元','元')select @v_UpperStr=REPLACE(@v_UpperStr,'零零','零')end-- 对壹元以下的金额的处理if ( substring(@v_UpperStr,1,1)='元' ) beginselect @v_UpperStr=substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))endif (substring(@v_UpperStr,1,1)= '零') begin select @v_UpperStr=substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))endif (substring(@v_UpperStr,1,1)='角') begin select @v_UpperStr=substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))endif ( substring(@v_UpperStr,1,1)='分') beginselect @v_UpperStr=substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))endif (substring(@v_UpperStr,1,1)='整')begin select @v_UpperStr = '零元整'endreturn @v_UpperStrendgo/*/*5.写一个函数Custom_A VG模拟多名裁判打分时求平均值的函数,去掉一个最高分、一个最低分、然后取平均。
实验4使用t-sql语言创建和修改表答案
实验4 使用T-SQL语言创建和修改表一、实验目的1.掌握使用查询分析器利用T-SQL语句创建数据库表的方法。
2.掌握使用查询分析器利用T-SQL语句修改数据库表结构、删除数据库表的方法。
3.掌握如何使用查询分析器利用T-SQL语句创建和使用用户自定义数据类型。
二、实验内容新建人事管理系统数据库,包括三个表:员工基本信息表、部门信息表、员工工资信息表。
三个表的结构如表3-7、表3-8、表3-9。
完成以下各题。
表 3-8部门信息表表 3-9员工工资信息表1.使用T-SQL语句自定义一个数据类型TELEPHONE_COD,为字符型CHAR(15),允许空值。
SQL代码如下:USE 人事管理系统EXEC SP_ADDTYPE TELEPHONE_CODE,'CHAR(15)','NULL'2.使用查询分析器利用T-SQL语句创建员工基本信息表。
SQL代码如下:USE 人事管理系统CREATE TABLE 员工基本信息表(员工编号INT NOT NULL CONSTRAINT PK_YGID PRIMARY KEY,员工姓名NVARCHAR(50) NOT NULL,员工登录名NVARCHAR(20) NOT NULL,员工登录密码BINARY(20) NULL,员工电子邮件NVARCHAR(50) NOT NULL,员工所属部门编号INT NULL,员工基本工资INT NULL,员工职位名称NVARCHAR(50) NULL,员工电话TELEPHONE_CODE NULL,员工报到日期DATETIME NOT NULL,员工自我介绍NVARCHAR(200) NULL,员工剩余假期INT NULL,员工的级别INT NULL,员工照片IMAGE NULL)3.使用查询分析器利用T-SQL语句创建部门信息表。
SQL代码如下:USE 人事管理系统CREATE TABLE 部门信息表( 部门编号INT NOT NULL CONSTRAINT PK_BMID PRIMARY KEY,部门名称CHAR(10) NULL,部门描述CHAR(50) NULL,部门经理编号INT NULL)4.使用查询分析器利用T-SQL语句创建员工工资信息表。
实验5:T-SQL函数 参考答案
实验五:T-SQL函数一、课后作业(手写作业答案到实验报告)1、简述T-SQL语句分类及其作用?答:分类:数据操作语句(DML)、数据定义语句(DDL)、数据控制语句(DCL)和一些附加的语言元素。
1)数据操作语句:使用户能够查询数据库及操作已有数据库中数据的语句。
2)数据定义语句:用于描述数据库中要储存的现实世界实体的语言。
3)数据控制语句:用来设置、更改用户或角色权限。
4)一些附加的语言元素:用来丰富T-SQL语句的功能。
二、上机作业(要求手写T-SQL语句到实验报告上)1. 使用数学函数进行如下运算:(1)计算18除以5的商和余数。
select floor(18/5),18%5运行结果:注:floor(x)返回不大于X的最大整数值。
参考 %(取模)(2)将弧度值PI( )/4转换为角度值。
select DEGREES(PI()/4)运行结果:注:degrees(X)将参数X由弧度转化为角度。
(3)计算9的4次方值。
select POWER(9,4)运行结果:注:power(x,y)函数返回x的y次乘方的结果值。
(4)保留浮点值3.14159小数点后面2位。
select ROUND(3.14159,2)运行结果:注:round(x,y)返回最接近于参数x的数,其值保留到小数点后面y位,若y为负值,则将保留x值到小数点左边y位。
2. 使用字符串函数进行如下运算:(1)分别计算字符串“Hello World!”和“University”的长度。
select LEN('Hello word'),LEN('University')运行结果:(2)从字符串“Nice to meet you!”中获取子字符串“meet”。
select SUBSTRING('Nice to meet you!',9,4)运行结果:(3)除去字符串“h e l l o”中的空格。
SQL程序练习题及答案
已知一学生成绩信息库,其中库里包含以下四个数据表,按要求完成以下各题的代码程序设计。
学生基本信息表:表名:student 说明:学生基本信息表课程信息表:表名:couse 说明:课程信息表选课表:表名:slt_couse 说明:选课表院系信息表:表名:dept 说明:院系信息表代码要求如下:1、分别用T-SQL语句写出上述几个表的创建过程。
学生基本信息表USE testGOCREATE TABLE student(st_id nVarChar(9) primary key NOT NULL ,st_nm nVarChar(8) NOT NULL ,st_sex nVarChar(2) NULL ,st_birth datetime NULL ,st_score int NULL ,st_date datetime NULL ,st_ from nVarChar(20) NULL ,st_dpid nVarChar(2) NULL ,st_ mnt tinyint NULL)创建课程信息表:CREATE TABLE couse(cs_id nVarChar(4) primary key NOT NULL ,cs_nm nVarChar(20) NOT NULL ,cs_tm int NULL ,cs_sc int NULL)选课表:CREATE TABLE couse(cs_id nVarChar(4) NOT NULL ,st_id nVarChar(9) NOT NULL ,score int NULL ,sltdate datetime NULL)院系信息表:USE testGOCREATE TABLE dept(dp_id nVarChar(2) NOT NULL ,dp_nm nVarChar(20) NOT NULL ,dp_drt nVarChar(8) NULL ,dp_tel nVarChar(12) NULL)2、向dept表插入一条记录,系号11,系名自动控制系,系主任为李其余,电话81234567。
SQL第6周数据库上机作业答案
第二次(第6周)上机作业一、用T-SQL语句在E:\DATA\文件夹中创建一个教师信息数据库teacher,该数据库包含:(界面方式也要会)1、一个主数据文件逻辑名‘teacherdata1 ’,物理名‘E:\DATA\tdata1.mdf ’,初始容量1MB,最大容量10MB,每次增长量为15%。
2、一个辅助数据文件逻辑名‘teacherdata2 ’物理名‘E:\DATA\tdata2.ndf ’,初始容量2MB,最大容量15MB,每次增长量为2MB。
3、两个数据文件不单独创建文件组,即使用默认的PRIMARY组;4、一个事务日志文件逻辑名‘teacherlog’物理名‘E:\DATA\teacherlog.ldf ’,初始容量500KB,最大容量不受限制,每次增长量为500KB。
先确认E:\DATA\文件夹已创建,CREATE DATABASE teacherON PRIMARY( NAME = teacherdata1 ,FILENAME = 'E:\DATA\tdata1.mdf' ,SIZE =5MB ,MAXSIZE= 10 ,FILEGROWTH = 15%) ,( NAME = teacherdata2 ,FILENAME = 'E:\DATA\tdata2.ndf' ,SIZE = 2 ,MAXSIZE= 15 ,FILEGROWTH = 2MB)LOG ON /* 创建事务日志文件*/( NAME = teacherlog ,FILENAME = 'E:\DATA\teacherlog.LDF',SIZE = 500 KB ,/* 初始容量,KB单位不能省略*/MAXSIZE = UNLIMITED ,/* 日志文件最大容量不受限制*/FILEGROWTH = 500 KB/* 增长量KB 不能省略*/ )二、修改数据库“teacher”,增加两个文件组,文件组名:Gteacher1和Gteacher2。
SQL数据库上机考试题
一、用Transact-SQL语句定义数据库(每题6分,共12分)1、创建名为School的数据库,该数据库包含二个大小为2MB的数据文件(文件名为:<你的姓名>_school_dat1和<你的姓名>_school_dat2)和一个大小为1MB的事务日志文件(文件名为:<你的姓名>_school_log)。
限制数据文件大小为5MB、日志文件为2MB。
对于所有文件,允许20%的文件增长。
请将创建数据库的Transact-SQL 脚本存为<你的姓名>_1_01.sql文件。
解:drop database schoolgocreate database schoolonprimary(name='lts_school_dat1',filename='C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\Data\lts_school_dat1.mdf',size=3MB,maxsize=5MB,filegrowth=20%),filegroup fgroup(name='lts_school_dat2',filename='C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\Data\lts_school_dat2.ndf',size=2MB,maxsize=5MB,filegrowth=20%)log on(name='lts_school_log',filename='C:\Program Files\Microsoft SQLServer\MSSQL.1\MSSQL\Data\lts_school_log.ldf',size=1MB,maxsize=2MB,filegrowth=20%)go2、修改数据文件<你的姓名>_school_dat1,增加其大小至3MB,并允许按0.5MB(512KB)的增量增至最大大小6MB;删除数据文件<你的姓名>_school_dat2;添加一个新的1MB的数据文件(文件名为:<你的姓名>_school_dat3),允许它以1MB增量增至磁盘被充满。
SQL上机考试(答案)
数据库原理及应用上机考试提示:1、在F盘建立一个以学号+姓名为文件名的文件夹,将此Word文档存入该文件夹。
2、附加“THXY_SM”数据库,完成下面操作。
3、将每题目的操作要求完成。
4、提交该Word文档。
操作要求如下:1、创建“专业表”。
请写出SQL语句:Create table专业表(序号INT identity(1,1)primary key,专业代码char(8),专业名称varchar(20),系号char(10)references系部表(系号))2、设置“成绩表”的主键。
请写出SQL语句:alter table成绩表add constraint pk1 primary key(学号,课程号)3、在“THXY_SM”数据库中,打开“数据库关系图”中的“学生管理关系图”,请完善表之间关系的创建。
请截关系图并粘贴在此下面:SQL 语句为:(1)、Alter table学生表Add Constraint fk1 foreign key(班号)references班级表(班号)(2)、Alter table成绩表Add Constraint fk2 foreign key(学号)references学生表(学号)(3)、Alter table成绩表Add Constraint fk3 foreign key(课程号)references课程表(课程号)4、修改“学生表”,为学生表的“性别”列创建取值约束,约束条件为性别列的取值为“男”或“女”,约束名称为“性别取值约束”。
请写出SQL语句:Alter table学生表add constraint性别取值约束check( 性别in('男','女') )5、修改“成绩表”,将“成绩”列的数据类型修改为numeric,精度为6,小数位保留1位。
请写出SQL语句:Alter table成绩表alter column成绩numeric(6,1)6、为学生表的“姓名、班号”列建立一个非聚集组合索引“name_class”,按姓名的降序、班号升序排列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机练习:
1. 从xs_kc表中,查询学号为…020101‟学生的成绩状况,若全部90分以上显示“该学生成绩全部优秀!”若全部60分以上显示“该学生成绩全部合格!”否则显示“该学生有的成绩不合格!”并且要显示最低分。
(使用if,自行换为student操作)
2. 实现1---100之间的奇数和。
(使用书本上以外的方法)
3. 在xs_kc表中,学号为…020101‟学生的平均成绩如果小于75,则将该学生的每门成绩以5%的比例提高,当平均成绩大于等于75或者所有课程都及格时,终止操作。
(使用while,自行换为student 操作)
参考答案:
1、
Declare @verygood int
Select @verygood=(select min(成绩) From xs_kc Where 学号
='020101')
If @verygood >=90
Print '该学生成绩全部优秀!'
else
If @verygood >=60
Print '该学生成绩全部合格!'
else
print '存在不及格科目!'
Select @verygood as 最低分
Print '最低分:'+cast(@verygood as char(4))
或:
If (Select min(成绩) From xs_kc Where 学号='020101' )>=90 Print '该学生成绩全部优秀!'
else
If (Select min(成绩) From xs_kc Where 学号='020101' )>= 60 Print '该学生成绩全部合格!'
else
print '存在不及格科目!'
Select min(成绩) as 最低分From xs_kc Where 学号='020101' ————————————————————————————2、Declare @sum int
Declare @i int
Set @sum=0
Set @i=0
While @i>=0
Begin
set @i=@i+1
if @i>100
begin
print '0—100之间的奇数和:'+cast(@sum as char(10))
break
end
if @i%2!=0
begin
set @sum=@sum+@i
end
else
begin
continue
end
end
或:
declare @a int,@sum int
set @a=1
set @sum=0
while @a<=100
begin
set @sum=@sum+@a
set @a=@a+2
end
print '1-100奇数之和为:'+cast(@sum as char(4)) ————————————————————————————3、While (select avg(成绩) from xs_kc where 学号='020101')<75 begin
update xs_kc
set 成绩=成绩*1.05
where 学号='020101'
if (select min(成绩) from xs_kc where 学号='020101')>=60
break
end。