SQLSERVER2008实用教程实验参考答案(实验4)
数据库实验指导—SQL_Server_2008

目录目录 (2)实验1 SQL Server的安装及管理工具的使用 (3)实验2 交互式SQL (4)实验3 数据完整性和安全性管理 (16)实验4 触发器和存储过程实验 (26)实验5 数据库备份与恢复 (30)实验6 数据库设计综合应用 (31)实验1 SQL Server的安装及管理工具的使用一、实验目的1、通过对某个商用数据库管理系统的使用,了解DBMS的工作原理和系统构架。
在此推荐数据库管理系统SQL Server 2005,该系统已经在机房FTP上。
你也可以从微软官方网站上下载该系统。
2、熟悉对DBMS的操作二、实验内容1、根据安装文件的说明安装数据库管理系统。
在安装过程中记录安装的选择,并且对所作的选择进行思考,为何要进行这样的配置,对今后运行数据库管理系统会有什么影响。
2、学会启动和停止数据库服务,思考可以用哪些方式来完成启动和停止。
3、掌握管理工具的使用(1)SQL Server Management Studio的使用➢连接服务器的方法➢查询编辑器的使用(2)配置管理器的使用4、了解数据库系统的逻辑组件:它们主要是数据库对象,包括基本表、视图、触发器、存储过程、约束等。
今后将学习如何操作这些数据库对象。
三、实验报告要求1、给出安装过程中出现的错误及解决方法。
2、根据你所了解的SQL Server工具,写出部分主要组件的功能(以SQL Server2005为例,写出SQL Server Management Studio、配置管理器)。
实验2 交互式SQL2.1创建数据库及表一、实验目的本次实验了解SQL Server 2005的启动,熟悉如何使用SSMS和SQL建立数据库和表,并加深对于完整性的理解。
二、背景知识在使用数据库的过程中,接触最多的就是数据库中的表。
表是数据存储的地方,是数据库中最重要的部分,管理好表也就管理好了数据库。
表是由行和列组成的。
创建表的过程主要就是定义表的列的过程。
SQL server 2008数据库实验

实验九.视图和索引及数据库关系图
视图操作
创建视图view_s_grade
修改视图只显示分数大于80的人
创建索引
实验十. sql server事务管理
定义一个事务,更改s表的数据
事务处理,一条有误两条都不写入数据库
事务处理
定义一个事务,向表插入一段数据再删除,结果没有删除该数据
向s表插入数据Βιβλιοθήκη 在sc表中删除s13 c10的记录。
实验四.数据库约束实验
利用数据库关系图管理主键。
利用表设计管理主键。
利用T-SQL定义主键。
唯一性约束的设置与删除。
实验五. select数据查询
查询数学系的学生的学号和姓名。
查询每个学生的情况和所选的课程号
查询学了体育的学生的学号和姓名
学了体育的比此课程平均成绩大的学号和成绩
实验十一. Sql server安全管理
创建新的账户和用户
创建登陆账户
创建数据库用户
把查询表s的权限授给login_account_user
删除数据用户
删除登陆账户
实验十二.数据库的备份和恢复
分离数据库
分离数据库
数据库的附加
数据库备份
还原数据库
实验十三.数据的导入导出
数据的导出
数据的导入
实验一.SQL server 2008基本服务和信息
创建test表和索引
查询test表的信息
查询column的id
查看表分区信息
实验二.数据库的创建和管理
数据库的创建
数据库的创建
修改数据库属性
删除数据库
实验三.数据表的创建和管理
建立Dept-info表
SQL Server 2008 实验

实验步骤:
1、 在 SSMS 图形化界面下创建对表 Customers 进行插入、 进行插入、 、 修改和删除操作的 3 个存储 过程: 过程:insertCustomers、updateCustomers、deleteCustomers。
2、 在查询分析器中创建一个存储过程,要求输入作者的姓和名,如果存在则返回这个 、 在查询分析器中创建一个存储过程,要求输入作者的姓和名, 作者所出版的书的信息;否则给出相应的提示信息。 作者所出版的书的信息;否则给出相应的提示信息。
SET NOCOUNT ON; UPDATE Customers SET Cno=@CustomerNo1,Cname=@CustomerName, Csex=@CustomerSex,Cjian=@CustomerJ WHERE Cno=@CustomerNo END GO
③ 删除
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE deleteCustomers @CustomerNo char(10) AS BEGIN SET NOCOUNT ON; DELETE FROM WHERE END GO Customers
SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE insertCustomers @CustomerNo char(10),@CustomerName char(8), @CustomerSex char(2),@CustomerJ Varchar(50) AS BEGIN SET NOCOUNT ON; INSERT Customers VALUES (@CustomerNo,@CustomerName,@CustomerSex,@CustomerJ) END GO
SQLSERVER2008实用教程实验参考答案(综合实验)

