컴퓨터활용능력 1급 필기 · 데이터베이스 일반 과목
컴퓨터활용능력 1급 쿼리와 SQL 핵심정리
- 중요도
- ★★★★★ (5 / 5)
- 출제 비중
- 데이터베이스 일반 20문항 중 약 6문항 (30%)
SELECT 문의 구조, 조건·정렬·그룹, 조인, 실행 쿼리(추가·수정·삭제)를 다룹니다.
쿼리와 SQL, 이것만은 꼭 외우세요
- SELECT 필드 FROM 테이블 WHERE 조건 GROUP BY 그룹 HAVING 그룹 조건 ORDER BY 정렬 순으로 씁니다.
- ORDER BY 에서 ASC 는 오름차순(생략 가능), DESC 는 내림차순입니다.
- LIKE 에서 * 는 여러 글자, ? 는 한 글자를 대신합니다. (액세스 기준)
- INSERT INTO ~ VALUES, UPDATE ~ SET ~ WHERE, DELETE FROM ~ WHERE 형식을 외웁니다.
- 내부 조인(INNER JOIN)은 두 테이블에서 조인 필드 값이 같은 레코드만 가져옵니다.
쿼리와 SQL 대표 문제 5개
문제 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. SQL 문 "SELECT * FROM 사원 ORDER BY 급여 DESC;" 에 대한 설명으로 옳은 것은?
- ① 급여가 낮은 사원부터 차례로 표시한다.
- ② 급여가 높은 사원부터 차례로 표시한다.
- ③ 급여 필드만 표시한다.
- ④ 급여가 같은 사원끼리 묶어서 표시한다.
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ② 급여가 높은 사원부터 차례로 표시한다.
핵심: ORDER BY ~ DESC: 내림차순(큰 값부터) 정렬
DESC 는 내림차순, 곧 큰 값에서 작은 값 순서입니다. ASC(오름차순)는 생략할 수 있지만 DESC 는 꼭 써야 합니다.
틀린 선지
- ① 급여가 낮은 사원부터 차례로 표시한다.: ASC(오름차순)일 때의 결과입니다.
- ③ 급여 필드만 표시한다.: * 는 모든 필드를 표시하라는 뜻입니다.
- ④ 급여가 같은 사원끼리 묶어서 표시한다.: 묶는 것은 GROUP BY 입니다.
문제 4. <사원> 테이블에서 사번이 10 인 사원의 급여를 500 으로 고치는 SQL 문으로 옳은 것은?
- ① ALTER 사원 SET 급여 = 500 WHERE 사번 = 10;
- ② UPDATE 급여 = 500 FROM 사원 WHERE 사번 = 10;
- ③ INSERT INTO 사원 SET 급여 = 500 WHERE 사번 = 10;
- ④ UPDATE 사원 SET 급여 = 500 WHERE 사번 = 10;
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ④ UPDATE 사원 SET 급여 = 500 WHERE 사번 = 10;
핵심: UPDATE 테이블 SET 필드 = 값 WHERE 조건
값을 고칠 때는 UPDATE ~ SET ~ WHERE 형식을 씁니다. WHERE 를 빼면 모든 레코드의 값이 바뀌므로 조심해야 합니다.
틀린 선지
- ① ALTER 사원 SET 급여 = 500 WHERE 사번 = 10;: ALTER 는 테이블의 구조(필드)를 바꿀 때 씁니다.
- ② UPDATE 급여 = 500 FROM 사원 WHERE 사번 = 10;: UPDATE 뒤에는 테이블 이름이 오고 FROM 은 쓰지 않습니다.
- ③ INSERT INTO 사원 SET 급여 = 500 WHERE 사번 = 10;: INSERT 는 새 레코드를 추가할 때 씁니다.
문제 5. 액세스 쿼리의 조건에 Like "김*" 을 지정했을 때 검색되는 값은?
- ① '김'이 들어 있는 모든 값
- ② '김'으로 끝나는 모든 값
- ③ '김'으로 시작하는 모든 값
- ④ '김'으로 시작하는 두 글자 값
▼ 정답과 해설 보기▲ 정답과 해설 접기
정답: ③ '김'으로 시작하는 모든 값
핵심: Like "김*": '김'으로 시작하는 값 (* 는 여러 글자)
액세스에서 별표(*)는 글자 수에 상관없이 아무 글자나 대신합니다. "김*" 은 '김' 뒤에 무엇이 오든 찾으므로 '김'으로 시작하는 값이 모두 나옵니다.
틀린 선지
- ① '김'이 들어 있는 모든 값: Like "*김*" 일 때입니다.
- ② '김'으로 끝나는 모든 값: Like "*김" 일 때입니다.
- ④ '김'으로 시작하는 두 글자 값: Like "김?" 일 때입니다. ? 는 한 글자를 대신합니다.
직접 풀어서 확인해 보세요.