
SELECT a.ename ||
' was hired on the same month and weekday as ' ||
b.ename msg
FROM emp a, emp b
WHERE (DAYOFWEEK(a.hiredate), MONTHNAME(a.hiredate)) =
(DAYOFWEEK(b.hiredate), MONTHNAME(b.hiredate))
AND a.empno < b.empno
ORDER BY a.ename;
FROM emp a, emp bemp 테이블을 두 번 조회하여 모든 직원 쌍(a, b) 을 생성WHERE (...) = (...)DAYOFWEEK(hiredate) → 입사 요일 (1: Sunday ~ 7: Saturday)MONTHNAME(hiredate) → 입사 월 이름 (예: 'February')AND a.empno < b.empno(a=SMITH, b=JONES)만 남기고 (b=JONES, a=SMITH)는 제거SELECT a.ename || ' was hired on the same ...'"SMITH was hired on the same weekday and month as JONES" 형태의 결과ORDER BY a.enamea.ename) 기준으로 오름차순 정렬SELECT a.ename ||
' was hired on the same month and weekday as ' ||
b.ename AS msg
FROM emp a, emp b
WHERE TO_CHAR(a.hiredate, 'DMon') = TO_CHAR(b.hiredate, 'DMon')
AND a.empno < b.empno
ORDER BY a.ename;
FROM emp a, emp bemp 테이블을 두 번 사용하여 모든 직원 간 쌍(a, b) 을 생성WHERE TO_CHAR(a.hiredate, 'DMon') = TO_CHAR(b.hiredate, 'DMon')TO_CHAR(hiredate, 'DMon'):'2Feb''4Dec'a와 b의 입사일이 같은 요일 + 같은 달이면 조건 만족a.empno < b.empno(ALLEN, SMITH)만 남기고 (SMITH, ALLEN)은 제거SELECT ... || ... || ... AS msga.ename과 b.ename을 연결해 한 줄 메시지로 출력"ALLEN was hired on the same weekday and month as SMITH"ORDER BY a.enamea의 이름 기준으로 정렬SELECT CONCAT(a.ename,
' was hired on the same month and weekday as ',
b.ename) msg
FROM emp a, emp b
WHERE DATE_FORMAT(a.hiredate, '%W%M') = DATE_FORMAT(b.hiredate, '%W%M')
AND a.empno < b.empno
ORDER BY a.ename;
FROM emp a, emp bemp 테이블을 두 번 사용하여 모든 사원 쌍(a, b) 을 생성WHERE DATE_FORMAT(...) = DATE_FORMAT(...)DATE_FORMAT(hiredate, '%W%M'):2024-02-13 (화요일) → 'TuesdayFebruary'2024-12-09 (월요일) → 'MondayDecember'AND a.empno < b.empno(a=ALLEN, b=SMITH)는 남기고 (b=SMITH, a=ALLEN)은 제외SELECT CONCAT(...) AS msg"a.ename was hired on the same month and weekday as b.ename"ORDER BY a.enamea.ename 기준으로 결과를 오름차순 정렬SELECT a.ename +
' was hired on the same month and weekday as ' +
b.ename msg
FROM emp a, emp b
WHERE DATENAME(dw, a.hiredate) = DATENAME(dw, b.hiredate)
AND DATENAME(m, a.hiredate) = DATENAME(m, b.hiredate)
AND a.empno < b.empno
ORDER BY a.ename;
FROM emp a, emp bemp 테이블을 두 번 사용하여 직원 간 모든 쌍(a, b) 을 생성WHERE DATENAME(...) = DATENAME(...)➤ DATENAME(dw, a.hiredate) = DATENAME(dw, b.hiredate)
→ 두 직원의 입사 요일 이름이 같아야 함
예: 'Monday', 'Tuesday', 'Friday' 등
➤ DATENAME(m, a.hiredate) = DATENAME(m, b.hiredate)
→ 두 직원의 입사 월 이름이 같아야 함
예: 'February', 'December', 'June' 등
➤ a.empno < b.empno
→ 동일한 쌍의 중복 제거
→ (a, b)는 포함하고 (b, a)는 제거
→ 자기 자신과의 비교도 방지
SELECT ... + ... + ... AS msgALLEN was hired on the same month and weekday as SMITHORDER BY a.enamea의 이름을 기준으로 정렬