系统开发入门实习2 VISUAL C#2008/SQL Server2008员工信息管理系统一、新建项目1. 运行Visual Stutio2008,单击菜单“文件-新建-项目”,在弹出的对话框中选择“Visual C#-Windows窗体应用程序”模板,命名为SimpleCRM,确定。
2. 新建父窗体:右击项目名“添加-Windows窗体”,选择“MDI父窗体”,确定。
3. 设计父窗体:1)父窗体的Text属性值设置为:员工管理系统。
删除父窗体中原有的menuStrip和toolStrip 控件。
2)添加菜单。
从工具箱中拖放一个menuStrip菜单控件到父窗体中,分别添加员工管理和关于菜单。
并在菜单下分别添加员工管理、工资管理和关于、帮助子菜单。
3)删除原有代码。
按F7键打开代码页,删除MDIParent1部分类中除构造函数外的所有代码。
4)添加代码。
切换到窗体设计窗口,双击员工管理子菜单,在“员工管理ToolStripMenuItem1_Click”方法中添加如下代码。
Form1 form1 = new Form1();form1.MdiParent = this;form1.Show();5)将父窗体设置为首选执行窗体。
在解决方案资源管理器中打开“Program.cs”文件,将“form1”修改为“MDIParent1”6)修改父窗体和子窗体的Size。
父窗体Size改为1024,768。
子窗体改为800,600。
二、设计员工管理窗体员工管理窗体(Form1.cs)的功能包括:员工查询、员工添加、员工修改、员工删除。
主要操作数据库YGGL下的Employees表。
1)添加控件:2个GroupBox、4个Button、9个Label、9个TextBox、1个DataGridView。
调整控件布局,修改控件Text属性值。
2)DataGridView控件设置。
打开DataGridView的属性窗口,单击DataSource属性,添加项目数据源,弹出“数据源配置向导”对话框。
sql_server实验指导 课后答案

sql_server实验指导课后答案一、实验目的1、掌握SQL Server的安装及配置;2、掌握SQL Server的基本操作;3、掌握SQL Server的数据库管理;4、掌握SQL Server的数据库设计;5、掌握SQL Server的数据库查询;6、掌握SQL Server的数据库维护;7、掌握SQL Server的数据库安全管理。
二、实验内容1、安装SQL Server首先,我们需要下载SQL Server安装文件,然后双击安装文件,按照提示安装SQL Server,安装完成后,我们就可以使用SQL Server了。
2、配置SQL Server在安装完成后,我们需要配置SQL Server,配置SQL Server的方法有很多,比如设置SQL Server的安全性、设置SQL Server的连接属性、设置SQL Server的数据库文件位置等等。
3、基本操作在配置完成后,我们就可以使用SQL Server进行基本操作了,比如创建数据库、创建表、插入数据、更新数据、删除数据等等。
4、数据库管理在使用SQL Server进行基本操作后,我们还可以使用SQL Server进行数据库管理,比如创建视图、创建存储过程、创建触发器等等。
5、数据库设计在使用SQL Server进行数据库管理后,我们还可以使用SQL Server进行数据库设计,比如设计数据库模式、设计数据库索引、设计数据库视图等等。
6、数据库查询在使用SQL Server进行数据库设计后,我们还可以使用SQL Server进行数据库查询,比如使用SELECT语句查询数据、使用JOIN语句查询数据、使用GROUP BY语句查询数据等等。
7、数据库维护在使用SQL Server进行数据库查询后,我们还可以使用SQL Server进行数据库维护,比如备份数据库、恢复数据库、优化数据库等等。
8、数据库安全管理在使用SQL Server进行数据库维护后,我们还可以使用SQL Server进行数据库安全管理,比如设置用户权限、设置数据库安全策略、设置数据库审计等等。
数据库技术与应用SQLServer2008第4章习题参考答案

