友情提示:本文共有 4745 个字,阅读大概需要 10 分钟。
一、实验目的
1、掌握使用SELECT语句实现对数据库的简单查询
2、掌握使用SELECT语句实现对数据库的多表链接查询和子查询
实验内容、方法、步骤、结果与分析(三)表的查询:
实验内容:
以下各题基于数据库HrSystem,编写SELECT语句,完成以下各题的查询要求,保存或记录下实现各题功能的查询语句。
查询员工表Employees的全部信息。方法:
Use HrSystem
GO
SELECT * FROM Employees
GO
步骤及结果:
分析:查询表的内容使用SELECT关键字,*表示全部信息。
实验内容:
2.查询员工表Employees的姓名、性别及工资。
方法:
Use HrSystem
GO
SELECT Emp_name AS 姓名,Sex AS 性别,Wage AS NewWage FROM Employees
GO
步骤及结果:
分析:不用查询全部信息时,可以在SELECT语句后面指定带查询列。
实验内容:
3.要将所有员工工资上涨20%,显示所有员工的姓名、性别和上涨后的工资。将上涨后的工资一列的标题显示为“NewWage”。
方法:
Use HrSystem
GO
UPDATE Employees SET Wage=Wage*1.20
/*将所有员工工资上涨%*/
GO
SELECT Emp_name AS 姓名,Sex AS 性别,Wage AS NewWage FROM Employees
GO步骤及结果:
分析:查询表的内容可以指定查询,且可以更改显示列名(使用AS关键字)。
实验内容:
4.查询员工表Employees中有哪些职务(使用title字段,这里需要去掉重复的职务。
方法:
Use HrSystem
GO
SELECT DISTINCT Title FROM Employees
GO
步骤及结果:
分析:查询显示时DISTINCT关键字表示滤除重复项。
实验内容:
5.查询部门编号为1的员工姓名和职务。
方法:
Use HrSystem
GO
SELECT Emp_name AS 姓名,Title AS 职务 FROM Employees WHERE Dep_id=1
GO
步骤及结果:
分析:查询语句后可用WHERE关键字外加查询条件。
实验内容:
6.查询图书类型职务为“部门经理”且性别为女的员工的姓名。
方法:
Use HrSystem
GO
SELECT Emp_name AS 姓名 FROM Employees WHERE Title="部门经理" AND Sex="女"
GO
步骤及结果:
分析:设置查询条件可以使用逻辑运算符设置查询条件。
实验内容:
7.使用BETWEEN表示范围,找出工资在3000~4000元的所有员工信息。
方法:
Use HrSystem
GO
SELECT * FROM Employees WHERE Wage BETWEEN 3000 AND 4000
GO
步骤及结果:
分析:BETWEEN为设置查询范围关键字。
实验内容:
8.使用BETWEEN表示范围,找出工资不在3000~4000元的所有员工信息。
方法:
Use HrSystem
GO
SELECT * FROM Employees WHERE Wage NOT BETWEEN 3000 AND 4000
GO
步骤及结果:
分析:可以在BETWEEN语句前添加否定,语义为不在该范围内的。
实验内容:
9.找出部门为人事部(编号为1)和办公室(编号为2)的所有员工信息(条件使用IN)。
方法一:
Use HrSystem
GO
SELECT * FROM Departments WHERE Dep_id IN (1) AND Dep_name IN ("人事部")
SELECT * FROM Departments WHERE Dep_id IN (2) AND Dep_name IN ("办公室")
GO
方法二:
Use HrSystem
GO
SELECT * FROM Departments WHERE (Dep_id IN (1) AND Dep_name IN ("人事部"))OR(Dep_id IN (2) AND Dep_name IN ("办公室"))
GO
步骤及结果:
方法一:
方法二:
分析:IN关键字为查询值或范围设置,多重查询条件应用逻辑运算符处理。
实验内容:
10.从Employees表中找出所有身份证以’110’开头的员工的所有信息。
方法:
Use HrSystem
GO
SELECT * FROM Employees WHERE IdCard LIKE "110%"
GO
步骤及结果:
分析:LIKE为模糊查询关键字,查询部分包含该内容的项,%表示未知个数的多个字符,另外有_表示单个字符,[][^]分别为在和不在该范围的一个字符。
实验内容:
11.查询Employees表中所有身份证第1个字母在0~3之间的员工的所有信息。
方法:
Use HrSystem
GO
SELECT * FROM Employees WHERE IdCard LIKE "[0-3]%"
GO
步骤及结果:
分析:LIKE "[0-3]%"表示开头一个字符在0~3范围内,后面有任意多个字符。
实验内容:
12.统计员工的最高工资、最低工资、总工资和平均工资。
方法:
Use HrSystem
GO
SELECT MAX(Wage) AS 最高工资,MIN(Wage) AS 最低工资,SUM(Wage) AS 总工资,AVG(Wage) AS 平均工资 FROM Employees
GO
实验内容:
分析:聚合函数MAX()、MIN()、SUM()、AVG()分别表示取最大值、最小值、总数和平均值。
实验内容:
13.统计一共有几种职务。
方法:
Use HrSystem
GO
SELECT COUNT(DISTINCT Title) AS 职务种数 FROM Employees
GO
步骤及结果:
分析:COUNT为查询计数关键字,设置不同的参数有不同的计数结果,如是否重复计数相似项等。
实验内容:
14.统计职务为“部门经理”的员工总人数。
方法:
Use HrSystem
GO
SELECT COUNT(Title) AS 部门经理数 FROM Employees WHERE Title="部门经理"
GO
步骤及结果:
分析:计数查询时同样可以设置相应的条件。
实验内容:
15.统计每一个部门的员工人数,统计结果中包含部门编号和员工人数。(提示:使用group by实现分类汇总)
方法:
Use HrSystem
GO
SELECT Dep_id AS 部门编号,COUNT(*) AS 员工人数 FROM Employees
GROUP BY Dep_id
GO
步骤及结果:
分析:GROUPBY为分组显示查询的语句,BY后面为分组条件,语义为按什么分组(显示)。
实验内容:
16.统计每个部门(按Dep_id分类)的平均工资(Wage), 要求统计结果列标题显示为:“部门编号”及“平均工资”。(提示:使用groupby实现分类汇总)。
方法:
Use HrSystem
GO
SELECT Dep_id AS 部门编号,AVG(Wage) AS 平均工资 FROM Employees
GROUP BY Dep_id
GO
步骤及结果:
分析:AVG()为计算平均值的聚合函数。
实验内容:
17.统计每个部门(按Dep_Id分类)的平均工资(Wage),要求显示每个部门的明确内容后再显示该部门的平均工资,明细中要求显示部门编号、部门名称、姓名和工资。(提示:使用COMPUTE…BY…)
方法:
Use HrSystem
GO
SELECT t2.Dep_id AS 部门编号, t2.Dep_name AS 部门名称, t1.Emp_name AS 姓名, t1.Wage AS 工资
FROM Employees t1, Departments t2 WHERE t1.Dep_id= t2.Dep_id ORDER BY t2.Dep_id
COMPUTE AVG(Wage) BY t2.Dep_id
GO
步骤及结果:
分析:ORDER BY语义为按什么排序,上列就是按部门编号排序显示。
实验内容:
18.查询每个员工的明细信息。查询结果包括姓名、性别、职务和对应的部门名称。对于没有员工的部门,在查询结果中要同样列出,其对应的员工信息显示为空(NULL)。(提示:使用外连接,使用表Employees和表Departments)
方法:
Use HrSystem
GO
SELECT t1.Emp_name,t1.Sex,t1.Title,t2.Dep_name FROM Employees t1 RIGHT JOIN Departments t2
ON t1.Dep_id=t2.Dep_id
GO
步骤及结果:
分析:设使用连接查询的时候,需要对待查询的多张表设置标签。RIGHT JOIN(右边为主表)在左边表没有值时自动补为NULL值。
实验内容:
19.实现第18题功能,改成使用INNER JOIN实现表间链接。
方法:
Use HrSystem
GO
SELECT t1.Emp_name,t1.Sex,t1.Title,t2.Dep_name FROM Employees t1 INNER JOIN Departments t2
ON t1.Dep_id=t2.Dep_id
GO
步骤及结果:
分析:INNER JOIN为连接查询中外查询关键字之一,会自动滤除空值项。
实验内容:
20.查询每个部门所包含的员工信息。查询结果包括姓名、性别、职务和对应的部门名称。对于没有员工的部门,在查询结果中要同样列出,其对应的员工信息显示为空(NULL)。(提示:使用外连接,使用表Employees和表Departments)
方法:
Use HrSystem
GO
SELECT t2.Dep_name,t1.Emp_name,t1.Sex,t1.Title FROM Departments t2 lEFT JOIN Employees t1
ON t1.Dep_id=t2.Dep_id
GO
步骤及结果:
分析:外连接查询中使用lEFT JOIN关键字时,左边表为主表。
实验内容:
21.使用子查询实现:查询部门为‘办公室’的员工。
方法:
Use HrSystem
GO
SELECT *FROM Employees WHERE Dep_id IN
(SELECT Dep_id FROM Departments WHERE Dep_name
IN (SELECT Dep_name FROM Departments WHERE Dep_name="办公室"))
GO
步骤及结果:
分析:子查询为嵌套SELECT查询语句,根据其他表条件设置查询内容,可以多层嵌套。
三、实验小结【对自己而言,通过实验学到的关键技术方法】
数据库中表的查询可以设置相关条件筛选的显示所需要的信息,并按特定的要求显示;设置查询条件的关键字有:WHERE、BETWEEN、IN、LIKE,其中LIKE为模糊查询,“%、_、[]、[^]”分别表示多个字符、单个字符、在该范围和不在该范围;ORDER BY为排序查询结果的关键字,GROUP BY为分组查询内容的关键字;连接查询中包括:内连接、外连接(左向、右向和完整外部连接)和交叉连接;子查询就是使用嵌套查询语句,可以多层嵌套使用,相关关键词有:SELECT、IN、“等号”、EXISTS、HAVING等;查询结果可以单独保持到另一个新的表格中。智者乐水,仁者乐山,幸福之人关注“理工科日记”
获取原文文档请关注微信公众号“理工科日记”,回复数据库获取。
本文如果对你有帮助,请点赞收藏《「SQL」基础实验——select语句》,同时在此感谢原作者。