SQLSERVER2008实用教程实验参考答案(实验4)
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 2008)全书答案 清华大学出版社 马建红 李占波主编第四章习题及实验答案

第四章习题及实验答案习题答案一、选择题1、D2、A3、B4、B5、B6、D7、A8、B9、C10、C二、填空题1、系统数据库、用户数据库2、master、model、msdb、tempdb3、主文件组(primary)、用户定义文件组,默认文件组(default)4、使用SQL Server Management Studio工具、使用CREATE DATABASE语句5、完全数据库备份、差异数据库备份、事务日志备份、文件或文件组备份三、简答题1、答:在SQL SERVER中常用的对象主要有:表、视图、索引、存储过程、触发器、函数等。
2、答:SQL SERVER中数据库文件包括数据文件和事务日志文件。
其中,数据文件用于存放数据库的数据和各种对象,数据文件又可以分成主数据文件和次数据文件两种形式。
主数据文件是数据库的起点,用来存储数据库的启动信息和部分或全部数据,每一个数据库都有且仅有一个主数据文件。
主数据文件名称的默认后缀是mdf。
次数据文件是可选的,它们可以存储不在主数据文件中的全部数据和对象。
而事务日志文件用于存放事务日志。
事务日志记录了对数据库的所有修改操作。
日志记录了每一个事务的开始、对数据的改变和取消修改的足够信息。
3、答:通常根据以下事实进行计算:(1)一个数据库的最小尺寸必须等于或大于model数据库的大小。
因为新建数据库是model数据库的拷贝。
(2)估算数据库的大小。
在Microsoft SQL Server系统中,最基本的数据存储单元是数据页,每一个页的大小是8KB,即8192字节。
每页除去96字节的头部(它是用来存储有关的页信息,如页类型、可用空间等),剩下的8096字节用来存储数据,且数据从紧接页头的位置开始,按行的顺序分布在数据页上,但在表中,数据行不能跨页存储。
这就意味着SQL Server数据库可以在1MB字节的空间里存储128页(即1M=1024KB=128×8KB)。
数据库技术与应用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. 创建新表,使用复合列作为主键。
sql server 2008表数据操作答案

Vmare Workstation 8及linux系统安装实验报告一、实验目的掌握虚拟机软件的安装和使用掌握Linux的安装掌握Linux的基本配置二、实验环境一台运行Windows的计算机(硬盘剩余空间在10G以上)、虚拟机软件Vmware、Linux安装软件。
三、实验内容安装虚拟机软件Vmware在Vmware中安装Linux。
四、主要步骤VMware安装完成后,重启机器后,打开VMware,如图1图1 VMware Workstation 主界面在VMware中新建一台虚拟机的主要步骤:1.选择File->New->Virtual Machine(或直接按ctrl+n键),出现新建虚拟机向导,如图2所示:图2 新建虚拟机向导2.选择”Custom(advanced)”3.Choose the Vitual Machine Hardware Compatability(选择虚拟机硬件兼容性),”Hardware compatability”选”Worksation 6.5-7.0”4.Guest Operating System Installation(寄宿操作系统安装,即虚拟机上安装的操作系统),如图3:图3 Guest OS 安装选项在”Install from”部分选取安装源,可从光盘驱动器(”Installer disc”)或光盘映像(“Installer disc image file(iso)”)安装,此处选择Fedora-8-i386-DVD.iso。
5.Name the Virtual Machine(命名虚拟机),如图4:图4 虚拟机名称及目录设置“Virtual machine name”设置此虚拟机的名称。
“Location”设置此虚拟机的安装位置。
6.Processor Configuration(处理器设置)“Number of processor”设置虚拟机使用的处理器数“Number of cores per processor”设置每处理器核心数7.Memory for the Virtual Machine(虚拟机内存设置)建议最小设置为512M推荐为虚拟机分配1G以上内存8.Network Type(虚拟机网络设置)此项设置为:”Use network address translation(NA T)”(使用网络地址转换),虚拟机操作系统共享宿主主机的网络IP地址与外部网络连接。
sql server 2008教程第04章

语法格式:
SELECT <select_list> /*指定要选择的列或行及其限定*/ [ INTO <new_table> ] /*INTO子句,指定结果存入新表*/ FROM <table_source> /*FROM子句,指定表或视图*/ [ WHERE <search_condition> ] /*WHERE子句,指定查询条件*/ [ GROUP BY <group_by_expression> ] /*GROUP BY子句,指定分组表达式*/ [ HAVING <search_condition> ] /*HAVING子句,指定分组统计条件*/ [ ORDER BY <order_expression> [ ASC | DESC ]] /*ORDER子句,指定排序表达式和顺序*/
4.1.3 连接(JOIN)
T1 1 2
T2 A B
T3 1 2
T4 3 0
T5 M N
4.1.3 连接(JOIN)
4.2 数据库的查询
要选择XSCJ为当前数据库,使用语句: USE XSCJ 一旦选择了当前数据库后,若对操作的数据库对象加以限定,则其后的 命令均是针对当前数据库中的表或视图等进行的。 下面介绍SELECT语句,它是T-SQL的核心。
用于范围比较的关键字有两个:BETWEEN和IN。 当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。 BETWEEN关键字指出查询范围,格式为: expression [ NOT ] BETWEEN expression1 AND expression2
4.2.2 选择行
【例4.14】查询XSCJ数据库XS表中不在1979年出生的学生 情况。查询XSCJ数据库XS表中专业名为“计算机”或“通信 工程”或“无线电”的学生的情况。
实验4.SQLServer数据表的管理_2-参考答案

