2025/04/14: 1개의 글

[정보처리기사 실기] 2021년 3회 13번 SQL 문제

Posted by nkjok
2025. 4. 14. 19:36 낙서장[2]/오답노트
반응형

아래 테이블 SOO, JEBI 의 상태를 보고 출력결과를 작성하시오

SELECT COUNT(*) CNT FROM SOO CROSS JOIN JEBI WHERE SOO.NAME LIKE JEBI.RULE;

mysql> select * from SOO;
+--------+
| NAME   |
+--------+
| SOPHIA |
| OLIVIA |
| SEMA   |
+--------+
3 rows in set (0.00 sec)

mysql> select * from JEBI;
+------+
| RULE |
+------+
| S%   |
| %A%  |
+------+
2 rows in set (0.00 sec)

mysql>

 

 

1. 해설

  • SOO CROSS JOIN JEBI → 모든 가능한 조합을 생성 (총 3 × 2 = 6개의 조합)
  • WHERE SOO.NAME LIKE JEBI.RULE → NAME이 RULE 조건을 만족하는 경우만 필터링

각 RULE과 NAME의 매칭

SOO.NAMEJEBI.RULE결과 (LIKE 매칭)

SOPHIA S% ✅ (S로 시작)
SOPHIA %A% ✅ (A 포함)
OLIVIA S% ❌ (S로 시작 X)
OLIVIA %A% ✅ (A 포함)
SEMA S% ✅ (S로 시작)
SEMA %A% ✅ (A 포함)

총 6개의 조합 중 OLIVIA와 'S%'는 LIKE 패턴에 맞지 않기 때문에 제외,
따라서 CNT = 5가 출력됩니다

 

 

2. 자세한 해설

사용한 쿼리는 다음과 같습니다:

SELECT COUNT(*) CNT FROM SOO CROSS JOIN JEBI WHERE SOO.NAME LIKE JEBI.RULE;

  • CROSS JOIN을 사용했으므로 **두 테이블의 모든 조합(곱집합)**이 생성됩니다.
  • WHERE SOO.NAME LIKE JEBI.RULE 조건에 맞는 값만 필터링됩니다.

각 테이블의 데이터

SOO 테이블 (이름 리스트):

SOPHIA OLIVIA SEMA

3개의 데이터가 존재합니다.

JEBI 테이블 (패턴 리스트):

S% %A%

2개의 패턴이 존재합니다.

CROSS JOIN 결과

CROSS JOIN을 수행하면 두 테이블의 모든 조합이 생성됩니다:

따라서 총 3 × 2 = 6개의 조합이 만들어집니다.

LIKE 조건 적용

이제 LIKE 조건을 적용해 각 행이 필터링되는지 확인해볼게요.

1️⃣ "SOPHIA" LIKE "S%" ✅ (S로 시작 → 조건 만족)

2️⃣ "SOPHIA" LIKE "%A%" ✅ (A 포함 → 조건 만족)

3️⃣ "OLIVIA" LIKE "S%" ❌ (S로 시작하지 않음 → 조건 불만족)

4️⃣ "OLIVIA" LIKE "%A%" ✅ (A 포함 → 조건 만족)

5️⃣ "SEMA" LIKE "S%" ✅ (S로 시작 → 조건 만족)

6️⃣ "SEMA" LIKE "%A%" ✅ (A 포함 → 조건 만족)

 

최종 결과

총 6개 중 3번째 행(OLIVIA LIKE 'S%')만 조건을 만족하지 않아서 제외,
따라서 최종 결과는 5개가 남으며 COUNT(*) = 5가 출력됩니다! 🎉

왜 6이 아닌가?

  • OLIVIA LIKE 'S%' 조건이 만족되지 않기 때문에 제외됨 → 그래서 5개만 남음
  • 모든 행이 조건을 만족하지 않는 것이 아니라, 특정 행만 조건에 맞지 않아서 제외됨
반응형