从不同表中检索数据(SQL Server)

时间:2014-03-24 10:58:08

标签: sql sql-server

我在SQL Server数据库中有4个表,其中包含以下模式:

  1. 考勤

    CREATE TABLE [dbo].[Attendance] (
    [AttendanceId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [CourseId]     UNIQUEIDENTIFIER NOT NULL,
    [StudentId]    UNIQUEIDENTIFIER NOT NULL,
    [SubjectId]    UNIQUEIDENTIFIER NOT NULL,
    [Semester]     INT              NOT NULL,
    [Month]        NVARCHAR (50)    NOT NULL,
    [Count]        INT              NOT NULL,
    CONSTRAINT [PK_Attendance] PRIMARY KEY NONCLUSTERED ([AttendanceId] ASC),
    CONSTRAINT [FK_Attendance_Student] FOREIGN KEY ([StudentId]) REFERENCES [dbo].[Student] ([StudentId]) );
    
  2. 课程

    CREATE TABLE [dbo].[Course] (
    [CourseId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [Name]     NVARCHAR (50)    NOT NULL,
    CONSTRAINT [PK_Course] PRIMARY KEY NONCLUSTERED ([CourseId] ASC)
    );
    
  3. 学生

    CREATE TABLE [dbo].[Student] (
    [StudentId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [CourseId]  UNIQUEIDENTIFIER NOT NULL,
    [Name]      NVARCHAR (100)   NOT NULL,
    [RollNo]    INT              NOT NULL,
    [Semester]  INT              NOT NULL,
    CONSTRAINT [PK_Student] PRIMARY KEY NONCLUSTERED ([StudentId] ASC),
    CONSTRAINT [FK_Student_Course] FOREIGN KEY ([CourseId]) REFERENCES [dbo].[Course] ([CourseId])
    );
    
  4. 主题

    CREATE TABLE [dbo].[Subject] (
    [SubjectId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [CourseId]  UNIQUEIDENTIFIER NOT NULL,
    [Name]      NVARCHAR (100)   NOT NULL,
    [Semester]  INT              NOT NULL,
    CONSTRAINT [PK_Subject] PRIMARY KEY NONCLUSTERED ([SubjectId] ASC),
    CONSTRAINT [FK_Subject_Course] FOREIGN KEY ([CourseId]) REFERENCES [dbo].[Course] ([CourseId])
    );
    
  5. 我需要按以下格式创建出勤报告:

    课程名称 | 学生姓名 | 主题名称 | 学期 | | 计数

    请告诉我我需要使用哪种SQL查询,如果需要对架构进行任何更改,请提出相同的建议。

    我期待着您的回复。

    谢谢,

1 个答案:

答案 0 :(得分:1)

您需要在查询中使用JOIN,以便它只返回与出勤表中的[StudentId]匹配的行。

e.g。

SELECT c.CourseName, s.StudentName, u.SubjectName, u.Semester, a.Month, a.Count
FROM Student s 
    JOIN Attendance a ON s.StudentId = a.StudentId
    JOIN Course c ON a.CourseId = c.CourseId
    JOIN Subject u ON c.CourseId = u.CourseId

沿着这些行的某些内容只会返回与

特别匹配的行