sql小记,20250319

发布于:2025-03-20 ⋅ 阅读:(17) ⋅ 点赞:(0)

ps:基于sqlserver

一、绩效管理系统表设计

1.表设计

Users用户表:包含id,用户名,密码。
AppraisalBases评价(职位基数)表:包含职位id,职位年终奖基数
AppraisalCoeffcients评价系数表:包含类别id, 类别(迟到、早退、加班)、系数(0.1、0.2)、指数(1,-1)
UserAppraisals用户评价表(用户迟到了多少次,加班多少次):包含用户id,评价系数id,迟到次数,早退,加班次数。

2.对应sql

新建用户:

INSERT INTO Users (UserName, Password) VALUES ('JohnDoe', 'SecurePass123');    

更新用户表:

UPDATE Users SET PassWord=@PassWord,UserName=@UserName WHERE Id = @Id

查询用户和职位的关系:(1、2表联查)

SELECT u.Id,u.UserName,u.Sex,u.BaseTypeId,u.IsDel,a.AppraisalBase,a.BaseType From Users u LEFT JOIN AppraisalBases a ON u.BaseTypeId = a.Id

查询用户迟到了多少次:(3、4表联查)

SELECT ua.*,ac.AppraisalType,ac.AppraisalCoefficient,ac.CalculationMethod FROM UserAppraisals ua LEFT JOIN AppraisalCoefficients ac ON ua.CoefficientId = ac.Id

四个表一起联查,根据某教学视频,发现是把1、2表联查结果和3、4表联查结果给遍历合并。应该也可以四表联查。

二、学生选课四表联查

1.表设计

假设存在四个表,分别是 Students、Courses、Enrollments 和 Teachers,它们的结构和关联关系如下:
Students 表存储学生信息,包含 StudentID(学生编号,主键)和 StudentName(学生姓名)。
Courses 表存储课程信息,包含 CourseID(课程编号,主键)和 CourseName(课程名称)。
Enrollments 表存储学生选课信息,包含 EnrollmentID(选课编号,主键)、StudentID(外键,关联 Students 表的 StudentID)和 CourseID(外键,关联 Courses 表的 CourseID)。
Teachers 表存储教师信息,包含 TeacherID(教师编号,主键)、TeacherName(教师姓名)和 CourseID(外键,关联 Courses 表的 CourseID)。

2.对应sql

SELECT 
    s.StudentName,
    c.CourseName,
    t.TeacherName
FROM 
    Students s
JOIN 
    Enrollments e ON s.StudentID = e.StudentID
JOIN 
    Courses c ON e.CourseID = c.CourseID
JOIN 
    Teachers t ON c.CourseID = t.CourseID;    

三、左连接,右连结、内连接的区别

JOIN(内连接):只返回两个表中匹配的记录。
LEFT JOIN(左外连接):返回左表的所有记录以及右表中匹配的记录,右表无匹配记录时显示 NULL。
RIGHT JOIN(右外连接):返回右表的所有记录以及左表中匹配的记录,左表无匹配记录时显示 NULL。
在实际使用中,可根据具体的查询需求选择合适的连接类型。若需要获取所有记录,可考虑使用外连接;若只需匹配的记录,则使用内连接。