SQL_Server实用教程(第三版)实验4_数据库的查询和视图
- 格式:doc
- 大小:56.70 KB
- 文档页数:11
SQL Server 2000实用教程(第三版)作者:周力习题参考答案第1章SQL Server 数据库基础一、单项选择题1.A 2. C 3. B 4.B 5.D 6. C 7.A 8. C二、填空题1.数据之间的联系2.域完整性、参照完整性3.数据表中,不允许一个4.学号课程编号课程编号5.1:n (或n:1) n :m6.空值不应7.新的用户登录服务器已连接到服务器的用户继续使用三、简答题1.数据库是以一定的组织形式存放在计算机中的相关数据的集合。
数据库系统是指在计算机系统中引入数据库后的一个完整的应用系统。
包括数据库、数据库管理系统、应用程序以及用户等。
在大型数据库系统中,还专门设有数据库管理员(DBA)。
数据库管理系统是帮助用户建立、使用和管理数据库的计算机软件。
其功能包括数据定义、数据操作、数据库运行控制、数据库维护等。
2.唯一约束和主键约束的区别主要有以下几点:第一,设置主键约束的字段其值不允许为空(NULL),但设置唯一约束的字段无此要求。
第二,一个表只允许设置一个主键约束,但允许设置多个主键约束。
此外,在SQL Server 2000中,设置唯一约束和主键约束都需创建唯一索引。
默认情况下,主键约束产生聚集索引,而唯一约束产生非聚集索引(关于聚集索引和非聚集索引的概念将在第3章讨论)。
3.(见1.3.1节)第2章数据库的创建与管理一、单项选择题1.C、B 2. D、A 3. B 4.B、C 5.C 6. B D二、多项选择题1.1)2)3)4)6)2.1)2)4)8)三、填空题1.master tempdb model2.工具(T) F53.表格. sql4. 在新窗口中修改对象脚本新建5.ALTER DA TABASE REMOVE FILE6.数据文件或日志文件有大量的可用空间数据库增长的部分第3章数据表和索引一、单项选择题1.D 2. B、A、D 3. C 4.D 5.B 6.A 7. A B D 8. B 9. B 10. A 二、多项选择题1.1)3)4)5)7)2.3)4)5)6)三、填空题1.1 1 任意2.image sql_variant3.dicimal (7,2) numeric (7,2)4.timestamp5.全局变量局部临时表6.1 2497.索引页叶级1008.查询检索修改维护9. Alter table teacher add birthday smalldatetime null10. update course set c_score=c_score+1 where c_name=’数据库’四、简答题1.主键约束或唯一性约束,检查约束或规则,指定默认值或不允许字段为空等。
实验(四)数据库的视图操作实验一、实验目的和要求(1)掌握SQL Server中的视图创建向导和图表创建向导的使用方法;(2)加深对视图和SQL Server图表作用的理解。
(3)掌握数据库安全性的操作方法。
二、实验内容和原理1. 基本操作实验(1)在SQL Server企业管理器中调出Create View Wizard(创建图表向导),按下列Transact-SQL描述的视图定义,创建借阅_计算机图书视图。
CREATE VIEW 借阅_计算机图书AS SELECT 图书.*,借阅.*FROM 图书,借阅WHERE图书.编号=借阅.书号AND图书.类别=‘计算机’(2)在SQL server企业管理器中调出Create View Wizard(创建图表向导),完成在图书-读者数据库中建立一个图书_借阅图表操作。
要求该图表包括图书和借阅两个表,并包括图书与借阅之间的“图书.书号=借阅.书号”外码与被参照表之间的关联。
(3)查看上述实验结果。
如果结果有误,予以纠正。
2. 提高操作实验在学生-课程数据库中用Transact-SQL语句描述下列视图定义。
(1)从学生表中建立查询所有男(女)生信息的视图STU_SEX。
视图的列名为SNO、SNAME、SSEX和SAGE。
(2)从课程表中建立查询所有课程先修课信息的视图课程_PRE。
视图的列名为课程号、课程名称和先修课名称。
(3)从选修表中建立查询成绩大于等于80信息的视图STU_CJ1。
视图的列名为学号、课程号和成绩。
(4)从学生、选修和课程三个表建立查询学生选修情况的视图STU_CJ2。
视图的列名为姓名、课程名称和成绩。
(5)从学生、选修和课程三个表建立查询学生选修情况并且成绩小于80的视图STU_CJ3。
视图的列名为姓名、课程名称和成绩。
(6)利用Transact-SQL命令修改视图STU_SEX。
把视图的列名改为学号、姓名、性别和年龄,把加上“WITH CHECK OPTION”选项。
实验四SQLServer的视图、存储过程和触发器实验四 SQL Server的视图、存储过程和触发器一、实验目的本实验主要了解SQL Server视图、存储过程和触发器的基本概念和使用方法。
通过本实验,读者将掌握视图的创建、修改和删除的操作方法和T-SQL语句;学会在SSMS中创建、修改、执行和删除存储过程的操作及相关的T-SQL语句;掌握触发器的创建、修改和删除的操作方法和T-SQL语句。
二、实验环境●Microsoft SQL Server Managerment Studio●Book数据库三、实验内容1. 创建视图view_book1,使其包含预订数量最高的20%的教材信息。
要求显示教材代号(BookCode)、教材名称(BookName)、ISBN号(ISBNCode)和出版社名称(Publisher)。
2. 创建视图view_book2,查询预订了教材名中含有“程序”一词的教师姓名(T eacherName)和所在学院名称(AcadName)。
3. 创建视图view_book3,使其包含“学院名称(AcadName)”、“教师姓名(TeacherName)”、“预订书名(BookName)”、“是否领走(TakeAway)”。
4. 创建存储过程proc_book1,查询指定学院的教师预订教材的情况。
要求显示教材名称(T_ame)、教师姓名(T_erName)和教材数量(T_okNum+T_okNum)。
(1) 查询条件为:学院代码(2) 查询条件为:学院名称5. 创建存储过程proc_book2,查询指定教材的预订数量。
6. 创建添加教材信息的存储过程proc_book3。
7. 创建存储过程proc_book4,查询指定教材名称和出版社名称的教材所对应的教材代号和库存。
8. 创建触发器tri_book1,在对T_Teacher表进行插入、修改和删除记录时,都会自动显示表中的内容。
9. 创建触发器tri_book2,当修改T_Teacher表中的TeacherCode字段值时,该字段在T_BookOrder表中的对应值也作修改。
SQLServer实验指导第三版教学设计1. 简介SQLServer是一种关系型数据库管理系统,被广泛应用于各种大型企业和机构中。
本文主要介绍第三版SQLServer实验指导教学设计,用于指导学生在学习过程中更好地掌握SQLServer数据库管理系统的知识和技能。
2. 教学目标本次教学的主要目标是培养学生的SQLServer数据库管理系统相关知识和技能,具体目标如下:1.学习SQLServer数据库管理系统的基本概念和原理;2.掌握SQLServer数据库管理系统的基本操作方法;3.深入学习SQLServer数据库管理系统的常用操作技巧。
3. 教学内容本次教学主要包含以下内容:3.1 基本概念和原理1.数据库管理系统的概念和分类;2.SQLServer的概念和特点;3.SQLServer的体系结构和组成部分;4.SQLServer的数据库设计和规范。
3.2 基本操作方法1.SQLServer的安装和配置;2.SQLServer的管理工具和命令行操作;4.SQLServer的表操作和数据类型;5.SQLServer的数据查询和更新;6.SQLServer的事务管理和备份恢复。
3.3 常用操作技巧1.SQLServer的索引和性能优化;2.SQLServer的视图和存储过程;3.SQLServer的数据导入导出和复制;4.SQLServer的运维和安全管理。
4. 教学方法在教学中,我们采用以下方法进行教学:1.讲解:通过讲解的方式,向学生介绍SQLServer数据库管理系统的基本概念和原理,以及各种操作方法和技巧。
2.演示:通过演示的方式,向学生展示SQLServer数据库管理系统的各种操作方法和技巧,并进行实例演示。
3.实践:通过实践的方式,让学生在实际操作中,深入了解SQLServer数据库管理系统的各种操作方法和技巧。
5. 教学步骤本次教学的具体步骤如下:5.1 SQLServer数据库管理系统的基本概念和原理1.数据库管理系统的概念和分类;2.SQLServer的概念和特点;3.SQLServer的体系结构和组成部分;5.2 SQLServer数据库管理系统的基本操作方法1.SQLServer的安装和配置;2.SQLServer的管理工具和命令行操作;3.SQLServer的数据库创建和删除;4.SQLServer的表操作和数据类型;5.SQLServer的数据查询和更新;6.SQLServer的事务管理和备份恢复。
SQLServer实验指导第三版课程设计一、实验内容本实验旨在通过 SQLServer 数据库的实际操作,帮助学生掌握关系数据库的创建、查询、修改和删除等基础操作,并了解 SQLServer 的相关特性和配置。
二、实验环境本实验需要安装 SQLServer 数据库管理系统,并在该系统上创建相应的数据库和表格。
建议安装 SQLServer 2012 以上版本,并在操作系统上安装相应的Microsoft .NET Framework。
三、实验步骤3.1 数据库创建使用 SQLServer 数据库管理系统,创建名为 student 的新数据库。
其中,用到的语句如下:CREATE DATABASE student;3.2 数据表创建在创建好的 student 数据库中,创建名为 score 的新数据表。
其中,用到的语句如下:USE student;GOCREATE TABLE score (id INT PRIMARY KEY,name VARCHAR(50),score INT);3.3 数据插入向 score 表格中插入一些测试数据,供后续操作使用。
其中,用到的语句如下:INSERT INTO score VALUES (1, 'Kobe', 98);INSERT INTO score VALUES (2, 'Lebron', 95);INSERT INTO score VALUES (3, 'Jordan', 99);3.4 数据查询查询 score 表格中的所有数据,显示每个学生的姓名和分数。
其中,用到的语句如下:SELECT name, score FROM score;3.5 数据更新将 id 为 1 的学生的分数修改为 99 分。
其中,用到的语句如下:UPDATE score SET score = 99 WHERE id = 1;3.6 数据删除删除 id 为 2 的学生的记录。
SQLSERVER2008实用教程实验参考答案(实验4)实验4 数据库的查询和视图一、SELECT语句的基本使用1. 查询Employees表中所有数据2. 查询Employees表中指定字段数据3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和电话查询月收入高于2000元的员工号码查询1970年以后出生的员工的姓名和住址5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和电话,并将列标题显示为地址和电话查询Employees表中男雇员的姓名和出生日期,并将列标题显示为姓名和出生日期6. 使用使用CASE子句查询Employees表中员工的姓名和性别,要求Sex值为1时显示“男”,为0时显示“女”查询Employees表中员工的姓名、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
7. 使用SELECT语句进行简单计算计算每个雇员的实际收入8. 使用内置函数获得员工总数计算Salary表中员工月收入的平均数获得Employees表中最大的员工号码计算Salary表中所有员工的总支出查询财务部雇员的最高和最低实际收入9. 模糊查询找出所有姓王的雇员的部门号找出所有地址中含有“中山”的雇员的号码及部门号找出员工号码中倒数第二个数字为0的员工的姓名、地址和学历10. Between…And…和Or的使用找出收入在2000~3000元之间的雇员编号找出部门为“1”或“2”的雇员的编号11. 使用INTO子句,由源表创建新表由表Salary创建“SalaryNew”表,要求包括编号和收入,选择收入在1500元以上的雇员由表Employees创建“EmployeesNew”表,要求包括编号和姓名,选择所有男员工二、子查询的使用1. 查找在财务部工作的雇员情况2. 用子查询的方法查找所有收入在2500以下的雇员的情况3. 查找财务部年龄不低于研发部雇员年龄的雇员姓名4. 用子查询的方法查找研发部比所有财务部雇员收入都高的雇员的姓名5. 查找比所有财务部的雇员收入都高的雇员的姓名6. 用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的姓名三、连接查询的使用1. 查询每个雇员的情况及薪水的情况2. 查询每个雇员的情况及其工作部门的情况3. 使用内连接的方法查询名字为“王林”的雇员所在的部门4. 使用内连接的方法查找出不在财务部工作的所有雇员信息5. 使用外连接方法查找出所有员工的月收入6. 查找财务部收入在2000元以上的雇员姓名及其薪水详情7. 查询研发部在1976年以前出生的雇员姓名及其薪水详请四、聚合函数的使用1. 求财务部雇员的平均收入2. 查询财务部雇员的最高和最低收入3. 求财务部雇员的平均实际收入4. 查询财务部雇员的最高和最低实际收入5. 求财务部雇员的总人数6. 统计财务部收入在2500元以上的雇员人数五、GROUP BY、ORDER BY子句的使用1. 查找Employees表中男性和女性的人数2. 按部门列出在该部门工作的员工的人数3. 按员工的学历分组,排列出本科、大专、硕士的人数4. 查找员工数超过2的部门名称和雇员数量5. 按员工的工作年份分组,统计各个工作年份的人数,例如工作1年的多少人,工作2年的多少人6. 将雇员的情况按收入由低到高排列7. 将员工信息按出生时间从小到大排列8. 在ORDER BY 子句中使用子查询,查询员工姓名、性别和工龄信息,要求按实际收入从大到小排列六、视图的使用1. 创建视图(1)在数据库YGGL上创建视图Departments_View,视图包含Department表的全部列(2)创建视图Employees_Departments_View,视图包含员工号码、姓名、所在部门名称(3)创建视图Employees_Salary_View,视图包含员工号码、姓名和实际收入三列2. 查询视图从视图Employees_Salary_View中查询出姓名为“王林”的员工的实际收入3. 更新视图(1)向视图Departments_View中添加一条记录(‘6’,‘广告部’,‘广告业务’)执行完命令后,分别查看Departments_View和Department表中发生的变化(2)尝试向Employees_Departments_View中添加一条记录,看看会发生什么情况(3)尝试向Employees_Salary_View中添加一条记录,看看会发生什么情况(4)将视图Departments_View中,部门号为‘6’的部门名称修改为‘生产车间’(5)删除视图Departments_View中最新增加的的一条记录4. 删除视图Employees_Departments_View5. 在界面工具中操作视图一、SELECT语句的基本使用1. 查询Employees表中所有数据SELECT*FROM Employees;2. 查询Employees表中指定字段数据SELECT EmployeeID,Name,DepartmentID FROM Employees;3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行SELECT Distinct DepartmentID,Sex FROM Employees;4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和电话Select Address,PhoneNumber FROM Employees WHERE EmployeeID='000001';查询月收入高于2000元的员工号码SELECT EmployeeID FROM Salary WHERE InCome>2000;查询1970年以后出生的员工的姓名和住址SELECT Name,Address FROM Employees WHERE YEAR(Birthday)>'1970'; SELECT Name,Address FROM Employees WHERE Birthday>'1970';5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和电话,并将列标题显示为地址和电话SELECT Address AS地址,PhoneNumber AS电话FROM Employees;查询Employees表中男雇员的姓名和出生日期,并将列标题显示为姓名和出生日期SELECT Name AS姓名,Birthday AS出生日期FROM Employees WHERE Sex=1;6. 使用使用CASE子句查询Employees表中员工的姓名和性别,要求Sex值为1时显示“男”,为0时显示“女”SELECT Name AS姓名,CASEWHEN Sex=1 THEN'男'WHEN Sex=0 THEN'女'ENDAS性别FROM Employees;查询Employees表中员工的姓名、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
实验四数据库的查询和视图T4.1 数据库的查询1.目的与要求(1)掌握select语句的基本语法;(2)掌握子查询的表示(3)掌握连接查询的表示(4)掌握select语句的group by子句的作用和使用方法(5)掌握select语句的order by子句的作用和使用方法2 实验准备(1)了解SELECT语句的基本语法格式;(2)了解SELECT语句的执行方法;(3)了解子查询的表示方法;(4)了解连接查询的表示;(5)了解SELECT语句的GROUPBY子句的作用和使用方法;(6)了解SELECT语句的ORDERBY子句的作用;3实验内容SELECT语句的基本使用。
①对于实验2给出的数据库表结构,查询每个雇员的所有数据。
新建一个查询,在查询分析器中输入如下语句并执行:USEYGGLGOSELECT *FROM Employees【思考与练习】用SELECT语句查询Departments和Salary表中所有的数据信息。
用SELECT语句查询Employees表中每个雇员的地址和电话。
新建一个查询,在查询分析器中输入如下语句并执行:Use YGGLGOSELECT Address PhoneNumberFROM Employees【思考与练习】a.用SELECT语句查询Deparments和Salary表的一列或若干列。
b.查询Employees表中的部门号和性别,要求使用DISTINCT消除重复行。
c.查询EmployeeID为000001的雇员的地址和电话。
Use YGGLGOSELECT Address PhoneNumberFROM EmployeesWHERE EmployeeID=’000001’【思考与练习】a.查询月收入高于2000元的员工号码。
b.查询1970年以后出生的员工的姓名和住址。
c.查询所有财务部的员工的号码和姓名。
查询Employees表中女雇员的地址和电话,使用AS子句将结果中各列的标题分别指定为地址、电话。
SQLSERVER2008实用教程实验参考答案(实验4)word文本实验4 数据库的查询和视图一、SELECT语句的基本使用1. 查询Employees表中所有数据2. 查询Employees表中指定字段数据3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和电话查询月收入高于2000元的员工号码查询1970年以后出生的员工的姓名和住址5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和电话,并将列标题显示为地址和电话查询Employees表中男雇员的姓名和出生日期,并将列标题显示为姓名和出生日期6. 使用使用CASE子句查询Employees表中员工的姓名和性别,要求Sex值为1时显示“男”,为0时显示“女”查询Employees表中员工的姓名、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
7. 使用SELECT语句进行简单计算计算每个雇员的实际收入8. 使用内置函数获得员工总数计算Salary表中员工月收入的平均数获得Employees表中最大的员工号码计算Salary表中所有员工的总支出查询财务部雇员的最高和最低实际收入9. 模糊查询找出所有姓王的雇员的部门号找出所有地址中含有“中山”的雇员的号码及部门号找出员工号码中倒数第二个数字为0的员工的姓名、地址和学历10. Between…And…和Or的使用找出收入在2000~3000元之间的雇员编号找出部门为“1”或“2”的雇员的编号11. 使用INTO子句,由源表创建新表由表Salary创建“SalaryNew”表,要求包括编号和收入,选择收入在1500元以上的雇员由表Employees创建“EmployeesNew”表,要求包括编号和姓名,选择所有男员工二、子查询的使用1. 查找在财务部工作的雇员情况2. 用子查询的方法查找所有收入在2500以下的雇员的情况3. 查找财务部年龄不低于研发部雇员年龄的雇员姓名4. 用子查询的方法查找研发部比所有财务部雇员收入都高的雇员的姓名5. 查找比所有财务部的雇员收入都高的雇员的姓名6. 用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的姓名三、连接查询的使用1. 查询每个雇员的情况及薪水的情况2. 查询每个雇员的情况及其工作部门的情况3. 使用内连接的方法查询名字为“王林”的雇员所在的部门4. 使用内连接的方法查找出不在财务部工作的所有雇员信息5. 使用外连接方法查找出所有员工的月收入6. 查找财务部收入在2000元以上的雇员姓名及其薪水详情7. 查询研发部在1976年以前出生的雇员姓名及其薪水详请四、聚合函数的使用1. 求财务部雇员的平均收入2. 查询财务部雇员的最高和最低收入3. 求财务部雇员的平均实际收入4. 查询财务部雇员的最高和最低实际收入5. 求财务部雇员的总人数6. 统计财务部收入在2500元以上的雇员人数五、GROUP BY、ORDER BY子句的使用1. 查找Employees表中男性和女性的人数2. 按部门列出在该部门工作的员工的人数3. 按员工的学历分组,排列出本科、大专、硕士的人数4. 查找员工数超过2的部门名称和雇员数量5. 按员工的工作年份分组,统计各个工作年份的人数,例如工作1年的多少人,工作2年的多少人6. 将雇员的情况按收入由低到高排列7. 将员工信息按出生时间从小到大排列8. 在ORDER BY 子句中使用子查询,查询员工姓名、性别和工龄信息,要求按实际收入从大到小排列六、视图的使用1. 创建视图(1)在数据库YGGL上创建视图Departments_View,视图包含Department表的全部列(2)创建视图Employees_Departments_View,视图包含员工号码、姓名、所在部门名称(3)创建视图Employees_Salary_View,视图包含员工号码、姓名和实际收入三列2. 查询视图从视图Employees_Salary_View中查询出姓名为“王林”的员工的实际收入3. 更新视图(1)向视图Departments_View中添加一条记录(‘6’,‘广告部’,‘广告业务’)执行完命令后,分别查看Departments_View和Department表中发生的变化(2)尝试向Employees_Departments_View中添加一条记录,看看会发生什么情况(3)尝试向Employees_Salary_View中添加一条记录,看看会发生什么情况(4)将视图Departments_View中,部门号为‘6’的部门名称修改为‘生产车间’(5)删除视图Departments_View中最新增加的的一条记录4. 删除视图Employees_Departments_View5. 在界面工具中操作视图一、SELECT语句的基本使用1. 查询Employees表中所有数据SELECT*FROM Employees;2. 查询Employees表中指定字段数据SELECT EmployeeID,Name,DepartmentID FROM Employees;3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行SELECT Distinct DepartmentID,Sex FROM Employees;4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和电话Select Address,PhoneNumber FROM Employees WHERE EmployeeID='000001';查询月收入高于2000元的员工号码SELECT EmployeeID FROM Salary WHERE InCome>2000;查询1970年以后出生的员工的姓名和住址SELECT Name,Address FROM Employees WHERE YEAR(Birthday)>'1970'; SELECT Name,Address FROM Employees WHERE Birthday>'1970';5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和电话,并将列标题显示为地址和电话SELECT Address AS地址,PhoneNumber AS电话FROM Employees;查询Employees表中男雇员的姓名和出生日期,并将列标题显示为姓名和出生日期SELECT Name AS姓名,Birthday AS出生日期FROM Employees WHERE Sex=1;6. 使用使用CASE子句查询Employees表中员工的姓名和性别,要求Sex值为1时显示“男”,为0时显示“女”SELECT Name AS姓名,CASEWHEN Sex=1 THEN'男'WHEN Sex=0 THEN'女'ENDAS性别FROM Employees;查询Employees表中员工的姓名、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
SQLSERVER2008实用教程实验参考答案解析(实验4)实验4 数据库的查询和视图一、SELECT语句的基本使用1. 查询Employees表中所有数据2. 查询Employees表中指定字段数据3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和查询月收入高于2000元的员工查询1970年以后出生的员工的和住址5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和,并将列标题显示为地址和查询Employees表中男雇员的和出生日期,并将列标题显示为和出生日期6. 使用使用CASE子句查询Employees表中员工的和性别,要求Sex值为1时显示“男”,为0时显示“女”查询Employees表中员工的、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
7. 使用SELECT语句进行简单计算计算每个雇员的实际收入8. 使用置函数获得员工总数计算Salary表中员工月收入的平均数获得Employees表中最大的员工计算Salary表中所有员工的总支出查询财务部雇员的最高和最低实际收入9. 模糊查询找出所有姓王的雇员的部门号找出所有地址中含有“”的雇员的及部门号找出员工中倒数第二个数字为0的员工的、地址和学历10. Between…And…和Or的使用找出收入在2000~3000元之间的雇员编号找出部门为“1”或“2”的雇员的编号11. 使用INTO子句,由源表创建新表由表Salary创建“SalaryNew”表,要求包括编号和收入,选择收入在1500元以上的雇员由表Employees创建“EmployeesNew”表,要求包括编号和,选择所有男员工二、子查询的使用1. 查找在财务部工作的雇员情况2. 用子查询的方法查找所有收入在2500以下的雇员的情况3. 查找财务部年龄不低于研发部雇员年龄的雇员4. 用子查询的方法查找研发部比所有财务部雇员收入都高的雇员的5. 查找比所有财务部的雇员收入都高的雇员的6. 用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的三、连接查询的使用1. 查询每个雇员的情况及薪水的情况2. 查询每个雇员的情况及其工作部门的情况3. 使用连接的方法查询名字为“王林”的雇员所在的部门4. 使用连接的方法查找出不在财务部工作的所有雇员信息5. 使用外连接方法查找出所有员工的月收入6. 查找财务部收入在2000元以上的雇员及其薪水详情7. 查询研发部在1976年以前出生的雇员及其薪水详请四、聚合函数的使用1. 求财务部雇员的平均收入2. 查询财务部雇员的最高和最低收入3. 求财务部雇员的平均实际收入4. 查询财务部雇员的最高和最低实际收入5. 求财务部雇员的总人数6. 统计财务部收入在2500元以上的雇员人数五、GROUP BY、ORDER BY子句的使用1. 查找Employees表中男性和女性的人数2. 按部门列出在该部门工作的员工的人数3. 按员工的学历分组,排列出本科、大专、硕士的人数4. 查找员工数超过2的部门名称和雇员数量5. 按员工的工作年份分组,统计各个工作年份的人数,例如工作1年的多少人,工作2年的多少人6. 将雇员的情况按收入由低到高排列7. 将员工信息按出生时间从小到大排列8. 在ORDER BY 子句中使用子查询,查询员工、性别和工龄信息,要求按实际收入从大到小排列六、视图的使用1. 创建视图(1)在数据库YGGL上创建视图Departments_View,视图包含Department表的全部列(2)创建视图Employees_Departments_View,视图包含员工、、所在部门名称(3)创建视图Employees_Salary_View,视图包含员工、和实际收入三列2. 查询视图从视图Employees_Salary_View中查询出为“王林”的员工的实际收入3. 更新视图(1)向视图Departments_View中添加一条记录(‘6’,‘广告部’,‘广告业务’)执行完命令后,分别查看Departments_View和Department表中发生的变化(2)尝试向Employees_Departments_View中添加一条记录,看看会发生什么情况(3)尝试向Employees_Salary_View中添加一条记录,看看会发生什么情况(4)将视图Departments_View中,部门号为‘6’的部门名称修改为‘生产车间’(5)删除视图Departments_View中最新增加的的一条记录4. 删除视图Employees_Departments_View5. 在界面工具中操作视图一、SELECT语句的基本使用1. 查询Employees表中所有数据SELECT*FROM Employees;2. 查询Employees表中指定字段数据SELECT EmployeeID,Name,DepartmentID FROM Employees;3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行SELECT Distinct DepartmentID,Sex FROM Employees;4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和Select Address,PhoneNumber FROM Employees WHERE EmployeeID='000001';查询月收入高于2000元的员工SELECT EmployeeID FROM Salary WHERE InCome>2000;查询1970年以后出生的员工的和住址SELECT Name,Address FROM Employees WHERE YEAR(Birthday)>'1970';SELECT Name,Address FROM Employees WHERE Birthday>'1970';5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和,并将列标题显示为地址和SELECT Address AS地址,PhoneNumber AS FROM Employees;查询Employees表中男雇员的和出生日期,并将列标题显示为和出生日期SELECT Name AS,Birthday AS出生日期FROM Employees WHERE Sex=1;6. 使用使用CASE子句查询Employees表中员工的和性别,要求Sex值为1时显示“男”,为0时显示“女”SELECT Name AS,CASEWHEN Sex=1 THEN'男'WHEN Sex=0 THEN'女'ENDAS性别FROM Employees;查询Employees表中员工的、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
第4章数据库的查询和视图一、数据的关系运算:运算的对象和结果都是表(表达方式)包括:选择、投影、连接1.选择(selection):单目运算从行方面分割表记:σF(R)其中:F为条件表达式 R为表例:σF(XS),F为性别=‘男’Λ专业名=‘计算机’2.投影(projection):单目运算从列方向分割表记:ΠA(R)其中:A为列名列表;R为表例:Π姓名,专业名,总学分(XS)3.连接(join):多目运算记:R F S 其中:F为条件表达式;R、S为表①自然连接:R S,按两表的共同属性连接例:XS XS_KC? XS XS_KC KC②条件连接:R F S,两表按下条件连接例:上例中的条件F二、数据库查询使用select 语句实现表的关系运算,用符合条件的数据构成结果表语法:select <select_list>into new_table_nameform table_sourcewhere search_conditiongroup by group_by_expressionhaving search_conditionorder by order_expression [ASC/DESC] 1.选择列①选择表中的列:select列名,列名,……(*)from表名where 条件②在结果表中使用文字串(增强检索结果的可读性)select‘串’,列名,‘串’,列名,……from表名where条件③改变结果列标题(结果表更个性化,可读性强)select列名AS新列标,列名AS 新列标,……(或新列标=列名,新列标=列名,……)from表名where条件④结果表数据替换(使检索结果更能反映出有用信息)select新列标=case when条件1 then‘串’(表达式)when条件2 then‘串’(表达式)……else表达式endfrom 表名where 条件⑤结果表中显示列计算值select表达式,表达式,……from表名⑥消除结果集中的重复行select distinct列名,列名……⑦限制结果集返回行数select top n 列名,列名……2、选择行(用where条件过滤)(紧在from之后)①表达式比较:(比较运算符)比较的表达式之一或两个为NULL时,返回unknown,否则返回true/false②模式匹配:(like谓词)[谓词:返回逻辑值的运算符、关键字]字符串表达式1 [not] like字符串表达式2 [escape‘不匹配字符’](可以使用通配符进行匹配)匹配通配符:%:任意一串字符例:select * from xs where 姓名 like‘王%’_:任意一个字符例:select * from xs where 姓名 like‘王_’[]:指定范围,如[a-z]、[0-9]、[abcde]……[^]:指定不属于范围,如[^a-z]、[^0-9]、[^abcde]③范围比较:表达式[not] between 表达式1 AND表达式2注:表达式1<=表达式2,包括表达式1和2表达式IN(表达式1,表达式2,……,表达式N)④空值比较表达式is [not] NULL⑤contains 谓词:在表中指定字符串的搜索(精确、模糊、加权匹配)contains(列/*,‘匹配串’)注:先为要操作的表建立全文索引(第六章Create Index,企业管理器)⑥freetext 谓词:与contains相似,不如contains精确freetext(列/*,‘匹配串’)⑦子查询:用另一个查询结果做为where条件的一部分,可嵌套★ IN:判断某个值是否在子查询结果中,只能返回一列数据。
SQLServer实用教程第三版课程设计一、课程简介本课程是SQLServer实用教程第三版的课程设计部分,主要旨在加深学生对SQLServer数据库的理解和应用,提高其数据库操作和管理能力。
本课程设计重点围绕实际应用场景,从数据的建模、管理、维护等方面进行探讨,让学生掌握SQLServer数据库的实际应用技巧。
二、课程目标1.掌握SQLServer数据库的建模方法与实现;2.掌握SQLServer数据库的管理与维护方法;3.掌握SQL语句的基本语法和高级应用技巧;4.能够应用SQLServer数据库解决实际问题。
三、课程内容1. 数据库建模1.数据库设计原则2.数据库范式的理解与应用3.实体关系图的绘制与解读4.SQLServer数据库建表和创建视图2. 数据库管理1.数据库维护与备份2.数据库安全与权限设置3.索引与分区4.高可用性与故障恢复3. SQL语句基本语法与高级应用技巧1.SQL语句基本语法2.SQL语句的高级查询技巧3.SQL语句的优化4.存储过程和触发器的应用4. 实践案例1.学生选课系统的实现2.考试成绩管理系统的实现3.订单管理系统的实现四、课程要求本课程为选修课程,要求学生具有一定的SQLServer数据库基础知识以及编程经验。
1.学生需要认真听课并完成作业;2.学生需要按时提交设计报告和代码实现;3.学生需要参与课程实践,学以致用;4.学生需要完成期末项目并演示。
五、考核方式和评分标准1.课堂表现(出勤、提问、参与度)占30%;2.设计报告和代码实现占30%;3.期末项目演示占40%;4.考核评分标准包括设计思路、技术实现、代码质量和项目实用价值。
六、参考资料1.SQL Server数据库完全自学手册;2.SQL Server 专业数据管理与开发;3.SQL Server实用教程第三版。
实验四视图和索引
一、实验目的
使学生掌握SQL SERVER中的视图创建、查看、修改和删除的方法;索引的创建和删除方法
二、实验内容
在学生-课程数据库中
(1)用图形工具和T-SQL两种方法创建视图,取名为view_stu_grade,要求查看学生的学号,姓名,课程名和成绩。
(2)若发现视图定义的结构不能很好满足要求,还可以对它进行修改。
(3)删除视图
(4)尝试分别为student表的每一个属性列添加一个惟一索引,将出现的现象和原因分析一下。
(5)删除索引
三、实验过程
要求个人填写(要求有文字描述和适当的图片辅助说明)
1.1 图形工具创建视图:
1.2T_SQL创建视图:
2.1 视图输出:
修改:
修改后:
查看视图:
3 删除视图:
4 创建索引:
查看索引:
5 删除索引:
四、实验总结
这次实验主要是对SQL server 2000的视图和索引功能,这两项都跟查询有密切的关系。
不同创建视图的方法,视图创建后的查看、修改、删除等操作,根据不同的需要来调整视图的显示。
索引创建,并在创建过程中体会其创建的原则,索引的查看、删除等操作。
这次实验使我对SQL server2000的查询系统有了进一步的了解,对使用SQL server2000不同功能进行更有效率的查询有了更深的了解。
SQL Server数据库教程(第3版)(SQL Server 2012)源代码使用说明1. 学生成绩数据库stsc该数据库是贯穿全书的重要数据库,参见本书346页“附录B学生成绩数据库stsc的表结构和样本数据”。
stsc数据库有student、course、score、teacher、lecture 5个表,这5个表的表结构和样本数据都在本书第346页至第348页的附录B中。
2. 创建数据库stsc、创建表和插入样本数据(1)启动SQL Server Management Studio,屏幕出现SQL Server Management Studio窗口,单击窗口左上方工具栏“新建查询”按钮,右边出现查询分析器编辑窗口。
(2)打开“学生成绩数据库stsc建库建表和插入样本数据源代码”文件→选中全部代码→复制,在查询分析器编辑窗口中光标闪烁处右单击,在弹出的菜单中选择“粘贴”,单击“执行”按钮,约数秒钟,就可建好数据库stsc和上述5个表及插入样本数据。
3. 例题源代码的操作(1)启动SQL Server Management Studio,屏幕出现SQL Server Management Studio窗口,单击窗口左上方工具栏“新建查询”按钮,右边出现查询分析器编辑窗口。
(2)在"SQL Server数据库教程(第3版)(SQL Server 2012)例题源代码”中,有各章例题源代码。
打开所需章的例题源代码文件→选中指定例题的代码→复制,在查询分析器编辑窗口中光标闪烁处右单击,在弹出的菜单中选择“粘贴”,单击“执行”按钮,就可得到该例题的运行结果。
4. 商店实验数据库storeexpm建库建表和插入样本数据该数据库在实验中多次用到。
storeexpm数据库包含5个表:部门表DeptInfo、员工表EmplInfo、订单表OrderInfo、订单明细表DetailInfo、商品表GoodsInfo。
实验四数据库的查询和视图T4.1 数据库的查询1.目的与要求(1)掌握select语句的基本语法;(2)掌握子查询的表示(3)掌握连接查询的表示(4)掌握select语句的group by子句的作用和使用方法(5)掌握select语句的order by子句的作用和使用方法2 实验准备(1)了解SELECT语句的基本语法格式;(2)了解SELECT语句的执行方法;(3)了解子查询的表示方法;(4)了解连接查询的表示;(5)了解SELECT语句的GROUPBY子句的作用和使用方法;(6)了解SELECT语句的ORDERBY子句的作用;3实验内容SELECT语句的基本使用。
①对于实验2给出的数据库表结构,查询每个雇员的所有数据。
新建一个查询,在查询分析器中输入如下语句并执行:USEYGGLGOSELECT *FROM Employees【思考与练习】用SELECT语句查询Departments和Salary表中所有的数据信息。
用SELECT语句查询Employees表中每个雇员的地址和电话。
新建一个查询,在查询分析器中输入如下语句并执行:Use YGGLGOSELECT Address PhoneNumberFROM Employees【思考与练习】a.用SELECT语句查询Deparments和Salary表的一列或若干列。
b.查询Employees表中的部门号和性别,要求使用DISTINCT消除重复行。
c.查询EmployeeID为000001的雇员的地址和电话。
Use YGGLGOSELECT Address PhoneNumberFROM EmployeesWHERE EmployeeID=’000001’【思考与练习】a.查询月收入高于2000元的员工号码。
b.查询1970年以后出生的员工的姓名和住址。
c.查询所有财务部的员工的号码和姓名。
查询Employees表中女雇员的地址和电话,使用AS子句将结果中各列的标题分别指定为地址、电话。
USE YGGLGOSELECT Address AS 地址,PhoneNumber AS 电话FROM EmployeesWHERE Sex=0【思考与练习】查询Employees表中男员工的姓名和出生日期,要求将各列标题用中文标示。
⑤查询Employees表中员工的姓名和性别,要求SEX值为时显示为“男”,为0时显示为“女”。
SELECTNameAS姓名,CASEWHENSex=1 THEN男WHENSex=1 THEN女END AS性别FROMEmployees【思考与练习】查询Employees员工的姓名、住址和收入水平,2000元以下显示低收入,2000-3000元显示为中等收入,3000元以上显示为高收入。
⑥计算每个雇员的实际收入USE YGGLGOSELECT EployeeID,实际收入=income-OutComeFROMSalary【思考与练习】使用SELECT语句进行简单的计算。
⑦获得员工总数。
SELECTCOUNT(*)FROMSalary【思考与练习】a.计算salary表中员工月收入的平均数。
b.获得Employees表中最大员工号码。
c.计算Salary表中所有员工的总支出。
d.查询财务部雇员的最高和最低实际收入。
⑧找出所有姓王的雇员的部门号。
USE YGGLGOSELECTDepartmentIDFROMEmployeesWHERENameLIKE王%【思考与练习】a.找出所有其地址中含有“中山”的雇员的号码及部门.b.查找员工号码倒数第二个数字为0的员工的姓名、地址和学历。
⑨找出所有收入在2000-3000元之间的员工号码。
SELECT EmployeeIDfrom Salarywhere InCome between 2000 and 3000【思考与练习】找出所有在部门“1”或“2”工作的雇员的号码。
注意:了解在SELECT语句中LIKE、BETWEEN…AND、IN、NOT以及CONTAIN谓词的作用。
⑩使用into子句,由表Salary创建“收入在1500元以上的员工”表,包括编号和收入USE YGGLGOselect EmployeeID as 编号,Income as 收入into 收入在1500元以上的员工from Salarywhere InCome>1500【思考与练习】使用Into子句,由表Employees创建“男员工”表,包括编号和姓名。
(1)子查询的使用。
①查找在财务部工作的雇员的情况USE YGGLGOselect *from Employeeswhere DepartmentID=(select DepartmentID from Departmentswhere DepartmentName='财务部')【思考与练习】用子查询的方法查找所有收入在2500元以下的雇员的情况②查找财务部年龄不低于研发部雇员年龄的雇员的姓名。
USE YGGLGOselect Namefrom Employeeswhere DepartmentID in(select DepartmentIDfrom Departmentswhere DepartmentName='财务部')andBirthday!>all(select Birthdayfrom Employeeswhere DepartmentID in(select DepartmentID from Departmentswhere DepartmentName='研发部'))【思考与练习】用子查询的方法查找研发部比所有财务部雇员收入都高的雇员的姓名。
③查找比所有财务部的雇员收入都高的雇员的姓名。
USE YGGLGOSelect Name from Employeeswhere EmployeeID in(select EmployeeID from Salarywhere InCome >all(select InCome from Salarywhere EmployeeID in(select EmployeeID from Employeeswhere DepartmentID=(select DepartmentID from Departmentswhere DepartmentName='财务部'))))【思考与练习】用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的姓名。
(2)连接查询的使用。
①查询每个雇员的情况及其薪水的情况。
USE YGGLGOselect Employees.*,Salary.*from Employees,Salarywhere Employees.EmployeeID=Salary.EmployeeID【思考与练习】查询每个雇员的情况及其工作部门的情况。
②使用内连接的方法查询名字为“王林”的员工所在的部门select DepartmentName from DepartmentsJoin Employees on Departments.DepartmentID=Employees.DepartmentIDwhere ='王林'【思考与练习】a.使用内连接的方法查找出不在财务部工作的所有员工信息。
b.使用外连接方法查找出所有员工的月收入。
②查找财务部收入在2000元以上的雇员姓名及其薪水详情。
新建一个查询,在查询分析器中输入如下语句并执行。
select Name,Income,Outcomefrom Employees,Salary,Departmentswhere Employees.EmployeeID=Salary.EmployeeIDand Employees.DepartmentID=Departments.DepartmentIDand DepartmentName='财务部'and Income>2000【思考与练习】查询研发部在1976以前出生的雇员姓名及其薪水详情。
(2)聚合函数的使用。
1.求财务部雇员的平均收入新建一个查询,在查询分析器中输入如下语句并执行。
USE YGGLGOselect AVG(Income) as '财务部平均收入'from Salarywhere EmployeeID in(select EmployeeIDfrom Employeeswhere DepartmentID=(select DepartmentIDfrom Departmentswhere DepartmentName='财务部'))【思考与练习】查询财务部雇员的最高和最低收入。
3.求财务部的平均实际收入新建一个查询,在查询分析其中输入如下语句并执行。
USE YGGLGOselect avg(Income-Outcome) as '财务部平均实际收入' from Salarywhere EmployeeID in(select EmployeeIDfrom Employeeswhere DepartmentID=(select DepartmentIDfrom Departmentswhere DepartmentName='财务部'))【思考与练习】查询财务部雇员的最高和最低实际收入。
③求财务部雇员的总人数select COUNT(EmployeeID) from Employeeswhere DepartmentID=(select DepartmentID from Departmentswhere DepartmentName='财务部')【思考与练习】统计财务部收入在2500以上的雇员的人数。
(5)GROUP BY、ORDER BY子句的使用:①查找Employees表中男性和女性的人数select Sex,COUNT(Sex)from Employeesgroup by Sex;【思考与练习】a.按部门列出在该部门工作的员工的人数。
b.按员工的学历分组,排列出本科、大专和硕士的人数。
②查找员工数超过2的部门名称和员工数量。
select Employees.DepartmentID,COUNT (*) as '人数'from Employees,DepartmentsWHERE Employees.DepartmentID=Departments.DepartmentIDgroup by Employees.DepartmentIDhaving COUNT(*)>2【思考与练习】按员工的工作年份分组,统计各个工作年份的人数,例如,工作一年的多少人,工作两年的多少人。