子查詢是一個嵌套在 SELECT、INSERT、UPDATE 或 DELETE 語句或其他子查詢中的查詢。任何允許使用表達式的地方都可以使用子查詢。
1.連接語句join,from中如:
<select id="getExtendedGoodsReport" resultMap="extendedGoodsResultMap"
parameterType="Object">
SELECT
t1.*, CASE
WHEN t2.assessmentSale = 0.00 THEN
NULL
ELSE
round(t1.extendedSale / t2.assessmentSale,6)
END extensionRate,
CASE
WHEN t3.extendedSaleTotal = 0.00 THEN
NULL
ELSE
round(t1.extendedSale / t3.extendedSaleTotal,6)
END rate
FROM
(
SELECT
mpc.category_name AS NAME,
SUM(amount_ybxsje) AS extendedSale
FROM
t_sold_yb yb
RIGHT JOIN m_product_category mpc ON yb.produt_pl = mpc.product_pl
<include refid="extendedGoodsReportWhereClause" />
GROUP BY
mpc.category_no,
mpc.category_name
) t1
INNER JOIN (
SELECT
mpc.category_name AS NAME,
SUM(amount_khxssr) AS assessmentSale
FROM
t_sold_yb yb
RIGHT JOIN m_product_category mpc ON yb.produt_pl = mpc.product_pl
WHERE
zdeptmnt=#{zdeptmnt}
<if test="categoryList != null and categoryList.size()!=0">
and produt_pl IN
<foreach collection="categoryList" item="item" index="index" open="(" close=")" separator=",">
#{item.categoryNo}
</foreach>
</if>
<![CDATA[
AND yb."DATE" >= #{startTimeStr,jdbcType=VARCHAR}
AND yb."DATE" <= #{endTimeStr,jdbcType=VARCHAR}
]]>
GROUP BY
mpc.category_no,
mpc.category_name
) t2 ON t1.NAME = t2.NAME
NATURAL JOIN (
SELECT
SUM(amount_ybxsje) AS extendedSaleTotal
FROM
t_sold_yb yb
<where>
zdeptmnt=#{zdeptmnt}
<if test="zplant != null and zplant != ''">
and zplant=#{zplant}
</if>
<![CDATA[
AND yb."DATE" >= #{startTimeStr,jdbcType=VARCHAR}
AND yb."DATE" <= #{endTimeStr,jdbcType=VARCHAR}
]]>
</where>
) t3
ORDER BY t1.extendedSale DESC
</select>
2.in,>,=等表達式中
in中:
SELECT ename,job,sal
FROM EMP
WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE 'A%');
“=”中:
select ename,deptno,sal
from emp
where deptno=(select deptno from dept where loc='NEW YORK');