컴퓨터활용능력 1급 · 데이터베이스 일반 과목
컴퓨터활용능력 1급 쿼리와 SQL 개념 정리
중요도 ★★★★★ · 30% (추정)
AI가 새로 쓴 글 가운데, 작성과 분리된 AI 검증(다시 읽고 사실·수치 확인)을 통과한 단원만 싣습니다. 틀린 곳을 발견하면 알려 주세요.
개요
이 단원은 테이블에서 원하는 자료만 골라 보고, 자료를 넣고 고치고 지우는 명령인 SQL 을 다룹니다. SELECT 문의 구조와 각 절의 순서, 조건식, 조인, 실행 쿼리의 형식이 고르게 나오는 데이터베이스 과목의 핵심 단원입니다.
SELECT 문은 SELECT 필드 FROM 테이블 WHERE 조건 GROUP BY 그룹 HAVING 그룹 조건 ORDER BY 정렬 순서로 씁니다. WHERE 는 레코드 하나하나에 거는 조건이고, HAVING 은 GROUP BY 로 묶은 그룹에 거는 조건입니다. ORDER BY 에서 ASC 는 오름차순으로 생략할 수 있고, DESC 는 내림차순입니다. 액세스의 LIKE 조건에서 * 는 여러 글자를, ? 는 한 글자를 대신합니다.
자료를 바꾸는 실행 쿼리는 INSERT INTO ~ VALUES 로 추가하고, UPDATE ~ SET ~ WHERE 로 고치고, DELETE FROM ~ WHERE 로 지웁니다. 두 테이블을 합쳐 볼 때 쓰는 내부 조인(INNER JOIN)은 조인 필드 값이 양쪽에서 같은 레코드만 가져옵니다.
핵심 개념
SELECT 문의 순서
SELECT 필드 FROM 테이블 WHERE 조건 GROUP BY 그룹 HAVING 그룹 조건 ORDER BY 정렬 순서로 씁니다. 순서를 바꿔 쓰면 오류가 납니다.
외우는 요령'셀·프·웨·그·해·오' 여섯 글자로 외우세요.
WHERE 와 HAVING
WHERE 는 묶기 전에 레코드 하나하나에 거는 조건이고, HAVING 은 GROUP BY 로 묶은 다음 그룹 전체에 거는 조건입니다. SUM, COUNT 같은 집계 결과에 조건을 걸 때는 HAVING 을 씁니다.
외우는 요령'HAVING 은 GROUP BY 와 짝꿍'.
ASC 와 DESC
ORDER BY 뒤에 ASC 를 쓰면 작은 값부터(오름차순), DESC 를 쓰면 큰 값부터(내림차순) 정렬합니다. 아무것도 쓰지 않으면 오름차순입니다.
외우는 요령'DESC = Descending(내려가기)', 생략하면 오름차순.
LIKE 와 만능 문자
LIKE 는 글자 모양으로 찾는 조건입니다. 액세스에서는 * 가 글자 수와 상관없이 여러 글자를, ? 가 딱 한 글자를 대신합니다. 예를 들어 LIKE "김*" 는 김으로 시작하는 값을 찾습니다.
외우는 요령'별(*)은 여럿, 물음표(?)는 하나'.
실행 쿼리 형식
추가는 INSERT INTO 테이블(필드) VALUES(값), 수정은 UPDATE 테이블 SET 필드=값 WHERE 조건, 삭제는 DELETE FROM 테이블 WHERE 조건 형식으로 씁니다.
외우는 요령'INSERT 는 INTO, UPDATE 는 SET, DELETE 는 FROM' 을 짝으로 외우세요.
내부 조인(INNER JOIN)
두 테이블을 연결할 때 조인 필드 값이 양쪽 테이블에 모두 있는 레코드만 가져오는 방식입니다. 한쪽에만 있는 레코드는 결과에서 빠집니다.
외우는 요령'INNER = 안쪽', 두 원이 겹치는 가운데만 가져옵니다.
자주 나오는 포인트
- SELECT 문 절의 순서를 바꿔 놓은 선지가 단골입니다. GROUP BY 다음이 HAVING, 맨 끝이 ORDER BY 입니다.
- 그룹에 조건을 걸면서 WHERE 를 쓴 선지는 틀린 경우가 많습니다. 그룹 조건은 HAVING 입니다.
- UPDATE 문에 SET 이 빠지거나 DELETE 문에 FROM 이 빠진 선지를 조심하세요.
- 액세스에서는 * 와 ? 를 만능 문자로 씁니다.
헷갈리는 것 비교: 실행 쿼리 세 가지
| 작업 | 형식 | 짝 단어 |
|---|---|---|
| 추가 | INSERT INTO 테이블 VALUES (값) | INTO, VALUES |
| 수정 | UPDATE 테이블 SET 필드=값 WHERE 조건 | SET |
| 삭제 | DELETE FROM 테이블 WHERE 조건 | FROM |
대표 문제 3개
검수를 마친 예상문제 가운데 이 단원의 대표 문제입니다.
문제 1. <사원> 테이블에서 '부서'가 "영업"인 사원의 이름을 검색하는 SQL 문으로 옳은 것은?
- ① SELECT 이름 FROM 사원 ORDER BY 부서 = "영업";
- ② SELECT 이름 WHERE 부서 = "영업" FROM 사원;
- ③ SELECT 사원 FROM 이름 WHERE 부서 = "영업";
- ④ SELECT 이름 FROM 사원 WHERE 부서 = "영업";
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ④ SELECT 이름 FROM 사원 WHERE 부서 = "영업";
핵심: SELECT 필드 FROM 테이블 WHERE 조건
검색 SQL 은 SELECT(무엇을) → FROM(어디에서) → WHERE(어떤 조건으로) 순서로 씁니다.
틀린 선지
- ① SELECT 이름 FROM 사원 ORDER BY 부서 = "영업";: ORDER BY 는 조건이 아니라 정렬에 쓰는 절입니다.
- ② SELECT 이름 WHERE 부서 = "영업" FROM 사원;: WHERE 는 FROM 뒤에 와야 합니다.
- ③ SELECT 사원 FROM 이름 WHERE 부서 = "영업";: 필드 이름과 테이블 이름의 자리가 바뀌었습니다.
문제 2. <사원> 테이블에서 '부서'별 급여의 평균을 구하되, 평균이 300 이상인 부서만 표시하려고 한다. 빈칸에 알맞은 것은? SELECT 부서, AVG(급여) FROM 사원 GROUP BY 부서 ( ) AVG(급여) >= 300;
- ① HAVING
- ② WHERE
- ③ ORDER BY
- ④ LIKE
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ① HAVING
핵심: 그룹에 대한 조건은 HAVING, 레코드에 대한 조건은 WHERE
GROUP BY 로 묶은 그룹에 조건을 걸 때는 HAVING 을 씁니다. WHERE 는 묶기 전의 레코드 하나하나에 거는 조건입니다.
틀린 선지
- ② WHERE: 그룹 함수(AVG 등)를 쓴 조건에는 쓸 수 없습니다.
- ③ ORDER BY: 정렬할 때 쓰는 절입니다.
- ④ LIKE: 글자의 일부가 같은 것을 찾을 때 쓰는 연산자입니다.
문제 3. <사원> 테이블에 사번이 10 이고 이름이 '김철수'인 레코드를 추가하는 SQL 문으로 옳은 것은?
- ① ADD INTO 사원(사번, 이름) VALUES (10, '김철수');
- ② INSERT INTO 사원(사번, 이름) VALUES (10, '김철수');
- ③ INSERT 사원 VALUES 사번 = 10, 이름 = '김철수';
- ④ INSERT INTO 사원 SET 사번 = 10, 이름 = '김철수';
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ② INSERT INTO 사원(사번, 이름) VALUES (10, '김철수');
핵심: INSERT INTO 테이블(필드) VALUES (값)
레코드를 추가하는 문장의 틀은 INSERT INTO 테이블(필드1, 필드2) VALUES (값1, 값2); 입니다. 필드와 값은 순서와 개수가 같아야 합니다.
틀린 선지
- ① 레코드를 추가하는 명령은 ADD 가 아니라 INSERT 입니다.
- ③ INTO 가 빠졌고 VALUES 뒤에는 괄호 안에 값만 적습니다.
- ④ SET 은 UPDATE 문에서 쓰는 말입니다.