如果我运行以下SQL查询
SELECT *
FROM A
LEFT JOIN B
ON A.foo=B.foo
WHERE A.date = "Yesterday"
Run Code Online (Sandbox Code Playgroud)
请问WHERE声明得到之前或之后的评价JOIN?
如果之后,什么是更好的方式来编写此语句,以便只返回A从中的行"Yesterday"连接到B?
所以我被分配来评估两个查询的性能并得出了令人惊讶的结果.我之前被告知HAVING比较慢,WHERE因为它只在访问行后过滤结果.这似乎是合理的,这个关于SQL子句执行顺序的问题强调了这一点.
但是,我估计以下查询的性能有一些假设,似乎使用HAVING执行实际上更快!
SELECT status, count(status)
FROM customer
GROUP BY status
HAVING status != 'Active' AND status != 'Dormant'
SELECT status, count(status)
FROM customer
WHERE status != 'Active' AND status != 'Dormant'
GROUP BY status
Run Code Online (Sandbox Code Playgroud)
假设是:
CUSTOMER有100 000条记录基于此,我的估计是:
First query:
Accessing all rows, FROM: 100 000 * 0.01ms = 1000ms
GROUP BY: 100 000 * 0.005ms = 500ms
HAVING (2 conditions, 3 groups): 2 …Run Code Online (Sandbox Code Playgroud) 在 Oracle 中,首先评估哪些子句类型?如果我有以下内容(假装 .... 代表有效的表达式和关系名称),评估的顺序是什么?
SELECT ...
FROM .....
WHERE ........
GROUP BY ...........
HAVING .............
ORDER BY ................
Run Code Online (Sandbox Code Playgroud)
我的印象是 SELECT 子句是最后评估的,但除此之外我一无所知。
请看下面的查询
SELECT
product_id, SUM(unit_price * quantity) Total
FROM
tblOrders
GROUP BY
product_id
HAVING
SUM(unit_price * quantity) > 1000
Run Code Online (Sandbox Code Playgroud)
上面的查询工作正常。但是您可以在其中看到查询中,Total是一个计算列,并且在子句中再次使用相同的计算HAVING。
如何避免在HAVING子句中使用相同的计算?
想象一下,我有一个包含{id,username,firstname,lastname}的客户的数据库表
如果我想找到有多少个不同名字的实例我可以做:
select firstname,count(*) from Customers group by 2 order by 1;
username | count(*)
===================
bob | 1
jeff | 2
adam | 5
Run Code Online (Sandbox Code Playgroud)
如何编写相同的查询只返回多次出现的名字?即在上面的例子中只返回jeff和adam的行.
如果查询同时包含group by和order by子句,那么SQL后面的执行顺序是什么.它取决于它们在查询中的位置???
我有一个包含以下列的表:DATE, TICKER, and ID.
基本上,我正在尝试使用下面的代码选择所有的代码及其相应的ID(它可以有多个ID).但是,在表中,有多个条目,其中代码可以具有相同的ID,但属于不同的日期,因此在这种情况下,我选择具有最小日期的ID.
SELECT
MIN(DATE),
TICKER,
ID
FROM Names
GROUP BY
TICKER,
ID
WHERE TICKER IN ('A', 'B')
Run Code Online (Sandbox Code Playgroud)
现在,当我独立地尝试命令时,它可以工作,但是当我将命令GROUP BY和WHERE IN命令组合在一起时,我认为出现了问题,因为我收到语法错误.
如果有什么不清楚,请告诉我,我会尽力澄清一下.
sql ×8
oracle ×2
where ×2
aggregate ×1
clause ×1
database ×1
having ×1
informix ×1
join ×1
mysql ×1
optimization ×1
performance ×1
sql-server ×1
t-sql ×1