공든탑앱 열기

실기 SQL: 쿼리 직접 쓰기

정보처리기사 · 실기 SQL과 용어 쓰기 · 약 18분

쉽게 말하면

필기에서는 보기 중에 맞는 SQL을 골랐지만, 실기에서는 빈 칸에 SQL을 직접 써요. 요령은 문제 문장을 SQL 절로 하나씩 옮기는 거예요. '어느 표에서'는 FROM, '어떤 행만'은 WHERE, '무엇별로'는 GROUP BY, '묶은 뒤 조건'은 HAVING, '무엇을 보여 줄지'는 SELECT, '어떤 순서로'는 ORDER BY예요. 아래 모의 SQL 창에 직접 쳐서 결과를 확인해 봐요.

시험용 정의

실기 SQL은 문제 문장을 절로 나눠 옮겨 쓴다: 대상 표 → FROM, 행 조건 → WHERE, '~별' → GROUP BY, 그룹 조건 → HAVING, 보여 줄 열 → SELECT, 정렬 → ORDER BY. 두 표의 정보를 함께 보려면 조인(FROM A JOIN B ON A.키 = B.키)이나 하위 질의(WHERE 열 IN (SELECT ...), WHERE 열 > (SELECT AVG(...) ...))를 쓴다. 데이터 변경은 INSERT INTO 표 VALUES (...), UPDATE 표 SET 열 = 값 WHERE ..., DELETE FROM 표 WHERE ..., 구조 변경은 ALTER TABLE 표 ADD 열 형식, 가상 표는 CREATE VIEW 이름 AS SELECT ...다. 집계 함수 COUNT(열)·SUM·AVG·MAX·MIN은 NULL을 빼고 계산하고, COUNT(*)는 NULL이 있는 행도 센다. 자주 하는 실수: 문자열에 작은따옴표 빼먹기, UPDATE·DELETE에서 WHERE 빼먹기, 집계 조건을 WHERE에 쓰기, GROUP BY에 없는 열을 SELECT에 쓰기.

비유로 이해하기

문제 문장은 주문서, SQL은 주방 지시서다. '전자 학과 학생 중(WHERE) 학년별로(GROUP BY) 두 명 이상인 곳만(HAVING) 평균 점수를(SELECT) 높은 순서로(ORDER BY)'처럼 주문서의 구절을 지시서 칸에 하나씩 옮겨 적으면 된다.

자세히

먼저 알아 둘 말

말뜻
집계 함수여러 행을 하나의 값으로 모으는 함수 (COUNT, SUM, AVG, MAX, MIN)
조인두 표를 공통 열로 이어 붙여 한 번에 조회하는 것
하위 질의SQL 안에 괄호로 넣은 또 다른 SELECT
별칭표나 열에 붙이는 짧은 이름 (STUDENT S 의 S)
뷰SELECT 결과에 이름을 붙인 가상 표

이 실습의 표

STUDENT(SNO 학번, NAME, DEPT 학과, YEAR 학년, SCORE 점수): 김하늘(컴퓨터 3 88), 이바다(전자 2 72), 박산(컴퓨터 4 95), 최들(경영 1 65), 정숲(컴퓨터 2 NULL), 한별(전자 3 81)

COURSE(CNO, CNAME, CREDIT): C101 데이터베이스, C102 운영체제, C103 자료구조

ENROLL(SNO, CNO, GRADE): 누가 어떤 과목을 어떤 성적으로 들었는지

문장을 SQL로 옮기기

문제 문장SQL
학과별 학생 수SELECT DEPT, COUNT(*) FROM STUDENT GROUP BY DEPT
학생이 2명 이상인 학과만... GROUP BY DEPT HAVING COUNT(*) >= 2
평균보다 점수가 높은 학생WHERE SCORE > (SELECT AVG(SCORE) FROM STUDENT)
C101을 수강한 학생WHERE SNO IN (SELECT SNO FROM ENROLL WHERE CNO = 'C101')
학생 이름과 들은 과목명FROM STUDENT S JOIN ENROLL E ON S.SNO = E.SNO JOIN COURSE C ON E.CNO = C.CNO
점수를 5점 올려라UPDATE STUDENT SET SCORE = SCORE + 5 WHERE ...
EMAIL 열을 추가하라ALTER TABLE STUDENT ADD EMAIL VARCHAR2(30)

자주 하는 실수

  • 문자열은 '전자'처럼 작은따옴표. 큰따옴표는 열 이름용이다
  • UPDATE·DELETE에 WHERE가 없으면 모든 행이 바뀌거나 지워진다
  • 집계 함수 조건(COUNT(*) >= 2)을 WHERE에 쓰면 오류. HAVING에 쓴다
  • GROUP BY로 묶었으면 SELECT에는 묶은 열과 집계 함수만 쓴다
  • 표 구조를 바꾸는 것은 ALTER, 데이터를 바꾸는 것은 UPDATE

시험에 이렇게 나와요

출제기준 기반

확인 문제

Q1. '학과별 평균 점수가 80점 이상인 학과'를 구할 때 평균 80점 이상 조건을 넣는 절은?

  1. HAVING
  2. SELECT
  3. WHERE
  4. ORDER BY
정답 보기

1번 HAVING

WHERE는 묶기 전 행 하나하나를 거르고, HAVING은 GROUP BY로 묶은 뒤 그룹을 걸러요. 평균은 묶어야 나오니 HAVING.

Q2. STUDENT 표에 학과별 최고 점수를 구하는 SQL로 알맞은 것은?

  1. SELECT MAX(SCORE) FROM STUDENT ORDER BY DEPT
  2. SELECT DEPT, MAX(SCORE) FROM STUDENT GROUP BY DEPT
  3. SELECT DEPT, MAX(SCORE) FROM STUDENT
  4. SELECT DEPT, SCORE FROM STUDENT GROUP BY MAX(SCORE)
정답 보기

2번 SELECT DEPT, MAX(SCORE) FROM STUDENT GROUP BY DEPT

'학과별'은 GROUP BY DEPT. 묶지 않고 DEPT와 집계 함수를 함께 쓰면 오류예요.

Q3. 점수가 NULL인 학생이 있을 때 COUNT(SCORE)와 COUNT(*)의 관계는?

  1. 항상 같다
  2. COUNT(*)가 NULL 행만큼 더 크다
  3. COUNT(SCORE)가 더 크다
  4. COUNT(SCORE)는 오류다
정답 보기

2번 COUNT(*)가 NULL 행만큼 더 크다

COUNT(열)은 NULL을 빼고, COUNT(*)는 모든 행을 세요.

Q4. 기존 표에 새 열을 추가하는 SQL은?

  1. ALTER TABLE … ADD
  2. UPDATE TABLE … ADD
  3. CREATE COLUMN …
  4. INSERT COLUMN …
정답 보기

1번 ALTER TABLE … ADD

구조 변경은 DDL인 ALTER TABLE.

헷갈리기 쉬운 O·X

집계 함수를 쓴 조건 COUNT(*) >= 2는 WHERE 절에 쓸 수 있다.

정답 보기

X 집계 조건은 HAVING에 써요.

AVG(SCORE)는 SCORE가 NULL인 행을 빼고 평균을 낸다.

정답 보기

O

문자열 값은 큰따옴표로 감싸도 된다.

정답 보기

X SQL에서 문자열은 작은따옴표예요. 큰따옴표는 열·표 이름에 써요.

함께 보면 좋은 개념