TIL 23.

Sol Karsian·2025년 3월 13일

오늘은 SQL에서 고급 서브쿼리와 뷰, 순위 계산, DDL까지 다루었습니다. 점점 실무적인 SQL 문법에 가까워지고 있어 재미도 있고 도전도 되네요!

🔁 1. 상관 서브쿼리 (Correlated Subquery)
메인 쿼리의 각 행에 대해 서브쿼리가 반복 실행됨

서브쿼리는 메인 쿼리의 값을 참조함

sql
복사
편집
-- 직급별 평균 급여보다 높은 사람
SELECT EMP_NAME, JOB_CODE, SALARY
FROM EMPLOYEE MAIN
WHERE SALARY > (
SELECT AVG(SALARY)
FROM EMPLOYEE SUB
WHERE MAIN.JOB_CODE = SUB.JOB_CODE
);
🎯 2. 스칼라 서브쿼리 (Scalar Subquery)
SELECT 절에 사용

단일 행, 단일 열만 반환해야 함

sql
복사
편집
-- 최고 급여와의 차이
SELECT EMP_NAME, SALARY,
(SELECT MAX(SALARY) FROM EMPLOYEE) - SALARY AS "급여차"
FROM EMPLOYEE;

-- 관리자 이름 가져오기
SELECT EMP_NO, EMP_NAME,
NVL((SELECT EMP_NAME FROM EMPLOYEE SUB WHERE SUB.EMP_ID = MAIN.MANAGER_ID), '없음') AS "관리자 명"
FROM EMPLOYEE MAIN;
📦 3. 인라인 뷰 (Inline View)
FROM 절에 서브쿼리 작성 → 가상의 테이블처럼 사용

sql
복사
편집
-- 급여 상위 5명
SELECT ROWNUM, EMP_NAME, SALARY
FROM (
SELECT EMP_NAME, SALARY FROM EMPLOYEE ORDER BY SALARY DESC
)
WHERE ROWNUM <= 5;
🧾 4. WITH 절
인라인 뷰에 이름을 부여해 재사용하거나 가독성 향상

sql
복사
편집
WITH TOP_SAL AS (
SELECT EMP_NAME, SALARY FROM EMPLOYEE ORDER BY SALARY DESC
)
SELECT ROWNUM, EMP_NAME, SALARY
FROM TOP_SAL
WHERE ROWNUM <= 10;
🥇 5. 순위 함수 (RANK, DENSE_RANK)
RANK() OVER(ORDER BY) : 동일 순위 다음 순위 건너뜀 (1, 1, 3)

DENSE_RANK() : 동일 순위 이후 연속 (1, 1, 2)

sql
복사
편집
SELECT RANK() OVER (ORDER BY SALARY DESC) 순위, EMP_NAME, SALARY FROM EMPLOYEE;
📖 6. 데이터 딕셔너리 (Data Dictionary)
데이터베이스 구조에 대한 정보

sql
복사
편집
SELECT FROM USER_TABLES;
SELECT
FROM USER_CONSTRAINTS;
SELECT * FROM USER_CONS_COLUMNS;
🧱 7. DDL - CREATE TABLE
sql
복사
편집
CREATE TABLE MEMBER (
MEMBER_ID VARCHAR2(20),
MEMBER_PWD VARCHAR2(20),
MEMBER_NAME VARCHAR2(30),
MEMBER_SSN CHAR(14),
ENDROLL_DATE DATE DEFAULT SYSDATE
);
자료형 정리

NUMBER: 숫자

CHAR(n): 고정 길이

VARCHAR2(n): 가변 길이

DATE: 날짜

CLOB/BLOB: 대용량 문자/바이너리

🔐 8. 제약 조건 (Constraints)

제약조건 설명
NOT NULL NULL 불허
UNIQUE 중복 불허
PRIMARY KEY 기본 키 (NOT NULL + UNIQUE)
FOREIGN KEY 외래 키
CHECK 값 제약
sql
복사
편집
CREATE TABLE USER_USED_NN (
USER_NO NUMBER NOT NULL,
USER_ID VARCHAR2(20) UNIQUE,
GENDER VARCHAR2(10) CHECK(GENDER IN ('남', '여'))
);
🔁 9. 외래키 삭제 옵션

옵션 설명
RESTRICTED 기본, 삭제 불가
SET NULL 참조 값 → NULL
CASCADE 자식도 함께 삭제
📝 오늘의 키워드 정리
상관 서브쿼리는 메인 쿼리의 행마다 서브쿼리가 실행됨

스칼라 서브쿼리는 SELECT 안에 단일 값을 리턴

인라인 뷰 & WITH 절을 통해 서브쿼리 관리

순위 함수(RANK)로 랭킹 계산

제약 조건을 통해 데이터 무결성 보장

profile
개발자 희망자 입니다.

0개의 댓글