数据库技术与应用SQLServer2008第4章习题参考答案第4章习题解答1.思考题(1)在SQL的查询语句SELECT中,使用什么选项实现投影运算?什么选项实现连接运算?什么选项实现选择运算?答:在SQL的查询语句中,select选项实现(投影)运算,from选项实现(连接)运算,where选项实现(选择)运算。
(2)一个子SELECT的结果作为查询的条件,即在一个SELECT 语句的WHERE子句中出现另一个SELECT语句,这种查询称为什么查询?其功能是什么?答:称为嵌套查询。
嵌套查询是T-SQL语言的高级查询,它可以用多个简单的基本查询构成复杂的查询,从而增强其查询功能。
(3)在SELECT语句中,定义一个区间范围的特殊运算符是什么?检查一个属性值是否属于一组值中的特殊运算符又是什么?答:在SELECT 语句中,定义一个区间范围的特殊运算符是BETWEEN,检查一个属性值是否属于一组值的特殊运算符是IN。
(4)在T-SQL语句中,与表达式“工资BETWEEN 2000 AND 5000”功能相同的表达式如何写?答:工资>=2000 AND 工资<=5000(5)语句“SELECT * FROM 成绩表WHERE 成绩>(SELECT avg(成绩) FROM 成绩表)”的功能是什么?答:查询成绩表中所有成绩大于平均成绩的记录2.选择题(1)在SELECT语句中,需显示的内容使用“*”,则表示(B)。
A.选择任何属性B.选择所有属性C.选择所有元组D.选择主键(2)查询时要去掉重复的元组,则在SELECT语句中使用(D)。
A.All B.UNION C.LIKE D.DISTINCT(3)在SELECT语句中使用GROUP BY C_NO时,C_NO必须(C)。
A.在WHERE子句中出现B.在FROM子句出现C.在SELECT子句中出现D.在HAVING子句中出现(4)使用SELECT语句进行分组查询时,为了去掉不满足条件的分组,应当(B)。
SQL实验(实验4至实验7的答案)

