当前位置:文档之家› SQL_Server实用教程(第三版)实验4_数据库的查询和视图

SQL_Server实用教程(第三版)实验4_数据库的查询和视图

实验四数据库的查询和视图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【思考与练习】按员工的工作年份分组,统计各个工作年份的人数,例如,工作一年的多少人,工作两年的多少人。

相关主题