T-SQL语句练习题
T-SQL测试题
1) 在SQL Server 中,为数据库表建立索引能够()。
A. 防止非法的删除操作B. 防止非法的插入操作C. 提高查询性能D. 节约数据库的磁盘空间2) 在SQL SERVER中,创建一个表使用()语句。
A. INSERTB. DROPC. CREATED. ALERT3) 在SQL SERVER中,下面关于视图说法错误的是()。
A. 对查询执行的大多数操作也可以在视图上进行B. 使用视图可以增加数据库的安全性C. 不能利用视图增加,删除,修改数据库中的数据D. 视图使用户更灵活的访问所需要的数据4) 在数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的()阶段。
A. 需求分析B. 概要设计C. 逻辑设计D. 物理设计5) 在SQL Server 数据库中,如果强制要求grades表中的学员必须是Students表中存在的学员,以下描述正确的是()。
A. 在grades表中创建外键约束B. 在grades表中创建检查约束C. 在grades表中创建唯一约束D. 在grades表中创建默认约束6) 在SQL Server 数据库中,下面的T-SQL语句段执行第三句时出现错误,数据库中的内容修改情况是()。
BEGIN TRANSACTIONupdate Account set balance=7800 where id=1update Account set balance=9000 where id=1IF @@error <> 0ROLLBACK TRANSACTIONELSECOMMIT TRANSACTIONA. Account表中id为1的记录中balance字段的值被修改为7800B. Account表中id为1的记录中balance字段的值被修改为9000C. Account表中id为1的记录中balance字段的值不变D. 不可能发生这种情况7) 在SQL Server 数据库中,有关下列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练习
任务1:请使用T-SQL编写一个程序,定义两个整型变量,使用set 和select分别将其赋值5和-3,并将这两个变量进行加法运算,最后要求分别使用select和print输出计算结果。
(参考Page163,例9.2)请将你的T-SQL程序代码复制到这里:
任务2、请定义字符型变量,用于存放“中华人民共和国PRC”,要求分别使用合适的字符串函数,完成下列要求:(参考Page163,例
9.3)
①统计其字符个数(参考Page175-len())
②返回字符串右边开始的3个字符(参考Page176-right())
③将大写字母转换为小写字母(参考Page176-lower())
请将你的T-SQL程序代码复制到这里:
任务3、请使用数学函数PI(),计算一个半径为5的圆的周长和面积。
(参考Page177-PI())
请将你的T-SQL程序代码复制到这里:
任务4、请调整你的windows系统的时间至准确时间,然后使用日期函数,分别统计香港回归日(1997-07-1)和澳门回归日(1999-12-20)距离今天的年数、月数、天数?(参考Page178-例9.28)
请将你的T-SQL程序代码复制到这里:
任务5、请编写一个简单的循环程序,计算100的阶乘。
(参考Page171-例9.17)
请将你的T-SQL程序代码复制到这里:。
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语句练习题
一、根据要求用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语句完成如下操作。
数据库期末复习_T-SQL语句
T-SQL语句应用实例【例1-1】查询XSCJ数据库中所有学生基本信息。
使用查询分析器实现这个查询的具体步骤如下:①依照本章 1.3.1节中介绍的方法登录到服务器,打开查询分析器窗口,如图1-26所示。
②在查询编辑窗口中用户可以输入SQL语句如下:USE XSCJGOSELECT * FROM 学生基本信息表 / 视图GO(去掉/ 视图,完成)【例1-2】查询学生成绩信息。
在查询分析器中运行如下命令:USE XSCJGOSELECT * FROM 成绩表GO(完成)【例1-2】查询pubs示例数据库中authors表的信息。
USE pubsGOSELECT * FROM authorsGO(用上题)【例2-3】计算XSCJ数据库中“学生基本信息表”的总行数。
USE XSCJGOSELECT COUNT(*) AS '学生总人数' FROM 学生基本信息表GO(完成)【例2-5】在成绩表中查询课程编号为003的课程的最高分和最低分。
USE XSCJGOSELECT MAX(成绩) AS '最高分',MIN(成绩) AS '最低分'FROM 成绩表WHERE 课程编号='003'GO(完成)【例2-14】显示XSCJ数据库信息。
sp_helpdb XSCJsp_helptext 视图名或表名sp_helpindex 表名(can not)【例2-15】创建一个名称为somename的数据库,利用sp_renamedb存储过程将该数据库重命名为newnameCREATE DATABASE somenameGOsp_renamedb 'somename','newname'GO(完成)【例2-16】显示超级用户dbo的用户信息。
sp_helpuser dbosp_help(can not)【例2-17】在系统中添加一个名为test、密码为1234的登录帐号。
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语言部分例题【例4-13】创建一个只有一个主数据文件SchoolTest(不指定该文件的大小)的数据库。
CREATE DATABASE SchoolTestON(NAME=SchoolTest_Data,FILENAME='D:\SchoolTest_Data.MDF')【例4-14】建立学生表T_StudentTest。
CREATE TABLE T_StudentTest (StudentCode CHAR(8) NOT NULL UNIQUE, /*唯一性约束,不许取空值*/StudentName V ARCHAR(16) NOT NULL,Sex CHAR(2) NOT NULL,LiveInDorm BIT DEFAULT 1, /*默认值为1*/Constraint StudentPK Primary Key(StudentCode) /* StudentCode为主键约束*/ )【例4-15】建立成绩表T_GradeTest。
CREATE TABLE T_GradeTest(StudentCode CHAR(8) NOT NULL , /*不许取空值*/Grade REAL DEFAULT 0 , /*默认值为0*/Constraint GradeCK Check(Grade>=0 AND Grade<=100)/*检查约束0>= Grade<=100*/)【例4-16】删除T_GradeTest表DROP TABLE T_GradeTest【例4-17】在T_Student表的姓名(StudentName)字段上建立升序索引。
CREATE INDEX NameIndex on T_Student (StudentName)【例4-18】在T_Student表的学号(StudentCode)字段上建立唯一降序索引。
CREATE UNIQUE INDEX StudentCodeIndex on T_Student (StudentCode DESC)【例4-19】删除T_Student表中索引名称分别为NameIndex和StudentCodeIndex的两个索引。
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语句完成创建与管理数据库操作练习
·创建数据库语句语法:CREATE DATABASE数据库名ﻩ [ON [PRIMARY]{(NAME=数据文件得逻辑名称,‘数据文件得路径与文件名’, (要包含文件扩展名)ﻩSIZE=数据文件得初始容量,(不能小于Model数据库得初始文件大小)MAXSIZE=数据文件得最大容量,数据文件得增长量)}[,…n]ﻩLOG ONﻩ{(NAME=事务日志文件得逻辑名称,'事务日志文件得物理名称’,ﻩSIZE=事务日志文件得初始容量,MAXSIZE=事务日志文件得最大容量,ﻩ事务日志文件得增长量)}[,…n]]判断同名得数据库就是否存在:IF EXISTS (SELECT *FROM master、、sysdatabasesWHEREname=’数据库名’)DROP DATABASE 数据库名GO修改数据库操作语句:ALTER DATABASE 数据库名{[addfile 文件描述][to 文件组名]新增数据文件|[add log file文件描述]新增日志文件|[remove file逻辑文件名]删除数据库文件|[add文件组名]新增文件组|[remove文件组名]删除文件组|[modify file 文件修改内容描述] 修改数据文件属性}查瞧数据库文件属性EXEC sp_helpfile 系统存储过程,用于查瞧数据库有哪些文件及文件属性.删除数据库Dropdatabase 数据库名称分离数据库EXEC Sp_detach_db 数据库名称附加数据库CREATE DATABASE 数据库名ON PRIMARY(’')说明:附加数据库只需指定数据库得主数据文件。
FOR ATTACH如果移动过数据库文件,则需要指出所有移动过得文件。
用存储过程也可以附加数据库: sp_attach_db数据库名,'’创建数据库例:create database pany on primary(name=pany_data,’d:\mssq17\data\pany、mdf', size=10,maxsize=unlimited,)log on(name=pany_log,'d:\mssq17\data\pany、ldf', size=1,maxsize=5,)创建一个指定多个数据文件与日志文件得数据库create database employees onprimary(name=employee1,'d:\mssq17\data\employee1、mdf’,size=10,maxsize=unlimited,),(name=employee2,’d:\mssq17\data\employee2、mdf’size=20,maxsize=100,)log on(name=employeelog1,’d:\mssq17\data\employee1、ldf',size=10,maxsize=50,),(name=employeelog2,'d:\mssq17\data\employee2、ldf'size=10,maxsize=50,)修改数据库例:1、增大数据库文件alter database 产品数据库Modify ’产品数据库_log',size=3)将产品数据库得日志文件得初始值增加到3MB2、压缩数据库exec sp_dboption’数据库名’,’auto shrink',’true’dbcc shrinkfile('数据库名_data’,6)3、修改数据库结构alterdatabase employees add data1alter database employeesadd file(name=employee3,’d:\employee3、ndf’,size=1,maxsize=50,),(name=employee4,'d:\employee3、ndf’,size=2,maxsize=50,)todata1alter databaseemployeees add log file(name=employeelog3,’d:\employeelog3、ldf', size=1,maxsize=50,)4、删除数据库drop database datbase_name[1,、、、n]练习:建议选择合适得模板来创建用T-SQL语句完成创建与管理数据库操作练习一:1、为学生管理系统创建后台数据库:(1)数据库名student。
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)产品。
sql复习选择题
DECLARE @databaseName VARCHAR(600)
SET ___________ = 'orders'
_________@databaseName = 'northwind'
EXECUTE('use ' + @databaseName + ' select * from ' + @tableName)
IF @id % 2 = 0 CONTINUE
SELECT @name = BookTitle FROM Book WHERE BookID = @id
IF @@ROWCOUNT = 0
BEGIN
PRINT '***The End***'
BREAK
END
PRINT CAST(@ID AS CHAR(2)) + '--' + @name
C. tinyint
D. decimal(3,0)
7. 一个数据库中的用户定义数据类型能够用于同一个服务器上的另一个数据库中吗?
A.可以 B.不可以
8.订单表Orders的列OrderID的类型是小整型(smallint),根据业务的发展需要改为整型(integer),应该使用下面的哪条语句?
insert into Database1 values(2,'bb','45464')
create table Database2( sno int ,sname char(10),telnum char(8))
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语句创建员工工资信息表。
T-SQL_面试题(含建表语句)
2. 取某个序列的当前值的PL/SQL语句怎么写?
答:CONNECT
6. IMPORT和SQL*LOADER这2个工具的不同点?
答:这两个ORACLE工具都是用来将数据导入数据库的。
区别是:IMPORT工具只能处理由另一个ORACLE工具EXPORT生成的数据。而SQL*LOADER可以导入不同的ASCII格式的数据源。
7.解释冷备份和热备份的不同点以及各自的优点?
3.4.3 第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2
的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
14.取当前系统时间点日期(不包括年月)的Sห้องสมุดไป่ตู้L写法是怎样的?
答:Select substr (to_char(sysdate,’YYYYMMDDh24hh:MM:SS’),5) from dual;
15.返回大于等于N的最小整数值?
答:select ceil(N) from dual;
第6章 T-SQL编程与应用+习题
第6章T-SQL编程与应用6.1T-SQL语言基础6.1.1T-SQL语言的编程功能1.基本功能支持ANSI SQL-92标准:DDL数据定义,DML数据操纵,DCL数据控制,DD数据字典2.扩展功能加入程序流程控制结构加入局部变量,系统变量等6.1.2标识符1.标识符分类常规标识符Regular identifer(严格遵守标识符格式规则)界定标识符Delimited identifer(引号’或方括号[])2.标识符格式规则SQL server 7.0以前的版本,标识符长度限制在30个字符以内。
SQL server2000的标识符:1~128个字符;临时表名1~116个字符。
标识符的第一个字符必须是:大、小写字母、下划线、@、#。
其中,@和#在TSQL中有专门的含义。
接下来的字符必须是符合Unicode2.0(统一码)标准的字母,或者是十进制数字,或是特殊字符@, #, _, $。
标识符不能与任何SQL Server保留字匹配。
标识符不能包含空格,或别的特殊字符。
不符合规则的标识符必须加以界定(双引号””或方括号[])注意:数据库名、表名必须符合标识符规范。
3.对象命名规则所有数据库对象的引用由下面四部分构成:server_name.[database_name].[schema_name].object_name| database_name.[schema_name].object_name| schema_name.object_name| object_name说明:server_name指定链接的服务器名称或远程服务器名称。
database_name如果对象驻留在 SQL Server 的本地实例中,则指定 SQL Server 数据库的名称。
如果对象在链接服务器中,则 database_name 将指定 OLE DB 目录。
schema_name如果对象在 SQL Server 数据库中,则指定包含对象的架构的名称。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、根据要求用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、按年龄由大到小显示学生的姓名和班级。
select 姓名,班级from 学生order by 出生年月2、查询周悦含同学所有课程的平均分。
select avg(成绩) from 学生,成绩where 学生.学号=成绩.学号and 姓名='周悦含'3、把成绩表中所有不及格的分数都改为40分。
update 成绩set 成绩=40where 成绩<604、创建一个视图,确切的字段名是:学生姓名,课程名称,分数,其中的记录不包括成绩不及格的学生。
create view v01(学生姓名,课程名称,分数)asselect 姓名,课程名称,成绩from 学生,课程,成绩where 学生.学号=成绩.学号and 课程.课程编号=成绩.课程编号and 学生.学号not in(select 学号from 成绩where 成绩<60)5、创建一个触发器,规定学生不能转班级,即不能修改学生表的班级字段的值。
create trigger tr01on 学生for updateasif update(班级)beginrollback tranend一、根据要求用T-SQL语句创建数据库和表。
创建数据库“英才大学学生管理”。
分别创建三个表,具体的表名、字段名如下:系(系编号,系名称,系主任,班级个数) 其中系名称字段非空班级(班级编号,班级名称,班级人数,班长姓名,专业,系编号) 其中班级名称字段唯一值约束学生(学号, 姓名,性别,出生年月,籍贯,班级编号) 其中性别字段只能为“男”或“女”带下划线的字段为主键,表之间的外键关联参考下图,各字段的数据类型应尽量合理。
CREATE DATABASE 英才大学学生管理create table 系(系编号char(4) primary key,系名称char(20) not null,系主任char(6),班级个数smallint,)create table 班级(班级编号char(8) primary key,班级名称char(12) unique,班级人数smallint,班长姓名char(6),专业char(20),系编号char(4) references 系(系编号))create table 学生(学号char(6) primary key,姓名char(6),性别char(2) check(性别='男' or 性别='女'), 出生年月datetime,籍贯varchar(50),班级编号char(8) references 班级(班级编号))二、根据T-SQL语句写出执行结果对上题所创建的表添加记录后如图所示,请详细写出下面的SQL语句的执行结果。
1、select * from 系where 班级个数between 14 and 172、select 班长姓名from 班级where 班级人数<26 or 专业='计算机网络技术'3、select 姓名,系名称from 学生,班级,系where 学生.班级编号=班级.班级编号and 班级.系编号=系.系编号and 籍贯='山东'4、select sum(班级个数) as 班级数from 系5、select 籍贯,count(*) as 人数from 学生,班级where 学生.班级编号=班级.班级编号and 班级名称='网ZG092' group by 籍贯三、对第一题中的表用T-SQL语句完成如下操作。
1、在班级表中查询班级人数最多的班级名称和人数。
select 班级名称,班级人数from 班级where 班级人数= (select max(班级人数) from 班级)2、查询姓王的学生的姓名和所在班级。
select 姓名,班级名称from 学生,班级where 学生.班级编号= 班级.班级编号and 姓名like'王%'3、在班级表中删除系部是“管理系”的记录。
delete 班级where 系编号=(select 系编号from 系where 系名称='管理系') 4、显示比管理系班级人数最少的班级的人数还少的班级名称和专业。
select 班级名称,专业from 班级where 班级人数< all(select 班级人数from 班级,系where 班级.系编号=系.系编号and 系名称='管理系')5、为系表创建一个触发器,实现一次最多只能删除2条记录。
create trigger tr01on 系for deleteasif (select count(*) from deleted )>2beginrollback tranend一、根据要求用T-SQL语句创建数据库和表。
创建数据库“英才大学教师管理”。
分别创建三个表,具体的表名、字段名如下:系(系编号,系名称,系主任,教研室个数) 其中系名称字段非空教研室(教研室编号,教研室名称,教师人数,系编号)教师(教师编号,姓名,性别,职称,教研室编号) 其中性别字段只能为“男”或“女”带下划线的字段为主键,表之间的外键关联参考下图,各字段的数据类型应尽量合理。
CREATE DATABASE 英才大学教师管理create table 系(系编号char(4) primary key,系名称char(20) not null,系主任char(6),教研室个数smallint,)create table 教研室(教研室编号char(6) primary key,教研室名称char(20),教师人数smallint,系编号char(4) references 系(系编号))create table 教师(教师编号char(7) primary key,姓名char(6),性别char(2) check(性别='男' or 性别='女'),职称char(10),教研室编号char(6) references 教研室(教研室编号))二、根据T-SQL语句写出执行结果对上题所创建的表添加记录后如图所示,请详细写出下面的SQL语句的执行结果。
1、select * from 系where 教研室个数<42、select 姓名,职称from 教师where 职称='助教' or 性别='女'3、select 姓名as 教师姓名from 教研室,教师where 教研室.教研室编号=教师.教研室编号and 教研室名称='软件教研室'4、select top 2 教研室名称from 教研室order by 教师人数desc5、select 职称, count(*)as 人数from 教师group by 职称having 职称not like '%教授'三、对第二题中的表用T-SQL语句完成如下操作。
1、查询全部男教师的教师编号、姓名和职称。
select 教师编号,姓名,职称from 教师where 性别='男'2、通过教研室表查询信息工程系下的教研室的教师总数。
select sum(教师人数)from 教研室where 系编号=(select 系编号from 系where 系名称='信息工程系') 3、删除教研室数最少的系部。
delete from 系where 教研室个数=(select min(教研室个数) from 系)4、创建一个视图,包括教师姓名、性别、职称、教研室四个字段。
然后利用该视图查询硬件教研室的教师姓名和职称。
create view v01asselect 姓名,性别,职称,教研室名称from 教师,教研室where 教师.教研室编号=教研室.教研室编号select 姓名,职称from v01where 教研室名称='硬件教研室'5、创建一个存储过程,当输入一个系名称时,能显示该系所有的教师姓名。
并写出存储过程的执行语句。
create proc p01 @系编号char(4)asselect 姓名from 教师,教研室where 教师.教研室编号=教研室.教研室编号and 系编号= @系编号exec p01 '1103'。