기타/자격증

[SQLD] 비전공자들을 위한 SQL 연습 쿼리 샘플 및 사이트 활용 방법

hr0513 2025. 2. 27. 10:12
728x90
반응형

SQLD 자격증을 준비하는 비전공자분들을 위해, 실습용 SQL 쿼리 샘플과

온라인에서 직접 실행해볼 수 있는 사이트를 소개해 드려요

반응형

📌 온라인에서 SQL 실행하기

먼저, 아래 사이트에 접속합니다.

 

https://sqlfiddle.com/

 

SQL Fiddle - Online SQL Compiler for learning & practice

SQL Fiddle Welcome to SQL Fiddle, an online SQL compiler that lets you write, edit, and execute any SQL query. Choose which SQL language you would like to practice today: Who's Maintaining SQL Fiddle? This is me! I'm Jonathan Magnan, the owner of ZZZ Proje

sqlfiddle.com

 

사이트에 접속한 후, 메인 페이지에서 MySQL을 선택해 주세요.

 

 

  1. 아래 샘플 쿼리를 참고하여 Editor에 입력합니다.
  2. 언어가 MySQL로 설정되어 있는지 확인합니다.
  3. Execute 버튼을 클릭하여 쿼리를 실행합니다.


📌 SQLD에서 자주 나오는 테이블 예시

1️⃣ 직원 & 부서 관련

CREATE TABLE DEPARTMENT (
    DEPT_ID     INT PRIMARY KEY,  -- 부서 ID
    DEPT_NAME   VARCHAR(100),     -- 부서명
    LOCATION    VARCHAR(100)      -- 부서 위치
);

CREATE TABLE EMPLOYEE (
    EMP_ID      INT PRIMARY KEY,  -- 직원 ID
    EMP_NAME    VARCHAR(50),      -- 직원 이름
    DEPT_ID     INT,              -- 부서 ID (외래키)
    JOB_TITLE   VARCHAR(50),      -- 직책
    SALARY      DECIMAL(10, 2),   -- 급여
    HIRE_DATE   DATE,             -- 입사일
    MANAGER_ID  INT,              -- 상사 ID (자기참조)
    FOREIGN KEY (DEPT_ID) REFERENCES DEPARTMENT(DEPT_ID),
    FOREIGN KEY (MANAGER_ID) REFERENCES EMPLOYEE(EMP_ID)
);

 

📍 샘플 데이터 삽입

INSERT INTO DEPARTMENT (DEPT_ID, DEPT_NAME, LOCATION) VALUES
(1, '인사부', '서울'),
(2, '개발부', '부산'),
(3, '마케팅부', '대전');

INSERT INTO EMPLOYEE (EMP_ID, EMP_NAME, DEPT_ID, JOB_TITLE, SALARY, HIRE_DATE, MANAGER_ID) VALUES
(105, '정우성', 2, '개발 팀장', 7000000, '2015-06-01', NULL),
(101, '김철수', 1, 'HR 매니저', 5000000, '2018-03-01', NULL),
(102, '이영희', 2, '백엔드 개발자', 6000000, '2019-07-10', 105),
(103, '박민호', 2, '프론트엔드 개발자', 5800000, '2020-09-15', 105),
(104, '최지우', 3, '마케팅 전문가', 5500000, '2021-05-20', NULL);

 

📍 자주 나오는 개념 & 쿼리

 

1) 부서별 평균 급여

SELECT DEPT_ID, AVG(SALARY) AS 평균급여
FROM EMPLOYEE
GROUP BY DEPT_ID;

 

2) 각 직원의 상사 정보 조회 (SELF JOIN)

SELECT E.EMP_NAME AS 직원명, M.EMP_NAME AS 상사명
FROM EMPLOYEE E
LEFT JOIN EMPLOYEE M ON E.MANAGER_ID = M.EMP_ID;

 

3) 가장 높은 급여를 받는 직원 찾기

SELECT * FROM EMPLOYEE
WHERE SALARY = (SELECT MAX(SALARY) FROM EMPLOYEE);

