sql server 练习题5

课后作业

在homework库下执行

作业1:

案例:根据用户分数划分等级。小于60分为不及格,[60,80)为及格,[80,90)为良好,大于等于90分以上为优秀。

建表语句:

CREATE TABLE Grades (

ID INT PRIMARY KEY,

Name VARCHAR(50),

Score INT

);

数据插入语句:

-- 插入一些示例数据

INSERT INTO Grades (ID, Name, Score) VALUES (1, '张三', 95);

INSERT INTO Grades (ID, Name, Score) VALUES (2, '李四', 85);

INSERT INTO Grades (ID, Name, Score) VALUES (3, '王五', 70);

INSERT INTO Grades (ID, Name, Score) VALUES (4, '赵六', 58);

INSERT INTO Grades (ID, Name, Score) VALUES (5, '陈七', 30);

查询语句:

sql 复制代码
select Name, case  when Score>90 then '优秀' 
when Score>=80 and Score<90  then '良好'
when Score>=60 and Score<80 then '及格'
else  '不及格' end from Grades;

希望得到的结果如下:

作业2:

查询过去一周内的活动记录

建表语句

CREATE TABLE ActivityLog (

ActivityID INT PRIMARY KEY IDENTITY(1,1),

UserID INT NOT NULL,

ActivityType VARCHAR(50) NOT NULL,

ActivityTime DATETIME NOT NULL

);

这个ActivityLog表设计包含ActivityID(主键,自动增长)、UserID(执行活动的用户ID)、ActivityType(活动类型,如登录、发布、评论等)和ActivityTime(活动发生的时间)字段。

数据插入语句

接下来,我们将插入一些示例数据,确保其中包含过去一周内的活动记录:

-- 插入过去一周内的活动记录

INSERT INTO ActivityLog(UserID, ActivityType, ActivityTime)

VALUES (101, 'Login', DATEADD(DAY, -3, GETDATE())), -- 三天前的登录活动

(102, 'Post', DATEADD(HOUR, -24, GETDATE())), -- 昨天的发帖活动

(103, 'Comment', DATEADD(DAY, -6, GETDATE())), -- 六天前的评论活动

(104, 'Logout', DATEADD(HOUR, -72, GETDATE())), -- 三天前的登出活动

(105, 'Like', GETDATE() - 7); -- 正好一周前的点赞活动

-- 插入超过一周的活动作为对比

INSERT INTO ActivityLog(UserID, ActivityType, ActivityTime)

VALUES (106, 'Share', DATEADD(WEEK, -2, GETDATE())); -- 两周前的分享活动

这些插入语句模拟了不同用户在过去一周内进行的各种活动记录,同时也加入了一条超过一周的记录作为对比,以便在执行查询时能明确区分哪些活动是在过去一周内发生的。

如果你想找出最近一周内所有的活动记录,查询语句应写为:

sql 复制代码
select *from ActivityLog where ActivityTime>=dateadd(week,-1,getdate());

作业3:

计算订单处理时长

如果有Orders表,包含OrderPlaced(订单下单时间)和OrderCompleted(订单完成时间)字段,你可以计算每个订单的处理时长:

建表语句

首先,我们来创建一个Orders表,以保存订单的放置时间和完成时间,以及其他可能需要的信息。

CREATE TABLE Orders (

OrderID INT PRIMARY KEY IDENTITY(1,1),

CustomerID INT NOT NULL,

OrderPlaced DATETIME NOT NULL,

OrderCompleted DATETIME,

TotalAmount DECIMAL(10, 2) NOT NULL

);

在这个表结构中,OrderID是主键且自动递增,CustomerID存储客户ID,OrderPlaced和OrderCompleted分别存储订单的放置时间和完成时间,而TotalAmount表示订单总金额。

数据插入语句

接下来,我们向Orders表中插入一些示例数据,包括订单的放置时间和完成时间,以便演示处理时长的计算。

-- 插入订单数据

INSERT INTO Orders(CustomerID, OrderPlaced, OrderCompleted, TotalAmount)

VALUES (101, '2024-05-01 14:30:00', '2024-05-01 15:45:00', 250.99), -- 处理时长1小时15分钟

(102, '2024-05-02 09:00:00', '2024-05-02 10:00:00', 120.50), -- 处理时长1小时

(103, '2024-05-03 16:30:00', NULL, 85.75), -- 未完成订单,处理时长未知

(104, '2024-05-04 10:15:00', '2024-05-04 11:00:00', 175.00); -- 处理时长45分钟

这些插入语句为不同的客户创建了订单记录,其中包含了订单的放置时间、完成时间(有的订单可能还未完成,所以OrderCompleted为NULL),以及订单的总金额。通过前面提供的查询语句,我们可以计算出已完成订单的处理时长(以分钟为单位)。请注意,最后一个订单的OrderCompleted字段是NULL,这意味着该订单尚未完成,所以在执行原始的查询时,它应被排除在外。

查询语句:

sql 复制代码
select *from Orders where OrderCompleted  is not NULL;

最后结果应是:

作业4:

计算员工工龄

假设我们有一个公司员工信息表Employees,其中包含员工的入职日期(HireDate)。我们想要查询每位员工的工龄(以年为单位)。

建表语句

CREATE TABLE Employees (

EmployeeID INT PRIMARY KEY IDENTITY(1,1),

FirstName NVARCHAR(50) NOT NULL,

LastName NVARCHAR(50) NOT NULL,

HireDate DATE NOT NULL

);

这个表格定义了EmployeeID(员工ID,主键自动增长)、FirstName(名)、LastName(姓)和HireDate(入职日期)字段。

数据插入语句

INSERT INTO Employees(FirstName, LastName, HireDate)

VALUES ('John', 'Doe', '2020-01-01'), -- 入职于2020年

('Jane', 'Smith', '2019-07-15'), -- 入职于2019年

('Alice', 'Johnson', '2023-03-20'); -- 入职于2023年

这里插入了三个员工的记录,每个员工的入职日期不同。

查询语句

现在,我们要计算每个员工截止到当前时间的工龄,

查询语句:

sql 复制代码
select *,datediff(year,HireDate,getdate())as 工龄年数 from Employees;

最后结果应是:

相关推荐
SEO-狼术16 分钟前
Enhance Security in Software Crack
数据库
计算机毕设定制辅导-无忧学长27 分钟前
Redis 初相识:开启缓存世界大门
数据库·redis·缓存
Rverdoser1 小时前
redis延迟队列
数据库·redis·缓存
weisian1512 小时前
Redis篇--常见问题篇6--缓存一致性1(Mysql和Redis缓存一致,更新数据库删除缓存策略)
数据库·redis·缓存
中草药z2 小时前
【Spring】深入解析 Spring 原理:Bean 的多方面剖析(源码阅读)
java·数据库·spring boot·spring·bean·源码阅读
地球资源数据云2 小时前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法
Ahern_3 小时前
Oracle 普通表至分区表的分区交换
大数据·数据库·sql·oracle
夜半被帅醒3 小时前
MySQL 数据库优化详解【Java数据库调优】
java·数据库·mysql
不爱学习的啊Biao4 小时前
【13】MySQL如何选择合适的索引?
android·数据库·mysql
破 风4 小时前
SpringBoot 集成 MongoDB
数据库·mongodb