我到处都在寻找解释,以了解选择语句中的子查询如何工作,但由于解释非常模糊,我仍然无法理解该概念。
我想知道您如何在oracle的select语句中使用子查询以及它的确切输出。
例如,如果我有一个查询,希望显示这些表中员工的姓名及其管理的个人资料数量
员工(EmpName,EmpId)
Profile(ProfileId,…,EmpId)
如何使用子查询?
我当时想在select语句中需要一个子查询,以实现按功能分组以计算每个员工管理的个人档案的数量,但是我不太确定。
这很简单-
SELECT empname,
empid,
(SELECT COUNT (profileid)
FROM profile
WHERE profile.empid = employee.empid)
AS number_of_profiles
FROM employee;
当您使用表联接时,它甚至更简单:
SELECT e.empname, e.empid, COUNT (p.profileid) AS number_of_profiles
FROM employee e LEFT JOIN profile p ON e.empid = p.empid
GROUP BY e.empname, e.empid;
子查询的解释:
本质上,中的子查询select
获取标量值并将其传递给主查询。子查询select
不允许传递多于一行多于一列,这是一个限制。在这里,我们将a传递count
给主查询,据我们所知,该查询将始终只是一个数字-
标量值。如果找不到值,则子查询返回null
到主查询。而且,子查询可以访问from
主查询子句中的列,如我的查询所示,该查询employee.empid
是从外部查询传递到内部查询的。
编辑 :
当在select
子句中使用子查询时,Oracle实质上将其视为左联接(您可以在查询的解释计划中看到此联接),并且行的基数仅在左边的每一行的右边。
左联接的说明
左联接非常方便,尤其是select
由于其限制而要替换子查询时。在此,LEFT JOIN
关键字两侧的表行数没有限制。
有关更多信息,请阅读有关子查询和左联接或左外部联接的Oracle文档。
问题内容: 所以我试图解决这个问题,但似乎最后一行(检查)不允许在其中进行子查询。有什么办法可以使Oracle工作吗? 这是错误信息: 问题答案: 由于CHECK约束不能基于查询,因此有三种基本方法可以解决此类问题。 选项1:触发器 最简单的方法是在TANK上放置一个触发器,以查询TANKS并在LEVEL超过CAPACITY时引发异常。但是,这种简单化方法的问题在于,几乎不可能正确处理并发问题。如
问题内容: 将SELECT查询放在UPDATE查询的WHERE子句中时出现错误。 我的查询是这样的: AND错误将显示如下: “无法在FROM子句中指定目标表’m’进行更新” 问题答案: 实际上,您可以通过将其包装在子查询中来更新它(从而为结果创建临时表) 或使用 JOIN
问题内容: 当我们执行此操作时,将不会有任何结果 我的问题是: 以上查询在逻辑上等效于 就像上面的声明一样,不会有任何结果 请说清楚? 问题答案: 正确(但请注意,这是一个运算符,而不是一个子句,它通常在SQL中这样工作,不仅适用于Oracle)。 等效于: 实际应该写成: 和 与以下内容相同: 结果为: 并进一步作为: 因此,它正确不返回任何行。 请注意,如果您有,它将评估为(在练习中保留),并
来自Teradata,我通常会创建一个包含一些变量的易失性表,我会在代码中使用这些变量。 例如。, 然后我会在SELECT WHERE子句中使用该表: 我试图在色调(Impala editor)中执行类似的操作,但遇到了一个错误: AnalysisException:第5行中的语法错误:未定义:来自表名隐藏^遇到:来自预期的:大小写、强制转换、默认值、存在、FALSE、IF、INTERVAL、NO
问题内容: 给定一个表名和一个列名,我试图动态删除一个我事先不知道名称的Oracle约束。 我可以通过以下查询找到约束名称: 我的第一个想法是使用子查询,但这不起作用,并导致ORA-02250错误: 到目前为止,我唯一可行的解决方案是以下解决方案,但感觉不必要的复杂: 是否有一种方法可以像我最初打算的那样使用子查询来做到这一点?如果不是,那么有人可以建议一种更简洁的方法吗? 问题答案: 你不能
问题内容: 我正在尝试在MySQL选择查询中使用一条语句。 我在第一个语句之后出现错误。 为什么这不起作用?在MySQL查询中执行IF语句的正确方法是什么? 问题答案: 您使用的IF / THEN / ELSE构造仅在存储过程和函数中有效。您的查询将需要重组,因为您不能使用IF()函数来控制WHERE子句的流程。 可以在查询中使用的IF()函数主要用于在查询的SELECT部分中根据某些条件选择