2️⃣ 주문 & 고객 관련

CREATE TABLE CUSTOMER (
    CUST_ID     INT PRIMARY KEY,  -- 고객 ID
    CUST_NAME   VARCHAR(50),      -- 고객 이름
    EMAIL       VARCHAR(100),     -- 이메일
    PHONE       VARCHAR(20),      -- 연락처
    ADDRESS     VARCHAR(255),     -- 주소
    REG_DATE    DATE              -- 가입일
);

CREATE TABLE ORDERS (
    ORDER_ID    INT PRIMARY KEY,  -- 주문 ID
    CUST_ID     INT,              -- 고객 ID (외래키)
    ORDER_DATE  DATE,             -- 주문 날짜
    TOTAL_AMOUNT DECIMAL(10, 2),  -- 총 주문 금액
    STATUS      VARCHAR(20),      -- 주문 상태 (예: '배송 중', '완료')
    FOREIGN KEY (CUST_ID) REFERENCES CUSTOMER(CUST_ID)
);

 

📍 샘플 데이터 삽입

INSERT INTO CUSTOMER (CUST_ID, CUST_NAME, EMAIL, PHONE, ADDRESS, REG_DATE) VALUES
(1, '홍길동', 'hong@gmail.com', '010-1234-5678', '서울 강남구', '2021-01-15'),
(2, '김영희', 'kim@gmail.com', '010-9876-5432', '부산 해운대구', '2022-06-20'),
(3, '이철수', 'lee@gmail.com', '010-1111-2222', '대구 수성구', '2023-02-10');

INSERT INTO ORDERS (ORDER_ID, CUST_ID, ORDER_DATE, TOTAL_AMOUNT, STATUS) VALUES
(101, 1, '2025-02-27', 150000, '배송 중'),
(102, 2, '2025-02-26', 300000, '완료'),
(103, 1, '2025-02-25', 200000, '취소'),
(104, 3, '2025-02-24', 250000, '완료');

 

📍 자주 나오는 개념 & 쿼리

 

1) 고객별 총 주문 금액

SELECT C.CUST_NAME, SUM(O.TOTAL_AMOUNT) AS 총_주문금액
FROM CUSTOMER C
JOIN ORDERS O ON C.CUST_ID = O.CUST_ID
GROUP BY C.CUST_NAME;

 

2) 최근 3개월 내 주문 내역

SELECT * FROM ORDERS
WHERE ORDER_DATE >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH);

3️⃣ 상품 & 재고 관리

CREATE TABLE PRODUCT (
    PROD_ID     INT PRIMARY KEY,  -- 상품 ID
    PROD_NAME   VARCHAR(100),     -- 상품명
    CATEGORY    VARCHAR(50),      -- 카테고리
    PRICE       DECIMAL(10, 2),   -- 가격
    STOCK       INT               -- 재고 수량
);

CREATE TABLE INVENTORY (
    INVENTORY_ID INT PRIMARY KEY, -- 재고 관리 ID
    PROD_ID      INT,             -- 상품 ID (외래키)
    WAREHOUSE    VARCHAR(50),     -- 창고 위치
    QUANTITY     INT,             -- 재고 수량
    LAST_UPDATE  DATE,            -- 마지막 업데이트 날짜
    FOREIGN KEY (PROD_ID) REFERENCES PRODUCT(PROD_ID)
);

 

📍 샘플 데이터 삽입

INSERT INTO PRODUCT (PROD_ID, PROD_NAME, CATEGORY, PRICE, STOCK) VALUES
(1, '무선 이어폰', '전자기기', 120000, 50),
(2, '게이밍 마우스', '전자기기', 45000, 30),
(3, '메모장', '사무용품', 5000, 100);

INSERT INTO INVENTORY (INVENTORY_ID, PROD_ID, WAREHOUSE, QUANTITY, LAST_UPDATE) VALUES
(1, 1, '서울 창고', 20, '2024-02-20'),
(2, 2, '부산 창고', 15, '2024-02-18'),
(3, 3, '대전 창고', 50, '2024-02-22');

 

