DEVELOPER_INFOS 테이블에서
Python 스킬을 보유한 개발자의 ID, EMAIL, FIRST_NAME, LAST_NAME을 ID 기준 오름차순으로 조회하는 SQL을 작성하시오.
| Column name | Type | Nullable | 설명 |
|---|---|---|---|
| ID | VARCHAR(N) | NOT NULL | 개발자 고유 ID |
| FIRST_NAME | VARCHAR(N) | NULLABLE | 이름 |
| LAST_NAME | VARCHAR(N) | NULLABLE | 성 |
| VARCHAR(N) | NOT NULL | 이메일 | |
| SKILL_1 | VARCHAR(N) | NULLABLE | 첫 번째 기술 |
| SKILL_2 | VARCHAR(N) | NULLABLE | 두 번째 기술 |
| SKILL_3 | VARCHAR(N) | NULLABLE | 세 번째 기술 |
| ID | FIRST_NAME | LAST_NAME | SKILL_1 | SKILL_2 | SKILL_3 | |
|---|---|---|---|---|---|---|
| D165 | Jerami | Edwards | jerami_edwards@grepp.co | Java | JavaScript | Python |
| D161 | Carsen | Garza | carsen_garza@grepp.co | React | ||
| D164 | Kelly | Grant | kelly_grant@grepp.co | C# | ||
| D163 | Luka | Cory | luka_cory@grepp.co | Node.js | ||
| D162 | Cade | Cunningham | cade_cunningham@grepp.co | Vue | C++ | Python |
→ Python 보유자: D165, D162
→ 출력 결과:
| ID | FIRST_NAME | LAST_NAME | |
|---|---|---|---|
| D162 | cade_cunningham@grepp.co | Cade | Cunningham |
| D165 | jerami_edwards@grepp.co | Jerami | Edwards |
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE SKILL_1 = 'Python' OR SKILL_2 = 'Python' OR SKILL_3 = 'Python'
ORDER BY ID;
OR 조건으로 각 컬럼을 직접 비교하여 Python 포함 여부를 판단SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE CONCAT_WS(',', SKILL_1, SKILL_2, SKILL_3) LIKE '%Python%'
ORDER BY ID;
CONCAT_WS(',', ...)를 사용하여 모든 스킬을 하나의 문자열로 결합LIKE '%Python%'로 검색CONCAT_WS(구분자, 열1, 열2, ...)
예:
CONCAT_WS(',', 'A', NULL, 'C')
-- 'A,C'
LIKE '%키워드%'
LIKE '%Python%'
-- 'Python'이 포함된 문자열을 찾음
| 방식 | 장점 | 단점 |
|---|---|---|
OR 방식 | 명확하고 빠름 | 컬럼 수가 늘면 코드 길어짐 |
CONCAT_WS + LIKE | 짧고 유연 | 문자열 연산으로 성능 저하 가능 |