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);

查询语句:

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())); -- 两周前的分享活动

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

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

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,这意味着该订单尚未完成,所以在执行原始的查询时,它应被排除在外。

查询语句:

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年

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

查询语句

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

查询语句:

select *,datediff(year,HireDate,getdate())as 工龄年数 from Employees;

最后结果应是:

相关推荐

  1. python基础练习题5

    2024-07-17 11:32:03       33 阅读
  2. SQL server 数据库练习题及答案(练习5)-存储过程

    2024-07-17 11:32:03       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 11:32:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 11:32:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 11:32:03       58 阅读
  4. Python语言-面向对象

    2024-07-17 11:32:03       69 阅读

热门阅读

  1. C++ 入门15:STL 容器之列表(list)

    2024-07-17 11:32:03       23 阅读
  2. Go语言---并发版爬虫

    2024-07-17 11:32:03       22 阅读
  3. 洛阳建筑设计资质市场未来趋势

    2024-07-17 11:32:03       21 阅读
  4. 数学建模中的辅助变量、中间变量、指示变量

    2024-07-17 11:32:03       25 阅读
  5. CSS Modules:重构前端样式的未来?

    2024-07-17 11:32:03       24 阅读
  6. drop、truncate和delete的区别及效率

    2024-07-17 11:32:03       24 阅读
  7. DDD学习笔记七

    2024-07-17 11:32:03       24 阅读