오답노트 6

[SQLD / 노랭이] p. 62: 49번

-- 주어진 오라클 SQLSELECT A.게시판ID, A.게시판명, COUNT(B.게시글ID) AS CNTFROM 게시판 A, 게시글 BWHERE A.게시판ID = B.게시판ID(+)AND B.삭제여부 = 'N'AND A.사용여부 = 'Y'GROUP BY A.게시판ID, A.게시판명ORDER BY A.게시판ID; ✏️ 정답: 1번SELECT A.게시판ID, A.게시판명, COUNT(B.게시글ID) AS CNTFROM 게시판 ALEFT OUTER JOIN 게시글 BON (A.게시판ID = B.게시판ID AND B.삭제여부 = 'N')WHERE A.사용여부 = 'Y'GROUP BY A.게시판ID, A.게시판명ORDER BY A.게시판ID;🔎 코드 분석1️⃣ SELECT A.게시판ID, A.게시판명, COU..

[SQLD / 노랭이] p.42: 19번

SELECT 고객이름, SUM(수량)FROM 고객, 상품, 주문WHERE 고객.고객번호 = 주문.고객번호 AND 상품.상품번호 = 주문.상품번호GROUP BY 고객.고객이름HAVING MAX(수량) > 10;🔎 코드 분석1️⃣ SUM(수량): 고객이 주문한 전체 수량의 합2️⃣ GROUP BY 고객.고객이름: 고객별 그룹화3️⃣ HAVING MAX(수량) > 10: 고객별 주문 중 가장 큰 단일 주문 수량이 10보다 커야 함  ➡️ 단일 주문 수량: 한 번의 주문에서 구매한 수량이 10개 초과일 때!4️⃣ MAX(수량): 고객이 주문한 수량 중 가장 큰 값을 찾음✏️ 정답: 2번 (수량이 10보다 큰 주문을 한 고객을 찾음) 더보기더보기열한 번 이상 상품을 주문한 고객이름과 주문한 수량의 합을 구한다..

[SQLD / 노랭이] p.49: 28번

ID100100200200200999999SELECT ID FROM TBL GROUP BY ID HAVING COUNT(*) = 2 ORDER BY (CASE WHEN ID = 999 THEN 0 ELSE ID END)🔎 코드 분석1️⃣ GROUP BY ID: ID 값을 기준으로 그룹화2️⃣ HAVING COUNT(*) = 2: 그룹 내 개수가 2인 ID만 선택ID 값개수1002 ✔️2003 ❌ (제외)9992 ✔️🟰 ID 100과 999만 선택3️⃣ ORDER BY (CASE WHEN ID = 999 THEN 0 ELSE ID END):  - ID = 999 이면 정렬 우선순위를 0으로 설정 🟰 가장 먼저 정렬됨  🧐 이게 무슨 소리나면:   - ID = 999 ➡️ 정렬 값이 0 ➡️ 제일 위..

[SQLD / 노랭이] p.63: 50번

COL1COL2COL31020NULL15NULLNULL507020 🗒️ 해설1️⃣ SELECT SUM(COL2) FROM TAB1 결과가 NULL인지- SUM(COL2)는 NULL 값을 무시하고 합계를 계산한다.- COL2의 값: 20, NULL, 70 ➡️ NULL을 제외하고 계산하면 20+70=90❌결과는 90 ➡️ 1번은 틀림. 2️⃣ SELECT SUM(COL1 + COL2 + COL3) FROM TAB1 결과가 185인지- 각 행별로 (COL1+COL2+COL3) 계산:  - 첫 번째 행: 10+20+NULL= NULL  - 두 번째 행: 15+NULL+NULL= NULL  - 세 번째 행: 50+70+20= 140- SUM()은 NULL 값을 무시하고 남은 값만 더하므로 140만 남는다.❌ ..

[SQLD / 노랭이] p.50: 30번

SELECT TO_CHAR(TO_DATE('2019.02.25', 'YYYY.MM.DD') + 1/12/(60/30), 'YYYY.MM.DD HH24:MI:SS') FROM DUAL; 🗒️ 해설✏️ 쿼리 분석1️⃣ TO_DATE('2019.02.25', 'YYYY.MM.DD')- 2019.02.25 문자열을 날짜 형식(DATE)으로 변환2️⃣ 1/12/(60/30)- 1/12: 1시간(1)을 12로 나누면 5분(0.0833)- (60/30) = 2- 1/12/2 = (1/12) * (1/2) = 1/24- 1/24은 하루(1)의 1/24 ➡️ 1시간 추가 ✏️ 정답: 2019.02.25 01:00:00