📍 자주 나오는 개념 & 쿼리

 

1) 재고 부족 상품 조회

SELECT * FROM PRODUCT
WHERE STOCK < 40;

 

2) 카테고리별 평균 가격

SELECT CATEGORY, AVG(PRICE) AS 평균_가격
FROM PRODUCT
GROUP BY CATEGORY;

4️⃣ 학생 & 성적 관리

CREATE TABLE STUDENT (
    STUDENT_ID  INT PRIMARY KEY,   -- 학생 ID
    NAME        VARCHAR(50),       -- 이름
    MAJOR       VARCHAR(50),       -- 전공
    BIRTHDATE   DATE,              -- 생년월일
    ENROLL_YEAR INT                -- 입학년도
);

CREATE TABLE COURSE (
    COURSE_ID   INT PRIMARY KEY,   -- 강의 ID
    COURSE_NAME VARCHAR(100),      -- 강의명
    PROFESSOR   VARCHAR(50),       -- 담당 교수
    CREDITS     INT                -- 학점
);

CREATE TABLE ENROLLMENT (
    ENROLL_ID   INT PRIMARY KEY,   -- 수강신청 ID
    STUDENT_ID  INT,               -- 학생 ID (외래키)
    COURSE_ID   INT,               -- 강의 ID (외래키)
    ENROLL_DATE DATE,              -- 신청 날짜
    GRADE       CHAR(2),           -- 성적 (A, B, C 등)
    FOREIGN KEY (STUDENT_ID) REFERENCES STUDENT(STUDENT_ID),
    FOREIGN KEY (COURSE_ID) REFERENCES COURSE(COURSE_ID)
);

 

📍 샘플 데이터 삽입

INSERT INTO STUDENT (STUDENT_ID, NAME, MAJOR, BIRTHDATE, ENROLL_YEAR) VALUES
(1, '김철수', '컴퓨터공학', '2000-05-10', 2020),
(2, '박영희', '경영학', '1999-09-23', 2019),
(3, '이민호', '경제학', '2001-01-15', 2021);

INSERT INTO COURSE (COURSE_ID, COURSE_NAME, PROFESSOR, CREDITS) VALUES
(101, '데이터베이스 개론', '김교수', 3),
(102, '경영학 원론', '이교수', 3),
(103, '경제학 원론', '박교수', 3);

INSERT INTO ENROLLMENT (ENROLL_ID, STUDENT_ID, COURSE_ID, ENROLL_DATE, GRADE) VALUES
(1, 1, 101, '2023-03-10', 'A'),
(2, 2, 102, '2023-03-12', 'B'),
(3, 3, 103, '2023-03-15', 'A'),
(4, 1, 103, '2023-03-20', 'B');

 

📍 자주 나오는 개념 & 쿼리

 

1) 학생별 수강 강의 목록

SELECT S.NAME AS 학생명, C.COURSE_NAME AS 강의명, E.GRADE AS 성적
FROM STUDENT S
JOIN ENROLLMENT E ON S.STUDENT_ID = E.STUDENT_ID
JOIN COURSE C ON E.COURSE_ID = C.COURSE_ID;

 

2) 전공별 평균 성적

SELECT S.MAJOR, AVG(CASE 
                     WHEN E.GRADE = 'A' THEN 4.0
                     WHEN E.GRADE = 'B' THEN 3.0
                     WHEN E.GRADE = 'C' THEN 2.0
                     ELSE 0.0 END) AS 평균_평점
FROM STUDENT S
JOIN ENROLLMENT E ON S.STUDENT_ID = E.STUDENT_ID
GROUP BY S.MAJOR;

📍 다이어그램


위의 쿼리들은 연습용 샘플이므로, 실제 시험 문제 유형을 실습하고 싶다면

별도로 테이블을 만들어 직접 실행해보는 것을 추천드립니다

SQLD 시험 보시는 분들 모두 화이팅이에요!!

728x90
반응형