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;

最后结果应是:

相关推荐
白衣鸽子39 分钟前
数据库高可用设计的灵魂抉择:CAP权衡
数据库·后端
DokiDoki之父2 小时前
Mybatis—入门 & (配置)SQL提示和日志输出
数据库·sql·mybatis
TDengine (老段)3 小时前
TDengine 数据函数 LN 用户手册
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
机灵猫3 小时前
Redis 在订单系统中的实战应用:防重、限流与库存扣减
数据库·redis·缓存
木易2.03 小时前
从零构建RAG知识库管理系统(二)
数据库·oracle
程序新视界3 小时前
什么是MySQL JOIN查询的驱动表和被驱动表?
数据库·后端·mysql
lingggggaaaa3 小时前
小迪安全v2023学习笔记(一百三十四讲)—— Windows权限提升篇&数据库篇&MySQL&MSSQL&Oracle&自动化项目
java·数据库·windows·笔记·学习·安全·网络安全
小光学长3 小时前
基于Vue的保护动物信息管理系统r7zl6b88 (程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
一匹电信狗4 小时前
【MySQL】数据库的相关操作
linux·运维·服务器·数据库·mysql·ubuntu·小程序
TDengine (老段)5 小时前
连接 TDengine 遇到报错 “failed to connect to server, reason: Connection refused” 怎么办?
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据