SQLD 자격증을 준비하는 비전공자분들을 위해, 실습용 SQL 쿼리 샘플과
온라인에서 직접 실행해볼 수 있는 사이트를 소개해 드려요
📌 온라인에서 SQL 실행하기
먼저, 아래 사이트에 접속합니다.
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을 선택해 주세요.

- 아래 샘플 쿼리를 참고하여 Editor에 입력합니다.
- 언어가 MySQL로 설정되어 있는지 확인합니다.
- 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 시험 보시는 분들 모두 화이팅이에요!!

'기타 > 자격증' 카테고리의 다른 글
리눅스 마스터 2급 합격 후기와 공부 방법 공유 (2주 공부 / 1트 합격) (0) | 2025.01.03 |
---|---|
SQLD 자격증 합격 후기와 공부 방법 공유 (3일 공부 / 1트 합격) (4) | 2024.11.27 |