Ch.9 데이터베이스 (필기 3과목)
SQL 기출 패턴 30선
SQL은 매회 5~7문항 출제! 패턴만 익히면 만점 가능합니다
실제 기출에서 반복 등장하는 SQL 유형 30개를 집중 드릴
SQL 문법은 알아도 기출 변형에 당황하면 실수하기 쉽습니다
30문항 반복 드릴로 기출 패턴을 체화하여 실전에서 자동으로 풀 수 있게 합니다
핵심 내용
1. 다음 SQL의 실행 결과로 올바른 것은? SELECT 이름 FROM 학생 WHERE 학과 = '컴퓨터공학' AND 학년 >= 3;
2. 이름이 '김'으로 시작하는 학생을 검색하는 SQL의 빈칸을 채우시오. SELECT * FROM 학생 WHERE 이름 ___ '김%';
3. 다음 SQL의 실행 결과로 올바른 것은? SELECT * FROM 학생 WHERE 학년 BETWEEN 2 AND 4;
4. 다음 SQL의 실행 결과로 올바른 것은? SELECT * FROM 학생 WHERE 학과 IN ('컴퓨터공학', '전자공학', '기계공학');
-- 5번: IS NULL 패턴
-- 전화번호가 없는(NULL) 학생 검색
SELECT 이름, 전화번호
FROM 학생
WHERE 전화번호 IS NULL;
-- 주의: WHERE 전화번호 = NULL (X) ← 틀린 문법!
-- NULL 비교는 반드시 IS NULL / IS NOT NULL 사용5. NULL 값을 비교할 때 '= NULL'로 작성해도 된다.
6. 다음 SQL의 실행 결과는? SELECT COUNT(*) FROM 학생;
7. 학과별 평균 성적이 80 이상인 학과만 조회하는 SQL의 빈칸을 채우시오. SELECT 학과, AVG(성적) FROM 수강 GROUP BY 학과 ___ AVG(성적) >= 80;
8. 다음 SQL에서 오류가 발생하는 이유는? SELECT 학과, 이름, AVG(성적) FROM 수강 GROUP BY 학과;
9. WHERE 절에서 집계 함수(COUNT, SUM 등)를 직접 사용할 수 있다.
-- 10번: SUM + GROUP BY + ORDER BY 종합
-- 학과별 총 성적 합계를 내림차순으로 조회
SELECT 학과, SUM(성적) AS 총성적
FROM 수강
GROUP BY 학과
HAVING SUM(성적) >= 200
ORDER BY 총성적 DESC;
-- 실행 순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
-- DESC = 내림차순, ASC = 오름차순(기본값)11. 다음 SQL에서 사용된 JOIN 유형은? SELECT A.이름, B.과목명 FROM 학생 A INNER JOIN 수강 B ON A.학번 = B.학번;
12. 수강 기록이 없는 학생도 포함하여 조회하려면 빈칸에 들어갈 JOIN은? SELECT A.이름, B.과목명 FROM 학생 A ___ JOIN 수강 B ON A.학번 = B.학번;
13. CROSS JOIN의 결과 행 수는? (학생 5행, 과목 4행일 때) SELECT * FROM 학생 CROSS JOIN 과목;
-- 14번: 다중 테이블 JOIN
-- 학생 + 수강 + 과목 3개 테이블 조인
SELECT S.이름, C.과목명, E.성적
FROM 학생 S
INNER JOIN 수강 E ON S.학번 = E.학번
INNER JOIN 과목 C ON E.과목코드 = C.과목코드
WHERE E.성적 >= 90;
-- 결과: 성적 90 이상인 학생의 이름, 과목명, 성적15. LEFT JOIN에서 오른쪽 테이블에 매칭이 없는 행은 결과에서 제외된다.
16. 다음 SQL의 서브쿼리 위치는? SELECT * FROM 학생 WHERE 학번 IN (SELECT 학번 FROM 수강 WHERE 성적 >= 90);
17. 평균 성적보다 높은 학생을 조회하는 SQL의 빈칸을 채우시오. SELECT 이름, 성적 FROM 수강 WHERE 성적 > (SELECT ___(성적) FROM 수강);
18. 다음 SQL에서 FROM 절 서브쿼리(인라인 뷰)의 역할은? SELECT T.학과, T.최대성적 FROM (SELECT 학과, MAX(성적) AS 최대성적 FROM 수강 GROUP BY 학과) T WHERE T.최대성적 >= 95;
-- 19번: EXISTS 서브쿼리
-- 수강 기록이 있는 학생만 조회
SELECT 이름 FROM 학생 S
WHERE EXISTS (
SELECT 1 FROM 수강 E
WHERE E.학번 = S.학번
);
-- EXISTS: 서브쿼리 결과가 1행이라도 있으면 TRUE
-- NOT EXISTS: 서브쿼리 결과가 0행이면 TRUE
-- IN과 비슷하지만, 대용량에서 EXISTS가 더 효율적20. 다음 SQL에서 ALL의 의미는? SELECT 이름 FROM 학생 WHERE 학번 > ALL (SELECT 학번 FROM 수강);
21. 새 테이블을 생성하는 DDL 명령의 빈칸을 채우시오. ___ TABLE 학생 (학번 CHAR(8) PRIMARY KEY, 이름 VARCHAR(10));
22. 기존 테이블에 '주소' 열을 추가하는 SQL은? ① ALTER TABLE 학생 ADD 주소 VARCHAR(50); ② ALTER TABLE 학생 CREATE 주소 VARCHAR(50); ③ UPDATE TABLE 학생 ADD 주소 VARCHAR(50); ④ INSERT INTO 학생 ADD 주소 VARCHAR(50);
23. DROP TABLE은 테이블 구조는 유지하고 데이터만 삭제한다.
-- 24번: INSERT INTO 패턴
-- 열 지정 삽입 (권장)
INSERT INTO 학생 (학번, 이름, 학과)
VALUES ('2024001', '홍길동', '컴퓨터공학');
-- 열 생략 삽입 (모든 열에 순서대로 값 제공)
INSERT INTO 학생
VALUES ('2024002', '김영희', '전자공학', 2);
-- 주의: 열 생략 시 테이블 정의 순서와 정확히 일치해야 함!25. 학과가 '컴퓨터공학'인 학생의 학년을 3으로 수정하는 SQL의 빈칸을 채우시오. ___ 학생 SET 학년 = 3 WHERE 학과 = '컴퓨터공학';
26. 다음 SQL의 실행 결과는? DELETE FROM 학생 WHERE 학년 = 1;
27. DELETE FROM 학생; 을 실행하면 학생 테이블 구조도 삭제된다.
28. 다음 SQL에서 DISTINCT의 역할은? SELECT DISTINCT 학과 FROM 학생;
29. 성적 기준 내림차순으로 상위 5명만 조회하는 SQL의 빈칸을 채우시오. SELECT ___ 5 이름, 성적 FROM 수강 ORDER BY 성적 DESC;
30. 두 쿼리 결과를 합치면서 중복을 제거하는 SQL 키워드는? SELECT 이름 FROM 학생A ? SELECT 이름 FROM 학생B;
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 레슨 시작