공든탑앱 열기

SQL 조작어(DML)와 SELECT

정보처리기사 · SQL 응용 · 약 16분

쉽게 말하면

SELECT는 표에서 원하는 데이터를 찾아 보여 주는 명령이에요. 'SELECT 무엇을 FROM 어디서 WHERE 어떤 조건으로 ORDER BY 어떤 순서로'를 기억하면 돼요. 데이터를 넣을 땐 INSERT, 고칠 땐 UPDATE, 지울 땐 DELETE를 써요. UPDATE와 DELETE에서 WHERE를 빼먹으면 모든 행이 바뀌거나 지워지니 조심해야 해요. 모의 SQL 창에서 학생 표를 직접 조회해 봐요.

시험용 정의

SELECT 기본 구조: SELECT [DISTINCT] 열 FROM 테이블 [WHERE 조건] [GROUP BY 열 [HAVING 조건]] [ORDER BY 열 [ASC|DESC]]. 논리적 실행 순서는 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY다. WHERE에는 비교 연산자, AND·OR·NOT, BETWEEN a AND b(a 이상 b 이하), IN (값 목록), LIKE(% 여러 글자, _ 한 글자), IS NULL을 쓴다. NULL은 = 로 비교할 수 없어 IS NULL을 쓴다. DISTINCT는 중복 행을 제거하고, ORDER BY의 기본은 ASC(오름차순)다. 데이터 변경은 INSERT INTO 테이블 [(열)] VALUES (값), UPDATE 테이블 SET 열 = 값 [WHERE], DELETE FROM 테이블 [WHERE]이다.

비유로 이해하기

도서관 검색대다. FROM은 어느 서가에서, WHERE는 '2020년 이후 출간'처럼 조건, SELECT는 제목과 저자만 보여 달라는 것, ORDER BY는 최신순 정렬이다.

자세히

그림으로 보기: SELECT 문이 처리되는 순서

  1. FROM어느 테이블에서(조인 포함)
  2. WHERE행을 거른다(집계 함수는 못 씀)
  3. GROUP BY그룹으로 묶는다
  4. HAVING그룹을 거른다(집계 함수 조건)
  5. SELECT보여 줄 열과 별칭을 정한다
  6. ORDER BY정렬한다(SELECT 의 별칭을 쓸 수 있음)
쓰는 순서와 처리 순서가 다르다. 그래서 WHERE 에서는 SELECT 에서 만든 별칭을 쓸 수 없고 ORDER BY 에서는 쓸 수 있다

먼저 알아 둘 말

말뜻
조건절WHERE 뒤에 오는, 행을 거르는 식
와일드카드LIKE에서 아무 글자를 뜻하는 기호 (% 여러 글자, _ 한 글자)
ASC / DESC오름차순(작은 것부터, 기본) / 내림차순
별칭열이나 테이블에 붙이는 임시 이름 (AS)

이 실습의 표

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

WHERE 조건 모음

조건예뜻
비교score >= 8080 이상
BETWEENyear BETWEEN 2 AND 32 이상 3 이하 (양 끝 포함)
INdept IN ('전자', '경영')목록 중 하나
LIKEname LIKE '_산'두 글자이고 '산'으로 끝남
IS NULLscore IS NULL값이 없는 행 (= NULL은 안 됨)
NOTdept NOT IN ('경영')부정

DML 세 가지

명령예
INSERTINSERT INTO course VALUES ('C104', '네트워크', 3)
UPDATEUPDATE student SET year = year + 1 WHERE sno = 1004
DELETEDELETE FROM enroll WHERE grade = 'C'

시험에 이렇게 나와요

확인 문제

Q1. SELECT name FROM student WHERE name LIKE '김%'의 결과로 알맞은 것은?

  1. 이름이 '김'으로 끝나는 학생
  2. 이름이 '김'으로 시작하는 학생
  3. 이름이 '김'인 학생만
  4. 이름에 '김'이 없는 학생
정답 보기

2번 이름이 '김'으로 시작하는 학생

LIKE에서 %는 0개 이상의 아무 글자, _는 정확히 한 글자다. '김%'는 김으로 시작하는 이름.

Q2. STUDENT에서 점수(score)가 높은 순으로 정렬하는 절은?

  1. ORDER BY score
  2. ORDER BY score DESC
  3. GROUP BY score DESC
  4. SORT BY score DESC
정답 보기

2번 ORDER BY score DESC

DESC가 내림차순. 기본은 ASC.

Q3. 이름이 세 글자이고 가운데 글자가 '하'인 학생을 찾는 조건은?

  1. name = '_하_'
  2. name LIKE '_하_'
  3. name LIKE '하%'
  4. name LIKE '%하%'
정답 보기

2번 name LIKE '_하_'

name LIKE '_하_'다. _는 정확히 한 글자, %는 0글자 이상이다. '%하%'는 '하'가 어디에든 있는 이름을 모두 찾는다.

Q4. SQL의 논리적 실행 순서에서 가장 먼저 처리되는 절은?

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

3번 FROM

FROM으로 대상 테이블을 정한 뒤 WHERE로 거른다.

Q5. 학번 1004 학생의 학년을 2로 바꾸는 SQL은?

  1. ALTER student SET year = 2 WHERE sno = 1004
  2. UPDATE student SET year = 2 WHERE sno = 1004
  3. UPDATE student year = 2 WHERE sno = 1004
  4. INSERT INTO student SET year = 2 WHERE sno = 1004
정답 보기

2번 UPDATE student SET year = 2 WHERE sno = 1004

UPDATE 테이블 SET 열 = 값 WHERE 조건.

헷갈리기 쉬운 O·X

WHERE score = NULL 로 점수가 비어 있는 행을 찾을 수 있다.

정답 보기

X NULL은 IS NULL로만 찾는다.

BETWEEN 60 AND 80은 60과 80을 포함한다.

정답 보기

O

DELETE FROM student 는 WHERE가 없으면 오류가 난다.

정답 보기

X 오류 없이 모든 행이 삭제된다.

함께 보면 좋은 개념