left join 连接查询的where是全部连接完之后判断还是连接前判断
时间: 2023-09-09 22:13:43 浏览: 23
在使用 LEFT JOIN 连接查询时,WHERE 子句是在连接完成之后进行筛选的。这意味着,首先会将两个表连接起来,然后再过滤掉不符合 WHERE 条件的行。因此,LEFT JOIN 会返回左表中所有的行,而右表中没有匹配的行则返回 NULL。如果你需要在连接之前进行筛选,可以使用子查询或者临时表来实现。
相关问题
where连接和left join连接的区别
WHERE连接和LEFT JOIN连接的区别在于它们执行连接操作的方式不同。
WHERE连接是通过在WHERE子句中指定连接条件来连接两个或多个表。它只返回在连接条件为真的行,并且不会返回NULL值。
LEFT JOIN连接是通过在LEFT JOIN子句中指定连接条件来连接两个或多个表。它返回左表中的所有行和右表中满足连接条件的行,并在右表中找不到匹配行的地方返回NULL值。
换句话说,WHERE连接只返回匹配的行,而LEFT JOIN连接返回左表中的所有行和右表中匹配的行,如果右表中没有匹配的行,则返回NULL。
将他们进行left join连接
将上述引用中的表进行left join连接的SQL语句如下所示:
```
SELECT
a.login_date,
log_cnt,
yd_date,
jk_date,
xd_date,
fk_date
FROM
(SELECT
login_date,
COUNT(DISTINCT customer_id) AS log_cnt
FROM
jfu_dwddwd_user_wk_login_di
WHERE
login_date BETWEEN '20231101' AND '20231110'
AND p_da) a
LEFT JOIN
(SELECT
loan_date,
COUNT(DISTINCT customer_id) AS yd_date
FROM
bd_srcwk_t_order_detail_log
WHERE
loan_date BETWEEN '20231101 000000' AND '20231110 000000'
AND) b ON a.login_date = b.loan_date
LEFT JOIN
(SELECT
login_date,
COUNT(DISTINCT customer_id) AS jk_date
FROM
bd_srcwk_t_distribute_log
WHERE
create_time BETWEEN p_day_id AND y_id
GROUP BY
login_date) c ON a.login_date = c.login_date
LEFT JOIN
(SELECT
loan_date,
COUNT(DISTINCT customer_id) AS xd_date
FROM
bd_srcwk_wk_loan_order
WHERE
loan_date BETWEEN '20231101 000000' AND '20231110 000000'
AND p_day_id = date_sub(getdate(), 1)
GROUP BY
loan_date) d ON a.login_date = d.loan_date
LEFT JOIN
(SELECT
loan_time,
COUNT(DISTINCT customer_id) AS fk_date
FROM
wbdrm_loan_performance
WHERE
loan_time BETWEEN '20231101 000000' AND '20231110 000000'
AND p_day_id = date_sub(getdate(), 1)
GROUP BY
loan_time) e ON a.login_date = e.loan_time;
```