[2025.12.09] 오늘의 학습 키워드 - SQL 리마스터 및 파이썬 함수 리마스터

허진원·2025년 12월 9일

내일배움캠프 TIL

목록 보기
31/41
  1. 오늘 학습 키워드
    SQL 리마스터 - 조건문, 윈도우 함수, 테이블 조인
    파이썬 리마스터 - 함수
  1. 오늘 학습한 내용을 나만의 언어로 정리하기
    오늘은 SQL과 파이썬 두 언어를 함께 리마스터하게 되었다. 이번에 진행한 실습 문제는 모두 실무에서 자주 사용되는 것들이었다. 특히 오늘 했던 SQL 조건문과 테이블 조인, 파이썬 가변 인자와 random 및 datetime 함수는 잘 기억해서 앞으로 진행될 프로젝트와 취업 후 실무에서 유용하게 사용할 수 있도록 반복 학습할 예정이다.
  1. 학습 내용

SQL 리마스터

조건문

  • employed 값이 1이면 '재직중', 0이면 '퇴사'로 출력하는 SQL 쿼리를 작성하시오. (IF 조건문 사용)
SELECT ename_ko AS '이름',
	if(employed=1, '재직 중', '퇴사') AS '직군'
FROM emp
;

  • 부서 번호를 참고하여 아래 기준에 따라 직군을 분류하는 SQL 쿼리를 작성하시오. (CASE문 사용)

    1% → '영업'
    4% → '생산'
    8% → '인사'
    그 외 → '기타'

SELECT ename_ko AS '이름',
	CASE WHEN deptno LIKE '1%' THEN '영업'
		 WHEN deptno LIKE '4%' THEN '생산'
		 WHEN deptno LIKE '8%' THEN '인사'
		 ELSE '기타'
	END AS '직군'
FROM emp
;

윈도우 함수

  • 전체 직원에 대해 급여(sal)가 높은 순서대로 고유한 순번을 부여하여 출력
SELECT row_number() OVER (ORDER BY sal desc) AS '순번',
	ename_ko AS '이름',
	sal AS '급여'
FROM emp
;

  • 각 직급 별 급여 순위를 출력하려고 합니다.
    급여 기준으로 동일 급여는 동일 순위로 처리하고 순위를 건너뛰지 않고 급여순으로 내림차순하는 SQL 쿼리를 작성하시오.
SELECT joblv AS '직급',
	ename_ko AS '이름',
	sal AS '급여',
	rank() OVER (PARTITION BY joblv ORDER BY sal desc) AS '순위'
FROM emp 
ORDER BY 3 desc
;

  • 부서별 입사일 기준 누적 평균 급여를 조회하는 SQL문을 출력하시오.
SELECT deptno AS '부서번호',
	ename_ko AS '이름',
	hiredate AS '입사일',
	sal AS '급여',
	round(avg(sal) over(PARTITION BY deptno ORDER BY hiredate), 2) AS '부서누적평균급여'
FROM emp 
ORDER BY 1, 3
;

  • 입사일이 빠른 순서대로 각 직원의 급여와 이전 직원의 급여, 다음 직원의 급여를 함께 출력하는 SQL문을 작성해주세요.
SELECT row_number() OVER (ORDER BY hiredate) AS '순번',
	ename_ko AS '이름',
	sal AS '급여',
	LAG(sal) OVER (ORDER BY sal desc) AS '이전급여', 
	LEAD(sal) OVER (ORDER BY sal desc) AS '다음급여'
FROM emp
;

테이블 조인

  • 2022년 1월부터 3월까지 입사한 사원의 이름, 부서 번호, 부서 이름을 표시하는 SQL 쿼리문을 작성하시오.
SELECT e.ename_ko AS '이름',
	e.deptno AS '부서번호',
	d.dname AS '부서명'
FROM emp AS e
JOIN dept AS d
ON e.deptno = d.deptno 
WHERE e.hiredate >= '2022-01-01'
	AND e.hiredate < '2022-04-01'
;

  • 연봉이 6000만원인 사원의 직급, 부서명, 지역을 출력하는 SQL 쿼리문을 작성하시오.
