sql - SQL Server 代码之间的区别?

标签 sql sql-server

对于学校作业,我必须创建一个数据库并运行报告。我创建了代码,一位同学也创建了代码,它运行相同的东西,但他的格式我没见过,也不太理解。

这是我的:

SELECT
    Course.Name AS 'Course Name', 
    Program.Name AS 'Program Name'
FROM
    Course, Program, ProgramCourse
WHERE 
    ProgramCourse.CourseID = Course.ID
AND
    ProgramCourse.ProgramID = Program.ID
GO

这是他的:

CREATE VIEW NumberOfCoursePerProgram AS
        SELECT
                p.name AS ProgramName,  
                c.name AS CourseName
        FROM
                Program p
        JOIN
                ProgramCourse pc ON pc.ProgramID = p.ID
        JOIN 
                Course c ON c.ID = pc.CourseID
GO

我使用我创建的表中的数据运行了这两个查询。它们返回的结果几乎相同,只是顺序略有不同,但它满足了作业问题。无论如何,如果我从他的代码中删除Program p中的p,它会返回一个错误

The multi-part identifier "p.name" could not be bound.

那么当我还没有建立这些变量时,SQL Server 如何能够接受 p.namep.ID 等呢?我不太明白代码在他的身上是如何工作的。我的看起来简单明了,我绝对明白那里发生了什么。那么有人可以解释一下他的吗?

谢谢

最佳答案

有一些差异。首先,他创建了一个 VIEW 而不仅仅是一个 select 语句:

CREATE VIEW NumberOfCoursePerProgram AS

创建 View 后,您可以像查询表一样查询 View :

SELECT * FROM NumberOfCoursePerProgram;

其次,他使用的是 ANSI JOIN,而不是隐式 JOIN。他的方法更现代,而且按照今天的标准,很可能被认为更正确:

JOIN ProgramCourse pc ON pc.ProgramID = p.ID
JOIN Course c ON c.ID= pc.CourseID

而不是:

FROM Course, Program, ProgramCourse

另外,请注意他正在分配 table aliases当他引用表格时:

FROM Program p

末尾的 p 允许您替换 p,而不是在查询中的其他位置指定 Program 的整个表名称。例如,您现在可以说 WHERE p.Foo > 5 而不是 WHERE Program.Foo > 5。在这种情况下,它只是一个快捷方式并保存一些字符。但是,假设您两次引用同一个表(例如,在同一个表的两个不同行中进行 JOIN)。在这种情况下,您可能必须为每个表提供别名,以区分哪个表是哪个表。

关于sql - SQL Server 代码之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20081119/

相关文章:

mysql - 从另一个表更新平均值的触发器

mysql - SQL 未按预期工作

mysql - 使用 CONCAT_WS 错误更新表

java - Sql Server数据库中的uniqueidentifier - 如何在Java环境中生成?

c# - 无法将值 NULL 插入 EF 6.1.3 中的列

sql - 如果我想将一段时间保存到数据库中,我会使用什么数据类型?

php - 在 php 中获取最近的日期

sql - 有哪些好的 SQL 播客?

sql-server - 计划执行代码以在 SQL Server 中进行数据库操作

sql-server - SQL Server 如何在特定时间自动触发查询