我正在学习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;
我只是不知道这应该如何工作,首先S
和R
对于给定的数据库没有真正的属性,SELECT S.*
没有&似乎在那里意味着什么。
答案 0 :(得分:2)
在您的示例中,S
和R
被简单地定义为Student
和Results
表的别名。使用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)
S
和R
是别名。 S
是Student
表或视图的别名,R
是Results
表或视图的别名。
别名用于避免每次在查询中引用时键入表的全名。当我们使用可选的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
)。