[정보처리기사 실기] 2021년 3회 13번 SQL 문제
아래 테이블 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개만 남음
- 모든 행이 조건을 만족하지 않는 것이 아니라, 특정 행만 조건에 맞지 않아서 제외됨
'낙서장[2] > 오답노트' 카테고리의 다른 글
[정보처리기사 실기] 화이트박스/블랙박스 테스트 (0) | 2025.04.17 |
---|---|
[정보처리기사 실기] 대칭키 비대칭키 (상세) (0) | 2025.04.17 |
[정보처리기사 실기] 대칭키(Symmetric Key) 비대칭키(Asymmetric Key) 암호화 (0) | 2025.04.17 |
[오답노트] 모의고사1회 (0) | 2025.02.10 |
2024년 3회 6. 아래 코드에서 출력되는 값을 작성하시오 (1) | 2025.02.09 |