# TIL - 2026.08.24

ssls·2일 전

📌 오늘 학습한 주제

  • SQL 기초 SELECT 문법 구조 및 컬럼 별칭(Alias), 중복 제거(DISTINCT)
  • WHERE 절 조건 필터링: 비교/논리 연산자, BETWEEN ~ AND, IN, 패턴 매칭(LIKE)
  • NULL 데이터 처리 함수 (IFNULL, NULLIF, IS NULL, IS NOT NULL)
  • 문자열 연결 함수 (CONCAT) 및 대학 학사 데이터베이스 실습 워크북 풀이

💡 오늘 배운 것 — 나만의 언어로

① 오늘의 목표

  • 관계형 데이터베이스(MySQL)의 기본 조회 구문인 SELECT문의 구조를 이해하고, 다양한 조건절 연산자와 NULL 처리 함수를 활용하여 원하는 데이터를 정확하게 추출하기

② 학습할 내용

  • 기본 조회 및 컬럼 가공: SELECT, FROM 절을 통해 데이터를 조회하고, AS를 이용한 별칭 부여와 DISTINCT를 통한 중복 컬럼 제거를 익혔다.
  • NULL 처리 함수: 연산 시 NULL이 포함되면 결과가 NULL이 되는 문제를 방지하기 위해 IFNULL(BONUS_PCT, 0)을 사용하여 연봉 계산을 처리하고, IS NULL / IS NOT NULL로 조건 분기를 처리했다.
  • 다양한 WHERE 절 필터링:
    • 범위 검색: BETWEEN 3500000 AND 5500000
    • 다중 목록 일치: IN ('60', '90')
    • 패턴 매칭: 와일드카드 _(단일 문자), %(다중 문자) 및 이스케이프 문자(\)를 활용한 LIKE '___\_%' 구문 실습
  • 문자열 결합: CONCAT() 함수를 사용하여 여러 컬럼과 문자열 리터럴을 조합해 읽기 쉬운 출력 메시지를 생성했다.

💻 오늘 핵심 코드

1. 연봉 계산 및 NULL 처리 & 문자열 결합

-- NULL 처리(IFNULL)를 활용한 연봉 계산
SELECT  EMP_NAME,
        SALARY,
        (SALARY + (SALARY * IFNULL(BONUS_PCT, 0))) * 12 AS `(연봉)`
FROM    employee;

-- CONCAT()을 활용한 문자열 연결 출력
SELECT  CONCAT(EMP_NAME, '님의 급여는 ', SALARY, '(원)입니다.') AS `급여 정보`
FROM    employee;

2. 조건절(WHERE) 다양한 연산자 활용

-- 1. BETWEEN AND (범위 검색)
SELECT  EMP_NAME, SALARY, JOB_ID  
FROM    employee
WHERE   SALARY BETWEEN 3500000 AND 5500000;

-- 2. LIKE 패턴 검색 (이스케이프 문자 활용)
-- 메일 아이디 중 '_' 앞자리가 3자리인 사원 검색
SELECT  *
FROM    employee 
WHERE   EMAIL LIKE '___\_%';

-- 3. IN 연산자 (다중 조건 검색)
SELECT  *
FROM    employee
WHERE   DEPT_ID IN ('60', '90');

3. 학사 데이터베이스 워크북 실습 쿼리

-- [Q3] 국어국문학과 휴학생 중 여학생(주민번호 뒷자리 2, 4 등) 이름 조회
SELECT  s.STUDENT_NAME
FROM    tb_department d, tb_student s
WHERE   s.DEPARTMENT_NO = d.DEPARTMENT_NO
  AND   d.DEPARTMENT_NAME = '국어국문학과'
  AND   s.ABSENCE_YN = 'Y'
  AND   (
            s.STUDENT_SSN LIKE '______-2%' 
         OR s.STUDENT_SSN LIKE '______-4%'
        );

-- [Q5] 정원이 20명 이상 30명 이하인 학과의 이름과 계열 조회
SELECT  DEPARTMENT_NAME, CATEGORY 
FROM    tb_department 
WHERE   CAPACITY BETWEEN 20 AND 30;

-- [Q10] 2002년도 입학자 중 전주 거주 재학생 조회
SELECT  a.STUDENT_NO, a.STUDENT_NAME, a.STUDENT_SSN 
FROM    tb_student a
WHERE   a.ABSENCE_YN = 'N'
  AND   a.STUDENT_ADDRESS LIKE '%전주%'
  AND   a.ENTRANCE_DATE LIKE '2002-%';

🛠️ 실습 / 결과물 & 참고 자료

③ 실습 / 결과물

  • 강의 실습코드: MySQL lgcns 데이터베이스의 employee, tb_department, tb_student 테이블을 대상으로 기본 SELECT문, 연산자(BETWEEN, IN, LIKE), 조인 및 조건절 필터링 워크북 문제 10문항 풀이 완료.

④ 참고 자료


🔍 문제와 해결

  • 막힌 부분: 주민번호 뒷자리나 특수문자(_)가 포함된 이메일 계정을 검색할 때 와일드카드 _가 모든 단일 문자와 매핑되어 원치 않는 결과가 포함되는 현상 점검.
  • 해결 방법: 특수기호 자체를 문자로 인식시키기 위해 이스케이프 문자(\_)를 사용하고, 주민번호 패턴 매칭 시 LIKE '______-2%' 형식으로 자릿수를 엄격하게 지정하여 정확한 데이터만 추출함.

🎯 다음에 할 일

  • 그룹화 함수(COUNT, SUM, AVG, MAX, MIN)와 GROUP BY, HAVING 절 학습하기
  • 여러 테이블 간의 관계를 맺는 다양한 JOIN(INNER JOIN, LEFT/RIGHT OUTER JOIN) 문법 마스터하기
profile
성장중

0개의 댓글