未知的SQL语法

时间:2016-11-13 15:58:05

标签: sql sql-server tsql

我正在学习SQL课程,而且我在理解我的教授给出的一个例子时遇到了麻烦,我们的工作表中通常会出现很多错误,我们必须纠正但在这里我认为它可能只是来自我对这个主题的明显无知。

因此数据库包含三个如下组织的表:

Student (StudentNumber, Name, Year)
Course (Code, Name, Hours)
Results (StudentNumbber, Code, Grade)

我们要求提供跟随" M11104"编码过程,对数据库服务器进行一次查询。 这是给出的解决方案:

Select S. *
FROM Student S, Results R
WHERE Code = 'M1105'
AND S.StudentNumber = R.StudentNumber;

我只是不知道这应该如何工作,首先SR对于给定的数据库没有真正的属性,SELECT S.*没有&似乎在那里意味着什么。

3 个答案:

答案 0 :(得分:2)

在您的示例中,SR被简单地定义为StudentResults表的别名。使用S.*与说Student.*ALL Columns of the Student Table完全相同。

答案 1 :(得分:1)

这称为“别名”。

当您有表格声明时:

SELECT … FROM [tableName] 'anyCharacter';

语句末尾的字符成为表的别名,您可以使用别名而不是表名,例如:

SELECT st.Name FROM Student st;
--     ^^                   ^^
-- 'st' is an alias for the 'Student' table

答案 2 :(得分:1)

SR是别名。 SStudent表或视图的别名,RResults表或视图的别名。 别名用于避免每次在查询中引用时键入表的全名。当我们使用可选的AS关键字时,它会变得更加清晰:

SELECT
    S.StudentNumber,
    S.Name,
    S.[Year]
FROM Students AS S
INNER JOIN Results AS R ON
  R.StudentNumber=S.StudentNumber
WHERE
  R.Code='M1105'

不建议使用逗号语法,而是使用JOIN。如果对任何表使用别名,那么您还应该使用该别名限定对列的所有引用。如果没有这样做可能会导致模式更改时出现令人讨厌的运行时错误(在您的示例中,如果Code列也添加到第二个表中,则会突然发生模糊列异常)。方括号用于引用保留字的对象名称(语法的一部分或内置函数,如YEAR)。