SELECT a.joblv AS '직급',
	b.dname AS '부서명',
	b.location AS '지역'
FROM emp AS a
JOIN dept AS b
ON a.deptno = b.deptno
WHERE a.sal = 6000
;

  • 지역 별 평균급여를 구하는 SQL 쿼리문을 작성하시오.
    (평균급여는 소수점 0자리로 반올림해주세요)
SELECT b.location AS '지역',
	round(avg(a.sal)) AS '평균급여'
FROM emp AS a
JOIN dept AS b
ON a.deptno = b.deptno 
GROUP BY 1
;

  • 사원의 이름 및 사원 번호를 관리자의 이름 및 관리자 번호와 함께 표시하고 각각의 컬럼 이름을 사원번호, 사원명, 매니저번호, 매니저명을 출력해주세요.
SELECT e1.empno AS '사원번호',
	e1.ename_ko AS '이름',
	e1.mgr AS '매니저번호',
	e2.ename_ko AS '매니저명'
FROM emp AS e1
JOIN emp AS e2
ON e1.mgr = e2.empno
;

  • 아래와 같이 사원별 총급여(연봉+성과금)를 기준으로 부서명과 급여등급을 함께 조회하는 SQL쿼리를 작성하시오 (*LEFT 조인 사용)
1)
SELECT 
    a.empno     AS '사원번호',
    a.ename_ko  AS '이름',
    a.sal + IFNULL(a.comm, 0) AS '총급여',
    a.deptno    AS '부서번호',
    b.dname     AS '부서명',
    c.grade     AS '등급'
FROM emp a
LEFT JOIN salgrade c
  ON a.sal + a.comm >= c.losal
 AND a.sal + a.comm <= c.hisal
LEFT JOIN dept b
  ON b.deptno = a.deptno
ORDER BY 3 desc
;
2)
SELECT a.empno AS '사원번호',
	a.ename_ko AS '이름',
	a.sal+a.comm AS '총급여', 
	a.deptno AS '부서번호',
	b.dname AS '부서명',
	c.grade AS '등급'
FROM emp a 
	LEFT JOIN salgrade c ON a.sal+comm BETWEEN c.losal AND c.hisal
	LEFT JOIN dept b ON b.deptno = a.deptno
;

파이썬 리마스터

함수

  • 함수 기본 실습
    이름과 나이를 입력받아 다음 문자열을 반환하는 함수를 작성하세요.

"홍길동님의 나이는 20살입니다."

def greet(name, age):
    print(f"\"{name}님의 나이는 {age}살입니다.\"")

greet("홍길동", "20")

  • 기본값 & 가변 인자 실습
    여러 숫자를 입력하면 총합과 평균을 반환하는 함수를 작성하시오.

my_stats(10, 20, 30)

출력 : 총합: 60, 평균: 20.0

def my_stats(*args):
    return sum(args), sum(args) / len(args)

print(f"총합: {my_stats(10, 20, 30)[0]}, 평균: {my_stats(10, 20, 30)[1]}")

  • 스코프(Local& Global) 실습
    다음 코드에서 출력 결과를 예측하시오.
x = 5

def func():
    x = 10
    print("함수 내부:", x)

func()
print("함수 외부:", x)
  • 예상 출력 결과 : 함수 내부 -> 10, 함수 외부 -> 5

  • 출력 결과 :

  • random, datetime 활용 문제
    랜덤 번호 6개(1~45)를 생성한 뒤, 오늘 날짜와 함께 출력하시오.
import random
from datetime import datetime

nums = random.sample(range(1, 46), 6)
date = datetime.now().strftime('%Y-%m-%d')

print(f"추첨 번호: {nums}")
print(f"오늘 날짜: {date}")

  1. 학습하며 느낀 점
    오늘 리마스터한 SQL과 파이썬 실습 내용은 이전 프로젝트에서도 실제로 사용했던 것들이었다. 지금 학습하고 있는 통계와 앞으로 학습할 머신러닝에서도 굉장히 빈번하게 사용할 함수들이니, 더욱 꼼꼼하게 찾아보고 복습해야겠다.
profile
국문과 전공 데이터 입문자

0개의 댓글