为什么这些语句有效[使用SQL2008 R2]
Select* FROM TableName --UPDATE: this is not allowed in Oracle (10g)
和
Select *From TableName --UPDATE: this is allowed in Oracle (10g)
现在这个
Select*From TableName --UPDATE: this is not allowed in Oracle (10g)
更新: SQL Server中允许这三个
我以这种方式认识Select * From TableName
答案 0 :(得分:5)
在这些实例中,不需要空格来识别语句的不同标记。
通常,编程语言解析器通过将文本分成不同的标记来工作。在本例中的SQL Server中,关键字搜索在“select”处完成,因为您不能拥有*
的关键字。 *
被放入下一个标记。
你甚至可以这样做(看不到空间)。可能是丑陋的
select*from[master]..[spt_values]where[type]='p'
答案 1 :(得分:0)
您是在问他们有效的原因,还是为什么他们能够执行您需要的操作,即列出所有内容 - 包括指定数据库的字段,记录和数据 - 整个命名数据库结构?原因是SQL理解并注意到它的关键字或其内置命令,就像你拼写命令字一样,无论你放置字符的位置如,它总能工作,以及命令将被执行。尽管命令的语法和结构是完整的,例如当你有SELECT(what())FROM(where(tablename));
时,SELECT命令就完成了如果你想要,你可以添加WHERE命令:SELECT(what(*))FROM(where(tablename))WHERE(condition);每个内置命令或与SQL相关的关键字之间的空间无关紧要。