SQL select语句的工作原理

时间:2016-05-22 05:31:26

标签: sql select oracle11g

我执行了以下查询,但它确实有效。我想了解它的工作原理。

select 50+2 from employees

仅当'employees'表存在时才有效。如果我提到一个不存在的表,那么它会抛出一个错误。

如何针对用户定义的表评估此类表达式?

3 个答案:

答案 0 :(得分:3)

MySQL首先做的是它使用它的解析器来读取SQL语句并将其分成它的逻辑部分。解析器(不仅由MySQL使用,而且经常在编程中使用)只是一块代码块,用于检索原始信息,并将其转换为程序可以使用的内容。

对于MySQL,它将分开

SELECT 50+2 FROM employees

进入SELECT 50+2FROM employees

因此,让我们分析这两者的作用。 SELECT保留字用于标识用户希望从操作中获得的内容。它通常包含列名。但是,如果您包含名为" hello "的字符串,则MySQL会解释您要选择" hello "。在这种情况下,您要选择一个50+2结果的数字。

现在FROM employees的作用是告诉MySQL您希望从哪个表中选择此信息。 50+2不是列,甚至不是表中的任何内容,这并不重要。 MySQL不是一个人工智能系统,并且不会问你为什么决定这样做的问题,它只是执行按照既定规则设计的命令。

现在,MySQL将查看整个表,并返回每行的选定列,这些列与查询的WHERE ...部分中存在的条件一致。如果查询没有WHERE ...部分,则假定您要返回所有行。

您的查询结果将是一个满值52的列,其行数与您的表格相同。如果您的表有5行,结果将是:

52
52
52
52
52

答案 1 :(得分:1)

如果您想表达,请使用SELECT .. Dual

select 50+2 from dual

这也会导致52

为什么select 50+2 from employees因为它只是一个常量值,将显示在表的所有行中,例如,下面的查询也将为所有行生成常量值“A”

Select 'A',col1,col2 from yourtable

答案 2 :(得分:0)

如果您不想引用任何现有表,并且仍想计算表达式(请注意单个表达式),则可以在oracle中使用DUAL表。

select 50+2 from dual;

select 1*2*3 from dual;

来自oracle doc,

名为DUAL的表是数据字典中的一个小表,Oracle数据库和用户编写的程序可以引用该表来保证已知结果。该表有一列名为DUMMY,一行包含值X。