不可以.SQL是一种抽象,可以通过具有不同物理布局的不同SQL环境的不同SQL实现来解释。也许布局甚至会随着时间而变化,就像你一样 ALTER TABLE 现在你混合了旧的和新的元组布局。此外,您可以使用SQL做更多的事情 跑 它。您还可以对其进行类型检查,分析它以查看它具有哪种效果,将其放在视图定义或存储过程中等。
ALTER TABLE
这是另一种说法。你可以“编写”HTML作为汇编语言吗?也许你可以编写一个程序,当执行时,它与渲染特定页面的浏览器具有相同的效果。但是你的程序可以通过AdBlock,NoScript以及我安装的其他任何过滤器进行处理吗?任何支持 所有 HTML上的相关操作将与HTML本身同构。与SQL和任何其他语言类似。事实上,任何其他数据结构:表示的变化必须保留该数据结构上所有相关操作的含义。语言往往有很多相关的操作。
(*我不是说“vs编译”中的“解释”;我的意思是“赋予意义”。)
然而,SQL语言甚至不允许键入粗略的汇编指令,而诸如基于C和C#的常用语言允许这样的键入/导入。
不,SQL不允许这样做,因为它是一种比C(或C#)更高级的语言。在SQL中,代码描述了应该做什么,而不是如何做,以及如何做的任何细节。实现必须解析代码并将其编译为执行SQL代码描述的集合或低级指令。
例如,对于SELECT,我们无法保证访问表的计划将是什么,将以何种顺序访问它们,将使用哪些(如果有)索引,将使用哪种类型的操作进行连接,如果将使用临时表或在内存中完成排序等...
因此,这样的事情将是不明确的,并且被允许是非常危险的:
SELECT * FROM a_table AS a JOIN another_table AS b ON b.aid = a.id WHERE b_data LIKE 'Alex%' ( .CODE getRSP PROC mov rax, rsp add rax, 8 ret getRSP ENDP END ) AND a_date BETWEEN '2000-01-01' AND '2099-12-31' ORDER BY b_year
如果您对汇编程序的关系查询/操作编译感兴趣,可能需要查看本文: http://www.vldb.org/pvldb/vol4/p539-neumann.pdf 。在这个DBMS中,LLVM的组件用于从DBMS中的查询生成CPU指令(我假设你说汇编程序时的意思)。
此外,即使我可能正在向合唱团讲道,我想说清楚MAL与CPU指令汇编程序无关。由C. MAL中的实现支持的每个MAL语句仅用于(taadaa :)作为易于优化和解释的中间表示。
好吧,机器执行你可以用汇编写的指令。但是,我不会直接调用汇编语言来执行SQL查询。 SQL的解释可能有很大不同......例如由图书馆员咨询百科全书,在原始装配可能没什么意义的情况下。