SQL实验实验41.用select 语句查询departments和salary表中的所有数据:select salary.*, departments.*from salary ,departments2、查询departments 中的departmentid:select departmentid from departmentsgo3、查询 salary中的 income,outcome:select income,outcome from salarygo4、查询employees表中的部门号,性别,要用distinct消除重复行:select distinct(departmentid), sexfrom employees5、查询月收入高于2000元的员工号码:select employeeid from salarywhere income>2000go6、查询1970年以后出生的员工的姓名和住址:select name,addressfrom employeeswhere birthday>1970go7、查询所有财务部的员工的号码和姓名:select employeeid ,namefrom employeeswhere departmentid in(select departmentid from departments where departmentname='财务部')go8、查询employees员工的姓名,住址和收入水平,2000元以下显示为低收入,2000~3000元显示为中等收入,3000元以上显示为高收入:select name,address,casewhen income-outcome<2000 then'低收入'when income-outcome>3000 then'高收入'else'中等收入'end as'收入等级'from employees,salarywhere employees.employeeid=salary.employeeidgo9、计算salary表中员工月收入的评价数:select avg(income)as'平均收入'from salary10、查找employees表中最大的员工号码:select max(employeeid)as'最大员工号码'from employees11、计算salary表中的所有员工的总支出:select sum(outcome)as'总支出'from salary12、查询财务部雇员的最高实际收入:select max(income-outcome)from salary ,employees,departmentswhere salary.employeeid=employees.employeeid andemployees.departmentid=departments.departmentid and departmentname='财务部'go13、查询财务部雇员的最低实际收入:select min(income-outcome)from salary ,employees,departmentswhere salary.employeeid=employees.employeeid andemployees.departmentid=departments.departmentid and departmentname='财务部'go14、找出所用地址中含有“中山”的雇员的号码及部门号:select employeeid ,departmentidfrom employeeswhere address like'%中山%'go15、查找员工号码中倒数第二个数字为0的员工的姓名,地址和学历:select education,address,namefrom employeeswhere employeeid like'%0_'go16、使用into字句,由表employees创建“男员工1”表,包括编号和姓名:select employeeid,nameinto男员工表from employeeswhere sex='1'go17、用子查询的方法查找收入在2500元以下的雇员的情况:select*from employeeswhere employeeid in(select employeeid from salary where income<2500)go18、用子查询的方法查找查找研发部比所有财务部雇员收入都高的雇员的姓名:SELECT Name FROM Employees WHERE EmployeeID IN(SELECT EmployeeID FROM SalaryWHERE EmployeeID IN(SELECT EmployeeId FROM EmployeesWHERE DepartmentID IN(SELECT DepartmentID FROM DepartmentsWHERE DepartmentName='研发部'))AND InCome>ALL(SELECT InCome FROM SalaryWHERE EmployeeID IN(SELECT EmployeeId FROM EmployeesWHERE DepartmentID IN(SELECT DepartmentID FROM DepartmentsWHERE DepartmentName='财务部'))))19、用子查询的方法查找所有年龄比研发部雇员都大的雇员的姓名:select namefrom employeeswhere Birthday<all(select birthdayfrom employeeswhere departmentid in(select departmentidfrom departmentswhere departmentname='研发部'))20、查询每个员工的情况及其薪水的情况:select employees.*,departments.departmentnamefrom employees,departmentswhere employees.departmentid=departments.departmentid 21、使用内连接方法查找不在财务部工作的所有员工信息:select employees.*from employees inner join departments onemployees.departmentid=departments.departmentidwhere departmentname!='财务部'22、使用外连接方法查找出所有员工的月收入:select employees.*,salary.incomefrom employees join salary on employees.employeeid=salary.employeeid 23、查找财务部雇员的最高收入:select max(income)from salarywhere employeeid in(select employeeidfrom employeeswhere departmentid in(select departmentidfrom departmentswhere departmentname='财务部'))24、查询财务部雇员的最高实际收入:select max(income-outcome)from salarywhere employeeid in(select employeeidfrom employeeswhere departmentid in(select departmentidfrom departmentswhere departmentname='财务部'))25、统计财务部收入在2500元以上的雇员人数:select count(employeeid)from employeeswhere departmentid in(select departmentid from departmentswhere departmentname='财务部')and employeeid in(select employeeidfrom salarywhere income>2500)26、按部门列出在该部门工作的员工的人数:select departmentid ,count(*)as人数from employeesgroup by departmentid27、按员工的学历分组:select education ,count(*)as人数from employeesgroup by education28、按员工的工作年份分组,统计年份人数:select workyear ,count(*)as人数from employeesgroup by workyear29、按各雇员的情况收入由低到高排列:select employees.*,salary.incomefrom employees ,salarywhere employees.employeeid=salary.employeeidorder by income30、将员工信息按出生时间从小到大排列:select*from employeesorder by birthday31、在order by 字句中使用子查询,查询员工姓名,性别和工龄信息,要求按实际收入从大到小排列:select name,sex,workyear,income-outcomefrom salary ,employeeswhere salary.employeeid=employees.employeeidorder by income-outcome desc视图部分1、创建view1:Create view view1asselect employees.employeeid,name,departmentname,(income-outcome)as comefrom employees , departments , salarywhere employees.departmentid=departments.departmentid and employees.employeeid=salary.employeeid2、查询视图employeeid:3、向视图view1中插入一行数据:insert into view1 values('111111','谎言','1','30000')4、查看视图(没有影响)基本表:实验51、定义一个变量,用于描述YGGL数据库的salary表中000001号员工的实际收入,然后查询该变量:declare @hy intset @hy=(select income-outcomefrom salarywhere employeeid='000001')select @hy2、使用运算符“>”:select namefrom employeeswhere birthday>'1974-10-10'3、判断姓名为“王林”的员工实际收入是否高于3000元,如果是则显示“高收入”,否则显示“收入不高于3000”:if((select incomefrom salary,employeeswhere salary.employeeid=employees.employeeid and ='刘明')>3000)select income as'高收入'from salary,employeeswhere salary.employeeid=employees.employeeid and ='刘明' elseselect'收入不高于'4、使用循环输出一个“*”三角形:declare @i intdeclare @j intset @j=20set @i=1while @i<@jbeginprint(space((@j-@i)/2)+replicate('*',@i))set @i=@i+2end4、按部门进行分类,使用if语句实现:Create function hy1(@departmentid1 char(3))returns char(10)asbegindeclare @hy1 char(10)if((select departmentid from departments where@departmentid1=departmentid)='1')set @hy1='财务部'if((select departmentid from departments where@departmentid1=departmentid)='2')set @hy1='人力资源部'if((select departmentid from departments where@departmentid1=departmentid)='3')set @hy1='经理办公室'if((select departmentid from departments where@departmentid1=departmentid)='4')set @hy1='研发部'if((select departmentid from departments where@departmentid1=departmentid)='5')set @hy1='市场部'return @hy1endselect employeeid,name,address,dbo.hy1(departmentid)from employees select employeeid,name,address,case departmentidwhen 1 then'财务部'when 2 then'人力资源部'when 3 then'经理办公室'when 4 then'研发部'when 5 then'市场部'end as部门号from employees6、自定义一个函数,计算一个数的阶层:create function hy(@hy2 int)returns intasbegindeclare @i intset @i=@hy2declare @j intset @j=1while @i>1beginset @j=@j*@iset @i=@i-1endreturn(@j)enddeclare @h intexec @h=dbo.hy 4select @h as'jiecheng'7、/*生成随机数*/select rand()8、/*平方*/select square(12)9、/*求财务部收入最高的员工姓名*/select max(name)from employeeswhere employeeid in(select employeeidfrom salarywhere employeeid in(select employeeidfrom employeeswhere departmentid in(select departmentidfrom departmentswhere departmentname='财务部')))select avg(income)as'平均收入'from salary/*聚合函数与group by 一起使用*/select workyear ,count(*)as人数from employeesgroup by workyear/*将字符组成字符串*/select char(123)/*返回字符串左边开始的个字符*/select left('abcdef',2)/*返回指定日期时间的天数*/select day(birthday)from employeeswhere employeeid='010000'/*获取当前时间*/select getdate()实验61、创建索引:create unique index huangyanon employees(employeeid)2、/*用create index 语句创建主键*/3、重建表employees中employeeid列上的索引alter index huangyanon employees rebuild4、删除索引:5、创建一个新表,使用一个复合列作为主键,作为表的约束,并为其命名:create table employees5( employeeid char(6)not null,name char(5)not null,sex tinyint,education char(4),constraint yan primary key(employeeid,name))为新表添加一列:alter table employees5add address char(10)6、创建新表student,性别只能包含男或女:create table student(号码char(6)not null,性别char(2)not nullcheck(性别in('男','女')))7、创建新表:create table employees7(学号char(10)not null,出生日期datetime not nullcheck(出生日期>'1980-01-01'))8、创建一个规则:9,创建salary2:create table salary2(employeeid char(6)not null primary key,income float not null,outcome float not null,foreign key(employeeid)references salary(employeeid)on update cascadeon delete cascade)10、添加一个外键,salary与employees有相关记录,则拒绝更新employees:alter table salaryadd constraint kc_forforeign key(employeeid)references employees(employeeid)on delete no actionon update no action实验71、工作年份大于6时,跟换科室到经理办公室(根据员工):Create PROC UpdateDeptByYear(@EmpId char(6))ASBEGINDECLARE @year intSELECT @year=WorkYear From Employees WHERE EmployeeID=@EmpId IF(@year>6)UPDATE EmployeesSET DepartmentID='3'WHERE EmployeeID=@EmpIdENDEXEC UpdateDeptByYear '020010'SELECT*FROM Employees WHERE Employeeid='020010'2、根据每个员工的学历将收入提高元:CREATE PROC UpdateInComeByEdu @Employeeid char(6)ASBEGINUPDATE SalarySET InCome=InCome+500FROM SalaryLEFT JOIN EmployeesON Salary.EmployeeID=Employees.EmployeeIDWHERE Salary.Employeeid=@EmployeeidENDEXEC UpdateInComeByEdu '020010'SELECT*FROM Salary where EmployeeID='020010'3、游标:CREATE PROCEDURE Employees_biliASBEGINDECLARE @i FLOATDECLARE @j FLOATDECLARE @Education CHAR(10)DECLARE Employees_cursor CURSORFOR SELECT Education FROM EmployeesSET @i=0SET @j=0OPEN Employees_cursorFETCH Employees_cursor INTO @EducationWHILE(@@FETCH_STATUS=0)BEGINIF(@Education!='大专')SET @i=@i+1SET @j=@j+1FETCH Employees_cursor INTO @EducationENDCLOSE Employees_cursorSELECT @i AS'本科及以上员工所占员工数'SELECT @j AS'员工总数'SELECT @i/@j AS'本科及以上员工所占比例'CLOSE Employees_cursorENDEXEC Employees_bili4、使用命令的方式修改存储过程的定义:5、对于YGGL数据库,表Employees的EmployeeID列与表Salary的EmployeeID列应该满足参照的完整性规则,请用触发器实现两个表的参照完整性:CREATE TRIGGER Salary_insert ON SalaryFOR INSERT,UPDATEASBEGINIF(SELECT EmployeeID FROM INSERTED)NOT IN(SELECT EmployeeID FROM Employees)ROLLBACKENDCREATE TRIGGER Employeesupdate ON EmployeesFOR UPDATEASBEGINUPDATE SalarySET EmployeeID=(SELECT EmployeeID FROM INSERTED)WHERE EmployeeID=(SELECT EmployeeID FROM DELETED)ENDCREATE TRIGGER Employeesdelete ON EmployeesFOR DELETEASBEGINDELETE FROM SalaryWHERE EmployeeID=(SELECT EmployeeID FROM DELETED)ENDINSERT INTO SalaryVALUES('000005',2000,1000)UPDATE EmployeesSET EmployeeID='000000'WHERE EmployeeID='990230'DELETE FROM EmployeesWHERE EmployeeID='000000'6.当修改表Employees时,若将Employees表中员工的工作时间增加1年,则将收入增加500,若增加2年则增加1000,依次增加。
sqlserver实验答案

