데이터베이스·1급 전용·22장
쿼리와 SQL
선택 쿼리의 조건 작성과 요약, 매개 변수·크로스탭·실행 쿼리, SELECT 문의 구조와 주요 SQL 구문을 정리합니다.
노란 밑줄n회 기출에 나온 지점(숫자는 등장 문항 수)✎ 는 덧붙인 필기
출제 비중 — 데이터베이스에서 가장 무거운 단원. SQL70회 과 SELECT 문23회, 쿼리 종류 구분이 매 회차 나온다.
1. 쿼리의 종류
| 종류 | 내용 |
|---|---|
| 선택 쿼리7회 | 조건에 맞는 데이터를 추출해 보여 준다. 가장 기본 |
| 매개 변수 쿼리8회 | 실행할 때 값을 입력받아 조건으로 쓴다. 조건에 [ ] 대괄호로 메시지를 적는다 |
| 크로스탭 쿼리10회 | 행 머리글·열 머리글·값으로 요약표를 만든다. 행 머리글은 여러 개, 열 머리글과 값은 각각 하나 |
| 실행(액션) 쿼리10회 | 테이블 만들기 · 추가 · 업데이트 · 삭제 네 가지. 실제 데이터를 바꾼다 |
| 통합(UNION) 쿼리 | 여러 테이블의 결과를 하나로 합친다. SQL 보기에서만 작성 |
- 쿼리 결과(레코드셋)는 테이블처럼 보이지만 실제 데이터는 원본 테이블에 있다. 쿼리에서 값을 고치면 원본 테이블도 바뀐다.
2. 디자인 보기에서 조건 작성
- 눈금의 행: 필드 / 테이블 / 정렬 / 표시 / 조건 / 또는.
- 같은 행에 쓴 조건은 AND, 다른 행(또는) 에 쓴 조건은 OR.
- 연산자
| 연산자 | 예 |
|---|---|
| Like | Like "김*" — * 는 여러 글자, ? 는 한 글자, # 은 숫자 한 자리 |
| Between … And … | Between 10 And 20 (경계 포함) |
| In | In ("서울","부산") |
| Is Null / Is Not Null | 빈 값 / 빈 값 아님 |
| Not | 부정 |
- 날짜는 #2026-09-20# 처럼 # 으로 감싼다.
- 요약(집계): 묶는 방법(Group By) · 합계 · 평균 · 개수 · 최대 · 최소 · 조건(Where) · 식(Expression).
- 조건(Where) 으로 지정한 필드는 결과에 표시되지 않는다.
3. SELECT 문
- 기본 구조
| 절 | 내용 |
|---|---|
| SELECT | 표시할 필드. * 는 모든 필드, DISTINCT 는 중복 제거 |
| FROM | 대상 테이블 |
| WHERE | 행(레코드) 에 대한 조건 |
| GROUP BY7회 | 지정한 필드로 그룹을 묶는다 |
| HAVING5회 | 그룹에 대한 조건. 집계 함수 조건은 HAVING 에 쓴다 |
| ORDER BY | 정렬. ASC 오름차순(기본) · DESC 내림차순 |
- 실행 순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.
- 집계 함수: COUNT · SUM · AVG · MAX · MIN. COUNT(*) 는 Null 을 포함한 행 수, COUNT(필드) 는 Null 을 뺀 값의 수.
- TOP n: SELECT TOP 5 … — 정렬(ORDER BY)과 함께 써야 의미가 있고, 동점이면 n 개보다 많이 나올 수 있다.
4. 데이터 조작 SQL
| 구문 | 형태 |
|---|---|
| INSERT | INSERT INTO 테이블(필드…) VALUES(값…) |
| UPDATE | UPDATE 테이블 SET 필드=값 WHERE 조건. WHERE 를 빼면 전체 레코드가 바뀐다 |
| DELETE | DELETE FROM 테이블 WHERE 조건. 레코드 단위로 지워지며 일부 필드만 지울 수는 없다 |
| CREATE TABLE | 테이블 정의(NOT NULL, PRIMARY KEY 지정) |
| ALTER TABLE | ADD / ALTER 로 필드 추가·변경 |
- 조인 SQL: SELECT … FROM A INNER JOIN B ON A.키 = B.키.
- 하위 쿼리: WHERE 절 안에 또 다른 SELECT. IN·EXISTS·비교 연산자와 함께 쓴다.
마무리 체크
- 매개 변수는 대괄호, 크로스탭은 열 머리글·값이 각 1개
- 같은 행=AND, 다른 행=OR
- Like 의 *, ?, #, 날짜는 # 으로 감싼다
- WHERE 는 행 조건, HAVING 은 그룹(집계) 조건
- COUNT(*) 는 Null 포함, COUNT(필드)는 제외
- UPDATE·DELETE 에서 WHERE 를 빠뜨리면 전체가 대상