SQL 조작어(DML)와 SELECT
쉽게 말하면
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 문이 처리되는 순서
- FROM어느 테이블에서(조인 포함)
- WHERE행을 거른다(집계 함수는 못 씀)
- GROUP BY그룹으로 묶는다
- HAVING그룹을 거른다(집계 함수 조건)
- SELECT보여 줄 열과 별칭을 정한다
- ORDER BY정렬한다(SELECT 의 별칭을 쓸 수 있음)
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 조건절 | 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 >= 80 | 80 이상 |
| BETWEEN | year BETWEEN 2 AND 3 | 2 이상 3 이하 (양 끝 포함) |
| IN | dept IN ('전자', '경영') | 목록 중 하나 |
| LIKE | name LIKE '_산' | 두 글자이고 '산'으로 끝남 |
| IS NULL | score IS NULL | 값이 없는 행 (= NULL은 안 됨) |
| NOT | dept NOT IN ('경영') | 부정 |
DML 세 가지
| 명령 | 예 |
|---|---|
| INSERT | INSERT INTO course VALUES ('C104', '네트워크', 3) |
| UPDATE | UPDATE student SET year = year + 1 WHERE sno = 1004 |
| DELETE | DELETE FROM enroll WHERE grade = 'C' |
시험에 이렇게 나와요
- 실행 결과 구하기 → 조건(WHERE)에 맞는 행을 직접 세어 본다
- 중복 제거 → SELECT DISTINCT (WHERE 절이 아님)
- 널 검사 → IS NULL / IS NOT NULL
- 범위 → BETWEEN a AND b는 a 이상 b 이하
- UPDATE 테이블 SET 열=값 WHERE …, INSERT INTO … VALUES …, DELETE FROM … WHERE …
- WHERE 없는 DELETE → 행만 모두 지우고 테이블 구조는 남는다 (DROP과 다름)
확인 문제
Q1. SELECT name FROM student WHERE name LIKE '김%'의 결과로 알맞은 것은?
- 이름이 '김'으로 끝나는 학생
- 이름이 '김'으로 시작하는 학생
- 이름이 '김'인 학생만
- 이름에 '김'이 없는 학생
정답 보기
2번 이름이 '김'으로 시작하는 학생
LIKE에서 %는 0개 이상의 아무 글자, _는 정확히 한 글자다. '김%'는 김으로 시작하는 이름.
Q2. STUDENT에서 점수(score)가 높은 순으로 정렬하는 절은?
- ORDER BY score
- ORDER BY score DESC
- GROUP BY score DESC
- SORT BY score DESC
정답 보기
2번 ORDER BY score DESC
DESC가 내림차순. 기본은 ASC.
Q3. 이름이 세 글자이고 가운데 글자가 '하'인 학생을 찾는 조건은?
- name = '_하_'
- name LIKE '_하_'
- name LIKE '하%'
- name LIKE '%하%'
정답 보기
2번 name LIKE '_하_'
name LIKE '_하_'다. _는 정확히 한 글자, %는 0글자 이상이다. '%하%'는 '하'가 어디에든 있는 이름을 모두 찾는다.
Q4. SQL의 논리적 실행 순서에서 가장 먼저 처리되는 절은?
- SELECT
- ORDER BY
- FROM
- WHERE
정답 보기
3번 FROM
FROM으로 대상 테이블을 정한 뒤 WHERE로 거른다.
Q5. 학번 1004 학생의 학년을 2로 바꾸는 SQL은?
- ALTER student SET year = 2 WHERE sno = 1004
- UPDATE student SET year = 2 WHERE sno = 1004
- UPDATE student year = 2 WHERE sno = 1004
- 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 오류 없이 모든 행이 삭제된다.