sqlserver实验答案【篇一:sqlserver2008实用教程实验参考答案(实验6)】=txt>一、索引当表中数据量很大时,合理建立索引,可以提高查询的效率。
1. 对yggl数据库的employees表中的departmentid列建立索引create index em_d_ind on employees(departmentid)2. 在employees表的name列和address列上建立复合索引create index em_na_ind on employees(name,address)3. 对departments表上的departmentname列建立唯一非聚集索引create unique index de_n_ind ondepartments(departmentname)4. 重建索引alter index all on employees rebuild5. 删除索引drop index em_d_id on employees一次删除多个索引drop index employees.em_d_ind,employees.em_na_ind6. 使用界面方式创建、删除索引二、数据完整性1. 创建一个表employees5,只含有employeeid、name、sex和education列。
将name设为主键,并对employeeid列进行unique约束。
验证主键约束和唯一约束。
create table employees5()employeeid char(6) not null, name char(10) not null primary key, sex bit, education char(4) constraint uk_idunique(employeeid)2. 删除上例中创建的unique约束,删除后再验证唯一约束。
alter table employees5 drop constraint uk_id3. 创建新表,使用复合列作为主键。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验 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 元以上显示为高收入。
SELECTa. Name AS 姓名, a. Address as 住址,CASEWHEN b. InCome <2000 THEN ' 低收入'WHEN b. InCome BETWEEN 2000 AND 3000 THEN ' 中等收入'WHEN b. InCome >3000 THEN ' 高收入'ENDAS 收入水平FROM Employees a, Salary bWHERE a. EmployeeID =b. EmployeeID ;7. 使用SELECT语句进行简单计算在Salary 表中,计算每个雇员的实际收入,并显示雇员编号和实际收入SELECT EmployeeID AS 雇员编号, InCome - OutCome AS 实际收入FROM Salary ;8. 使用聚合函数获得员工总数SELECT COUNT(*) FROM Employees ;计算Salary 表中员工月收入的平均数SELECT AVG( InCome ) AS 平均收入FROM Salary ;获得Employees 表中最大的员工号码SELECT MAX( EmployeeID ) AS 雇员编号FROM Employees ;计算Salary 表中所有员工的总支出SELECT SUM( OutCome ) AS 总支出FROM Salary ; 查询财务部雇员的最高和最低实际收入SELECT MAX( InCome - OutCome ) AS 最高收入, MIN ( InCome - OutCome ) AS 最低收入FROM Salary ;9. 模糊查询找出所有姓王的雇员的部门号SELECT DepartmentID AS 部门号FROM Employees WHERE Name like ' 王%' ; 找出所有地址中含有“中山”的雇员的编号及部门号SELECT EmployeeID AS 雇员编号, DepartmentID AS 部门号FROM Employees WHERE Address like '% 中山%' 找出雇员编号中倒数第二个数字为0 雇员的编号的姓名、地址和学历SELECT EmployeeID AS 雇员编号, Name AS 姓名, Address AS 地址, Education AS 学历FROM Employees WHERE SUBSTRING ( EmployeeID , 5, 1)= '0' ;10. Between ⋯And⋯和Or 的使用找出收入在2000~3000 元之间的雇员编号SELECT EmployeeID , InCome FROM Salary WHERE InCome BETWEEN 2000 AND 3000 ; 找出部门为“ 1”或“ 2”的雇员的编号SELECT EmployeeID , DepartmentID FROM Employees WHERE DepartmentID ='1' OR DepartmentID ='2' ;11. 使用INTO 子句,由源表创建新表由表Salary 创建“ SalaryNew”表,要求包括编号和收入,选择收入在1500 元以上的雇员SELECT EmployeeID , InComeINTO SalaryNewFROM SalaryWHERE InCome >1500 ;由表Employees 创建“ EmployeesNew ”表,要求包括编号和姓名,选择所有男员工SELECT EmployeeID , NameINTO EmployeesNewFROM EmployeesWHERE Sex =1;二、子查询的使用1. 查找在财务部工作的雇员情况-- 分析: 雇员表和部门表通过DepartmentID 进行关联--1) 在Departments 表中查找财务部的编号--2) 在Employees 表中查找部门的雇员情况SELECT * FROM Employees WHERE DepartmentID =(SELECT DepartmentID FROM Departments WHERE DepartmentName =' 财务部 ' );2. 用子查询的方法查找所有收入在 2500 以下的雇员的情况-- 分析 : 员工表和收入表通过 EmployeeID 进行关联 SELECT * FROM Employees WHERE EmployeeID IN ( SELECT EmployeeID FROM Salary WHERE InCome <2500 );3. 查找财务部年龄不低于研发部雇员年龄的雇员姓名-- 分析 : 雇员表和部门表通过 DepartmentID 进行关联--1) --2) --3)雇员年龄SELECT 6. 用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的姓名先找到研发部的部门编号 再通过部门编号找到研发部的雇员年龄 再找到财务部的部门编号 , 并通过部门编号查找雇员姓名, 条件是年龄不低于所有研发部WHERE DepartmentIDWHERE SELECT Name FROM EmployeesSELECT DepartmentID FROM Departments AND Birthday !> ALL(SELECT Birthday FROM Employees WHERE in (DepartmentNameDepartmentID in(WHERE DepartmentName=' 财务部 ' )SELECT DepartmentID FROM Departments4. 用子查询的方法查找研发部比所有财务部雇员收入都高的雇员的姓名 --1)--2)--3) =' 研发部 ' ));SELECT 查找财务部雇员的收入 查找研发部雇员的编号 , 条件是收入比所有财务部雇员收入都高 通过编号找到雇员姓名Name FROM SELECT SELECT EmployeeID EmployeeID Employees WHERE EmployeeID IN ( FROM Salary WHERE EmployeeID IN( FROM Employees WHERE DepartmentID =(DepartmentID> ALL( SELECT InCome FROM Salary WHERE EmployeeID IN(SELECT EmployeeID FROM Employees WHERE DepartmentID =( SELECT DepartmentID FROM Departments WHERE DepartmentName 5. 查找比所有财务部的雇员收入都高的雇员的姓名-- 分析 :1) 查找所有财务部的雇员收入--2) 查找其他雇员编号--3) 通过编号找到姓名 SELECT AND InComeName FROM SELECT SELECT SELECT FROM Departments WHERE DepartmentName, 条件是收入比所有财务部的雇员收入都高EmployeeIDInCome FROM Salary EmployeeID Employees WHERE EmployeeID FROM Salary WHERE InComeWhere EmployeeIDFROM EmployeesIN(>ALL( IN ( Where DepartmentID =( =' 研发部 ' ))=' 财务部 ' ))));=' 财务部 ' ))));DepartmentID FROM Departments WHERE DepartmentName-- 分析: 年龄都大等价于生日都小--1) 找到所有研发部雇员的生日--2) 找到其他部门雇员的姓名, 条件是生日比研发部的所有雇员的生日都小SELECT Name FROMEmployees WHERE Birthday < ALL ( SELECT Birthday FROM Employees WHERE DepartmentID IN ( SELECT DepartmentIDFROM Departments WHERE DepartmentName = ' 研发部' ));三、连接查询的使用1. 查询每个雇员的情况及薪水的情况SELECT a.*, b.*FROM Employees a, Salary bWHERE a. EmployeeID =b. EmployeeID ;2. 查询每个雇员的情况及其工作部门的情况SELECT a.*, b.*FROM Employees a, Departments bWHERE a. DepartmentID =b. DepartmentID ;3. 使用内连接的方法查询名字为“王林”的雇员所在的部门SELECT b. DepartmentName FROM Departments b INNER JOIN Employees aON a. DepartmentID =b. DepartmentIDWhere a. Name= ' 王林' ;4. 使用内连接的方法查找出不在财务部工作的所有雇员信息SELECT a.* FROM Employees a INNER JOIN Departments b ON a. DepartmentID =b. DepartmentIDWHERE b. DepartmentName != ' 财务部' ;5. 使用外连接方法查找出所有员工的月收入SELECT * FROM Employees a LEFT OUTER JOIN Salary b ON a. EmployeeID =b. EmployeeID ;6. 查找财务部收入在2000 元以上的雇员姓名及其薪水详情SELECT a.*, b. InCome FROM Employees aINNER JOIN Salary b ON a. EmployeeID =b. EmployeeID INNER JOIN Departments c ON a. DepartmentID =c. DepartmentIDWHERE b. InCome >2000 AND c. DepartmentName =' 财务部' ;7. 查询研发部在1976 年以前出生的雇员姓名及其薪水详请SELECT a.*, b. InCome FROM Employees a INNER JOIN Salary bON a. EmployeeID =b. EmployeeIDINNER JOIN Departments cON a. DepartmentID =c. DepartmentIDWHERE c. DepartmentName =' 研发部' AND a. Birthday >'1976'四、聚合函数的使用1. 求财务部雇员的平均收入SELECT AVG( a. InCome ) FROM Salary a INNER JOIN Employees bON a. EmployeeID =b. EmployeeIDINNER JOIN Departments cON c. DepartmentID =b. DepartmentID WHERE c. DepartmentName =' 财务部' ;2. 查询财务部雇员的最高和最低收入SELECT MIN ( a. InCome ), MAX( a. InCome ) FROM Salary aINNER JOIN Employees bON a. EmployeeID =b. EmployeeIDINNER JOIN Departments cON c. DepartmentID =b. DepartmentID WHERE c. DepartmentName =' 财务部' ;3. 求财务部雇员的平均实际收入SELECT AVG( a. InCome - a. OutCome ) FROM Salary aINNER JOIN Employees b ON a. EmployeeID =b. EmployeeIDINNER JOIN Departments c ON c. DepartmentID =b. DepartmentID WHERE c. DepartmentName =' 财务部' ;4. 查询财务部雇员的最高和最低实际收入SELECT MIN( a. InCome - a. OutCome ), MAX( a. InCome - a. OutCome ) FROM Salary a INNER JOIN Employees bON a. EmployeeID =b. EmployeeIDINNER JOIN Departments cON c. DepartmentID =b. DepartmentID WHERE c. DepartmentName =' 财务部' ;5. 求财务部雇员的总人数SELECT COUNT( a. EmployeeID ) FROM Employees aINNER JOIN Departments bON a. DepartmentID =b. DepartmentID WHERE b. DepartmentName =' 财务部' ;6. 统计财务部收入在2500 元以上的雇员人数SELECT COUNT( a. EmployeeID ) FROM Employees aINNER JOIN Departments bON a. DepartmentID =b. DepartmentIDINNER JOIN Salary cON c. EmployeeID =A. EmployeeIDWHERE c. InCome >2500 AND b. DepartmentName =' 财务部' ;五、GROUP BY、ORDER BY子句的使用1. 查找Employees 表中男性和女性的人数SELECT Sex , COUNT( Sex ) FROM Employees GROUP BY Sex ;2. 按部门列出在该部门工作的员工的人数-- 使用内连接的方法SELECT b. DepartmentName , COUNT( a. EmployeeID ) FROM Employees aINNER JOIN Departments bON a. DepartmentID =b. DepartmentID GROUP BY b. DepartmentName ;-- 使用多表查询方法,GROUP BY 后面的字段, 必须出现在SELECT 语句要查询的字段中。