<< 오라클 문법 기록장 >>
🔸1. 카테고리별 상품 개수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/131529?language=oracle
SELECT
SUBSTR(PRODUCT_CODE, 1, 2) AS CATEGORY,
COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY SUBSTR(PRODUCT_CODE, 1, 2)
ORDER BY CATEGORY;
- 오라클에서 자주 사용하는 문자열 처리 함수
| 함수 | 설명 | 다른 DBMS에서의 차이 / 예시 |
| INITCAP(string) | 각 단어의 첫 글자를 대문자로 변환합니다. | MySQL, PostgreSQL에서는 기본 제공 X → CONCAT + UPPER/LOWER 조합으로 구현 INITCAP('oracle is powerful') → 'Oracle Is Powerful' |
| MySQL, PostgreSQL도 지원하지만 Oracle에서 자주 사용 | ||
| LPAD(string, total_len, [pad_char]) | 문자열 왼쪽에 특정 문자를 채워 전체 길이를 맞춥니다. | LPAD('123', 5, '0') → '00123' |
| RPAD(string, total_len, [pad_char]) | 문자열 오른쪽에 특정 문자를 채워 전체 길이를 맞춥니다. | RPAD('123', 5, '*') → '123**' |
| 함수 | 기능 | 예시 |
| SUBSTR(string, position, [length]) | 문자열의 특정 부분을 추출합니다. | SUBSTR('Oracle', 1, 3) → 'Ora' |
| REPLACE(string, search, replacement) | 특정 문자열을 다른 문자열로 바꿉니다. | REPLACE('Hello World', 'World', 'Oracle') → 'Hello Oracle' |
| TRIM([leading|trailing|both] FROM string) | 문자열 양 끝 또는 한쪽의 공백이나 특정 문자를 제거합니다. | TRIM(' Oracle ') → 'Oracle' |
| LENGTH(string) | 문자열의 길이를 반환합니다. | LENGTH('Oracle') → 6 |
| INSTR(string, substring) | 문자열 내에서 특정 문자열이 시작하는 위치를 반환합니다. | INSTR('Oracle is', 'is') → 8 |
| UPPER(string) | 모든 문자를 대문자로 변환합니다. | UPPER('oracle') → 'ORACLE' |
| LOWER(string) | 모든 문자를 소문자로 변환합니다. | LOWER('ORACLE') → 'oracle' |
🔸2. 중성화 여부 파악하기
https://school.programmers.co.kr/learn/courses/30/lessons/59409?language=oracle
오라클에서 IF함수를 지원하지 않으며, 조건문을 사용하려면 DECODE함수나 CASE문을 사용해야한다.
1) CASE WHEN문 사용
- 여러 조건을 처리할 때 사용
- LIKE와 같은 패턴 매칭이 포함된 복잡한 조건에서 사용
SELECT
ANIMAL_ID,
NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Neutered%'
OR SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
ELSE 'X'
END AS "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
2) DECODE 함수
- 간단한 조건문 (IF-ELSE)을 구현할 때 유용하다
- 특정값과 일치하는지 비교하는 용도로 사용
- SEX_UPON_INTAKE컬럼이 정확히 'Neutered Male' 또는 'Spayed Female'과 일치하는 경우라면 DECODE를 사용할 수 있다.
SELECT
ANIMAL_ID,
NAME,
DECODE(
SEX_UPON_INTAKE,
'Neutered Male', 'O',
'Spayed Female', 'O',
'X'
) AS "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
🔸나머지 문제 풀이
3. 동물수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/59406?language=oracle
SELECT COUNT(ANIMAL_ID) AS COUNT
FROM ANIMAL_INS
4. 최솟값 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/59038?language=oracle
SELECT DATETIME
FROM ANIMAL_INS
ORDER BY DATETIME
FETCH FIRST 1 ROW ONLY;
5. 동명 동물 수 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/59041?language=oracle
SELECT
NAME,
COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME;
6. 이름에 el이 들어가는 동물 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/59047?language=oracle
SELECT
ANIMAL_ID,
NAME
FROM ANIMAL_INS
WHERE UPPER(NAME) LIKE '%EL%'
AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME
7. NULL처리하기
https://school.programmers.co.kr/learn/courses/30/lessons/59410?language=oracle
SELECT
ANIMAL_TYPE,
COALESCE(NAME,'No name'),
SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
8. DATETIME에서 DATE로 형 변환
https://school.programmers.co.kr/learn/courses/30/lessons/59414?language=oracle
SELECT
ANIMAL_ID,
NAME,
TO_CHAR(DATETIME,'YYYY-MM-DD') AS "날짜"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
9. 중복 제거하기
https://school.programmers.co.kr/learn/courses/30/lessons/59408?language=oracle
SELECT
COUNT(DISTINCT(NAME)) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
10. 가격이 제일 비싼 식품의 정보 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131115?language=oracle
SELECT
PRODUCT_ID,
PRODUCT_NAME,
PRODUCT_CD,
CATEGORY,
PRICE
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
FETCH FIRST 1 ROW ONLY;
'코딩 테스트 > 02. SQL' 카테고리의 다른 글
| [프로그래머스]Oracle SQL_2(Lv2) (0) | 2025.09.16 |
|---|---|
| [프로그래머스]Oracle SQL_1(Lv2) (0) | 2025.09.13 |
| [프로그래머스] Oracle SQL (Lv1, 24문제) (1) | 2025.09.11 |
| [Hacker Rank] SQL Intermediate 'Symmetric Pairs' (Medium) (4) | 2025.08.22 |
| [Hacker Rank] SQL Intermediate 'Contest Leaderboard' (Medium) (0) | 2025.08.22 |