📑
SubQuery
1. SELECT 절에서의 사용
select
username, (select top 1 username from testTable)
from
testTable
*하나의 값만 반환 가능. 둘 이상은 오류 발생.
2. FROM 절에서의 사용
select
a.*
from
(
select username from testTable where username like '%e%'
) as a
3. WHERE 절에서의 사용
select
a.*
from
(
select username from testTable where username like '%e%'
) as a
*하나의 값만 반환 가능. 둘 이상은 오류 발생.
다중 값이 필요한 경우 IN을 이용
SQL CODE KATA
Ⅰ. 구매횟수가 가장 적은 사람의 아이디와 이름 조회(중복값 무시하고 한 명만 조회).
SELECT T_USER.USER_ID, T_USER.USER_NM, CNT
FROM T_USER
LEFT JOIN (SELECT USER_ID, COUNT(USER_ID) AS CNT FROM T_ORD GROUP BY USER_ID) AS T_ORD
ON T_USER.USER_ID = T_ORD.USER_ID
ORDER BY CNT
LIMIT 1;
* LEFT OUTER JOIN이 아닌 INNER JOIN을 하면 NULL인 값은 조회되지 않음.
Ⅱ. 박미진 사용자의 주문 내역 조회. "아이디", "사용자이름", "연락처", "주소", '[카테고리명]상품명' AS "상품명", "수량", "가격", "결제금액" 으로 표현해주세요. (임직원으로 등록된 사용자임. 결제금액은 합산 후 할인율이 적용된 금액.)
Ⅲ. 매출액이 가장 많은 카테고리를 찾아 해당 카테고리의 카테고리, 상품명, 매출액을 조회하고, 매출액을 내림차순으로 정렬하여 표현.
SELECT
CTGRY_NM '카테고리',
GOODS_NM '상품명',
ORD_QY*SUPLY_PC TOTAL_ORD_AMT
FROM T_ORD O
JOIN T_ORD_DETAIL D ON O.ORD_NO = D.ORD_NO
JOIN T_GOODS G ON D.GOODS_ID = G.GOODS_ID
JOIN T_GOODS_CTGRY C ON G.CTGRY_CD = C.CTGRY_CD
WHERE C.CTGRY_CD = (
SELECT C.CTGRY_CD
FROM T_ORD O
JOIN T_ORD_DETAIL D ON O.ORD_NO = D.ORD_NO
JOIN T_GOODS G ON D.GOODS_ID = G.GOODS_ID
JOIN T_GOODS_CTGRY C ON G.CTGRY_CD = C.CTGRY_CD
GROUP BY C.CTGRY_CD
ORDER BY SUM(ORD_QY*SUPLY_PC) DESC LIMIT 1
)
GROUP BY G.GOODS_ID # PK
ORDER BY TOTAL_ORD_AMT DESC;