实验4 SQL Server数据表的管理_2二、实验内容及步骤1.使用Transact-SQL语句CREA TE TABLE在选课数据库中创建student,course ,SC 表。
参见教材p852.SQL Server管理平台添加教材p82所示的数据略3 创建数据库关系图,建立数据库的完整备份,并上交该备份略4.使用Transact-SQL语句ALTER TABLE修改course表的“Cno”列,使之为非空。
ALTER TABLE courseALTER COLUMN Cno NOT NULL5.使用Transact-SQL语句ALTER TABLE修改SC表的“grade”列,使其数据类型为real。
ALTER TABLE SCALTER COLUMN分数real6.使用Transact-SQL语句ALTER TABLE修改选课表的”Sname”列,使其列名为“姓名”,数据类型为vachar(10),非空。
alter table student add姓名varchar(10) NOT NULL;update student set 姓名= Snamealter table student drop column Sname;7.使用Transact-SQL语句ALTER...ADD为选课数据库的SC表添加一个名为“备注”的数据列,其数据类型为V ARCHAR(20)。
ALTER TABLE SC ADD 备注V ARCHAR(20) NULL8.分别使用SQL Server管理平台和Transact-SQL语句DROP TABLE删除student数据库中SC表。
DROP TABLE student.dbo.SC9.分别使用SQL Server管理平台和SQL语句CREA TE INDEX 为SC表的“grade”字段创建一个非聚集索引,命名为SC_ grade。
CREATE INDEX SC_ grade ON SC (grade)10分别使用SQL Server管理平台和SQL语句CREA TE INDEX 为Course表的“Cname”创建一个唯一索引,命名为Course_id_Cname。
- 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元以上显示为高收入。
SELECT 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 BETWEEN2000 AND3000;找出部门为“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 Name FROM Employees WHERE DepartmentID in(SELECT DepartmentID FROM Departments WHERE DepartmentName='财务部') AND Birthday!>ALL(SELECT Birthday FROM Employees WHERE DepartmentID in(SELECT DepartmentID FROM Departments WHERE DepartmentName='研发部')); 4. 用子查询的方法查找研发部比所有财务部雇员收入都高的雇员的姓名--1)查找财务部雇员的收入--2)查找研发部雇员的编号,条件是收入比所有财务部雇员收入都高--3)通过编号找到雇员姓名SELECT Name FROM Employees WHERE EmployeeID IN(SELECT EmployeeID FROM Salary WHERE EmployeeID IN(SELECT EmployeeID FROM Employees WHERE DepartmentID=(SELECT DepartmentID FROM Departments WHERE DepartmentName='研发部')) AND InCome>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 Name FROM Employees WHERE EmployeeID IN(SELECT EmployeeID FROM Salary WHERE InCome>ALL(SELECT InCome FROM Salary Where EmployeeID IN(SELECT EmployeeID FROM Employees Where DepartmentID=(SELECT DepartmentID FROM Departments WHERE DepartmentName='财务部'))));6. 用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的姓名--分析:年龄都大等价于生日都小--1)找到所有研发部雇员的生日--2)找到其他部门雇员的姓名,条件是生日比研发部的所有雇员的生日都小SELECT Name FROM Employees WHERE Birthday<ALL(SELECT Birthday FROM Employees WHERE DepartmentID IN(SELECT DepartmentID FROM 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 bINNER JOIN Employees aON a.DepartmentID=b.DepartmentIDWhere ='王林';4. 使用内连接的方法查找出不在财务部工作的所有雇员信息SELECT a.*FROM Employees aINNER JOIN Departments bON a.DepartmentID=b.DepartmentIDWHERE b.DepartmentName!='财务部';5. 使用外连接方法查找出所有员工的月收入SELECT*FROM Employees aLEFT OUTER JOIN Salary b ONa.EmployeeID=b.EmployeeID;6. 查找财务部收入在2000元以上的雇员姓名及其薪水详情SELECT a.*,b.InCome FROM Employees aINNER JOIN Salary bON a.EmployeeID=b.EmployeeIDINNER JOIN Departments cON a.DepartmentID=c.DepartmentIDWHERE b.InCome>2000 AND c.DepartmentName='财务部';7. 查询研发部在1976年以前出生的雇员姓名及其薪水详请SELECT a.*,b.InCome FROM Employees aINNER 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 aINNER JOIN Employees bON a.EmployeeID=b.EmployeeIDINNER JOIN Departments cON c.DepartmentID=b.DepartmentIDWHERE 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.DepartmentIDWHERE c.DepartmentName='财务部';3. 求财务部雇员的平均实际收入SELECT AVG(a.InCome-a.OutCome)FROM Salary aINNER JOIN Employees bON a.EmployeeID=b.EmployeeIDINNER JOIN Departments cON c.DepartmentID=b.DepartmentIDWHERE 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.DepartmentIDWHERE c.DepartmentName='财务部';5. 求财务部雇员的总人数SELECT COUNT(a.EmployeeID)FROM Employees aINNER JOIN Departments bON a.DepartmentID=b.DepartmentIDWHERE 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.DepartmentIDGROUP BY b.DepartmentName;--使用多表查询方法,GROUP BY后面的字段,必须出现在SELECT语句要查询的字段中。