You are on page 1of 8

PART 1 | 데이터베이스

(4) DML
1) SELECT 9908 0007 0103 0303 0305 0503 9904 9908 9910 0305 0409 0505 0509

① 테이블을 구성하는 튜플들 중에서 조건을 만족하는 튜플을 검색하여 임시 테


이블을 구성하는 명령
② 기본 구조 0205 0308 0007 0205

SELECT 속성명, ...


FROM 테이블명, ...
[WHERE 조건]
③ 예제 (기본 구조)
• 수강생 테이블의 전체속성(*)을 나타내시오.
⇨ SELECT * FROM 수강생
(=SELECT 이름,과목,주소,수강료 FROM 수강생)
• 수강생 테이블에서 중복 제거 된 과목만 검색하시오. 0109 0609

⇨ SELECT DISTINCT 과목 FROM 수강생


• 수강생 테이블에서 과목이 정보인 모든 튜플을 검색하시오.
SELECT * FROM 수강생 WHERE 과목='정보'
• 수강생 테이블에서 과목이 정보이고 주소가 남구인 모든 튜플을 검색하시오. 0305

⇨ SELECT * FROM 수강생 WHERE 과목='정보' AND 주소='남구'


• 수강생 테이블에서 이름이 '김'으로 시작하는 모든 튜플을 검색하시오. 0005 0209

⇨ SELECT * FROM 수강생 WHERE 이름 LIKE '김%'


※ %는 모든 문자이며, _ 는 한자리 문자임
• 수강생 테이블에서 수강료가 30이상 90이하인 모든 튜플을 검색하시오.
⇨ SELECT * FROM 수강생 WHERE 수강료 BETWEEN 30 AND 90
• 수강생 테이블에서 과목이 NULL인 모든 튜플을 검색하시오.
⇨ SELECT * FROM 수강생 WHERE 과목 IS NULL
④ 확장 구조 9910 0106 0305

SELECT 속성명, ...


FROM 테이블명, ...
[WHERE 조건]
[GROUP BY 속성명, ...
[HAVING 조건]
[ORDER BY 속성명[ASC|DESC];
• DISTINCT
DISTINCT 는 생략이 가능하며, 생략하게 되면 ALL 이 됨
• [GROUP BY 속성 [HAVING 조건]]
조건에 맞는 그룹별로 처리함
• [ORDER BY 속성 [ASC | DESC]] 0007

정렬 ASC:오름차순(A-Z, ㄱ-ㅎ), DESC:내림차순


• GROUP BY
특정 속성을 기준으로 그룹화 하여 검색할 때 그룹화 할 속성을 지정

58
www.gisa79.com
• HAVING 9910 0509 9906

GROUP BY 와 함께 사용되며, 그룹에 대한 조건 지정


• 집단 함수 9910 0405

- COUNT(속성): 그룹별 튜플 수
- AVG(속성): 그룹별 평균
- SUM(속성): 그룹별 합계
- MAX(속성): 그룹별 최대값
- MIN(속성): 그룹별 최소값
• EXISTS(Q)
질의 Q의 결과에 최소한 한 개의 튜플이 있다면 참, 그렇지 않으면 거짓
을 반환.
• NOT EXISTS(Q)
질의 Q의 결과에 튜플이 없다면 참, 그렇지 않으면 거짓을 반환.
• 비교연산자 0106

= : 같다
<> : 같지 않다
> : 크다
< : 작다
>= : 크거나 같다
<= : 작거나 같다
IN : 포함되어 있다
• IS NULL 0409

조건을 지정하는 WHERE 절에서 속성의 값이 NULL인 것을 검색


• IS NOT NULL
조건을 지정하는 WHERE 절에서 속성의 값이 NULL이 아닌 것을 검색
• 하위 질의
조건절의 주어진 질의를 먼저 수행하여 그 검색 결과를 조건절의 피연산자
로 사용함
⑤ 예제
• 수강생 테이블에서 과목이 정보인 튜플을 검색하되, 이름을 기준으로 내림
차순 정렬하여 모든 튜플을 검색하시오.
(정렬 방법을 명시하지 않을 경우 기본적으로 ASC (오름차순) 정렬됨)
⇨ SELECT * FROM 수강생 WHERE 과목='정보'
ORDER BY 이름 DESC
• 수강생 테이블에서 수강료가 100이상인 과목별 수강생이 2명 이상인 수강
생수를 검색하시오.
⇨ SELECT 과목, COUNT(*) AS 수강생수 FROM 수강생
WHERE 수강료>=100 GROUP BY 과목 HAVING COUNT(*)>=2
• 장학금을 받는 학생의 이름과 수강과목, 주소를 검색하시오.
⇨ SELECT 이름, 과목, 주소 FROM 수강생 WHERE 이름
IN (SELECT 이름 FROM 장학생)

59
PART 1 | 데이터베이스

• 책명이 운영체제인 책의 가격을 검색하시오. 0409

⇨ SELECT 가격 FROM 도서가격 WHERE 책번호=


(SELECT 책번호 FROM 도서 WHERE 책명='운영체제')
• 수강생 테이블과 정회원 테이블의 모든 튜플을 중복 없이 하나의 결과로
검색하시오. 0205

⇨ SELECT * FROM 수강생


UNION
SELECT * FROM 정회원
※ UNION : 둘 이상의 질의 결과를 중복 없이 하나의 결과로 조작할 수
있게 함
UNION ALL : 중복 허용

2) INSERT 9908 0007 0303

① 데이터베이스에 저장된 자료(튜플)를 검색 삽입 삭제 갱신 재구성하기 위한


언어
② 기본 구조 0303 0403 0603

INSERT INTO 테이블명(속성명,…) VALUES(데이터값,…);

③ 예제
• 수강생 테이블에 김길현, 정보, 남구, 100 을 넣어라.
⇨ INSERT INTO 수강생 VALUES ('김길현','정보','남구',100)
• 수강생 테이블에 이름, 수강료 에 이상인, 120을 넣어라.
⇨ INSERT INTO 수강생(이름,수강료) VALUES ('이상인',120)
• 수강생 테이블에서 주소가 남구인 이름, 과목, 수강료를 SELECT 해서
정보수강생 테이블을 만들어 이름, 과목, 수강료를 넣어라.
⇨ INSERT INTO 정보수강생(이름,과목,수강료)
SELECT 이름,과목,수강료 FROM 수강생 WHERE 주소='남구‘
속성 테이블 조건

3) UPDATE 0505 0509

① 테이블에 있는 튜플들 중에 특정 튜플의 내용을 갱신할 때 사용


② 기본 구조 0409 0003 0203 0305 0503

UPDATE 테이블명 Set 속성명 = 데이터값 Where 조건;

③ 예제
• 수강생 테이블에서 이름의 최영희인 튜플의 과목을 사무로 바꾸시오.
⇨ UPDATE 수강생 SET 과목='사무' WHERE 이름='최영희'
• 수강생 테이블에서 과목이 워드인 튜플의 수강료를 +10 하시오.
⇨ UPDATE 수강생 SET 수강료=수강료+10 WHERE 과목='워드'

60
www.gisa79.com

4) DELETE 9904

① 테이블에 있는 튜플들 중에서 특정 튜플을 삭제할 때 사용하는 명령문 0503

② The Command removes tuples from a relation.


(릴레이션에서 튜플을 제거하는 명령어)
③ 기본 구조 0503

DELETE FROM 테이블명 WHERE 조건;

④ 예제
• 수강생 테이블에서 과목이 사무인 것만 삭제하시오.
⇨ DELETE FROM 수강생 WHERE 과목='사무'
• DELETE 는 튜플을 삭제하는 명령어 (테이블 X)
⇨ DELETE FROM 수강생
※ DROP 은 테이블 자체를 삭제하는 명령어이고,
DELETE는 튜플을 삭제하는 명령어임

61
PART 1 | 데이터베이스

(5) DCL
1) GRANT 9904 0010 0505

① 데이터베이스 사용자에게 사용권한 부여


② 기본 구조

GRANT 권한 ON 테이블명 TO 사용자명 [WITH GRANT OPTION];

③ 예제
• GRANT SELECT ON 수강생 TO KSH;
(KSH는 다른 사람에게 권한을 부여할 수 없음)
⇨ 권한 : ALL, INSERT, DELETE, UPDATE, SELECT 등
※ WITH GRANT OPTION
사용자가 받은 권한을 다른 사용자에게 부여할 수 있음

2) REVOKE 0505

① 데이터베이스 사용자의 사용 권한을 취소


② 기본 구조

REVOKE 권한 ON 테이블명 FROM 사용자명 [CASCADE];

③ 예제
• REVOKE SELECT ON 수강생 FROM KSH [CASCADE];
⇨ KSH 에게 수강생 테이블에 대한 권한 취소
※ CASCADE
권한을 부여받은 사용자가 다른 사용자에게 부여한 권한도 취소

3) COMMIT
데이터베이스 조작 작업을 영구적으로 반영하여 완료함

4) ROLLBACK
데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구

|오|답|쪽|지| (6) 내장(삽입) SQL


내장 SQL의 특징 오답
✗내장 SQL 문의 호스트 변수
의 데이터 타입은 이에 대응
1) 내장 SQL의 정의
하는 데이터베이스 필드의 응용 프로그램 안에 데이터베이스에서 사용하는 데이터를 정의 또는 질의하는
SQL 데이터 타입과 일 치
하지 않아도 됨 SQL문장을 넣어 프로그램이 실행될 때 함께 실행되도록 호스트 프로그램 언어
✗호스트 변수와 데이터베이
스 필드의 이름이 중복 사용 로 만든 삽입된 SQL문
될 수 없음
✗호스트 언어의 변수는 SQL 2) 내장 SQL의 특징 0203 0308 0005 0007 0010 0103 0106 0109 0303 0308 0403 0405 0505 0603
변수와 구별하기 위하여 앞
에 % 기호를 붙임 ① 응용 프로그램 내에 데이터를 정의하거나 질의하는 SQL 문장을 내포하여 프
✗SQL code의 값이 음수인
경우 경고를 의미 로그램이 실행될 때 함께 실행되도록 함
✗SQL문은 주언어 변수(host
variable)의 참조를 포함 할 ② Host Program의 컴파일 시 선행처리기에 의해 내장 SQL문은 분리되어 컴파
수 없음
✗내장 SQL 문장 끝은 어떠한 일 됨 (내장 SQL 프로그램은 컴파일보다 우선하는 전 처리기에 의해 처리됨)
호스트 언어일지라도 반드시
세미콜론(;)으로 종료해야 함

62
www.gisa79.com
• 내장 SQL을 포함한 프로그램을 번역하여 실행시키는데 필요한 요소 0010

- 호스트 프로그램 컴파일러


- 예비 컴파일러
- DML 컴파일러
③ 호스트 변수와 데이터베이스 필드의 이름은 같아도 됨
④ 호스트 언어의 실행문이 나타날 수 있는 곳이면 어디든지 나타날 수 있음
⑤ 삽입 SQL문은 호스트 변수를 포함할 수 있음
⑥ SQL 문장의 식별자로서 EXEC SQL을 앞에 기술함
⑦ SQL에 사용되는 호스트 변수는 콜론(:)을 앞에 붙임
⑧ SQL code의 값이 영(제로)이면 성공적으로 수행되었음을 의미
⑨ 호스트 변수의 데이터 타입은 이에 대응하는 데이터베이스 필드의 SQL 데이
터 타입과 일치해야 함

3) 커서(Cursor)
① SQL 문의 수행을 위해 별도의 메모리영역(Context Area)을 할당함
② Context Area는 SQL 문의 결과 Set과 수행된 SQL 문에 대한 정보를 가짐
③ 사용자는 Cursor를 통하여 Context Area의 통제와 관리가 가능함. 즉, 커서
는 Context Area에 대한 핸들

4) 커서 관련 명령어 0103

① DECLARE
커서를 정의하는 증 커서에 관련된 선언을 하는 명령
② OPEN
커서가 질의 결과의 첫 번째 튜플을 포인트 하도록 설정하는 명령
③ FETCH
질의 결과의 튜플들 중 현재의 자음 튜플로 커서를 이동시키는 명령
④ CLOSE
질의 수행 결과에 대한 처리 종료 시 커서를 닫기 위해 사용하는 명령
• 예제
DECLARE
v_dept dept.dname%type;
CURSOR cur_dept IS --------------Cursor 선언
select dname from dept;
BEGIN
OPEN cur_dept; -- Cursor open
FETCH cur_dept INTO v_dept; -- 첫 번째 row fetch
FETCH cur_dept INTO v_dept; -- 두 번째 row fetch
FETCH cur_dept INTO v_dept; -- 세 번째 row fetch
FETCH cur_dept INTO v_dept; -- 네 번째 row fetch
CLOSE cur_dept;
END;

63
PART 1 | 데이터베이스

|기|출|문|제| 0007 0109 0403

6. 기본 테이블 R를 이용하여 뷰 V1을 정의하고, 뷰


V1을 이용하여 다시 뷰 V2가 정의되었다. 그리고
0103 기본 테이블 R과 뷰 V2를 조인하여 뷰 V3을 정
1. 데이터 정의 언어(Data Definition Language : 의하였다. 이때 다음과 같은 SQL 문이 실행되면
DDL)와 관련된 설명으로 옳지 않은 것은? 어떤 결과가 발생하는지 올바르게 설명한 것은?
가. 데이터베이스 스킴은 데이터 정의 언어라는 DROP VIEW V1 RESTRICT :
특별한 언어로서 표현된 정의의 집합으로 지 가. V1만 삭제된다.
정된다. 나. R, V1, V2, V3 모두 삭제된다.
나. DDL은 번역한 결과가 데이터사전(data-dictionary 다. V1, V2, V3만 삭제된다.
또는 data directory)이라는 특별한 파일에 여러 라. 하나도 삭제되지 않는다.
개의 테이블로서 저장된다.
0103
다. 데이터 사전은 단순 데이터(simple data)를
7. 다음 SQL 문의 실행결과를 가장 올바르게 설명
수록 하고 있는 파일이다.
한 것은?
라. 데이터베이스 관리 시스템(DBMS) 내에서 사
용자의 편의와 구현상의 편의를 위해 명령어 Drop Table 인사 Cascade;
를 제공하는 것은 DDL이다.
가. 인사 테이블을 제거한다.
나. 인사 테이블을 참조하는 테이블과 인사 테이
0109 0305 0605
블을 제거한다.
2. 관계 데이터 언어(Data Language) 중에서 데이 다. 인사테이블이 참조중이면 제거하지 않는다.
터의 보안, 무결성, 회복과 밀접한 관련이 있는 라. 인사 테이블을 제거할 지의 여부를 사용자에
데이터 언어는? 게 다시 질의한다.
가. 데이터 정의어(Data Definition Language)
9908
나. 데이터 조작어(Data Manipulation Language)
8. 다음 SQL 문장이 뜻하는 것은 무엇인가?
다. 데이터 제어어(Data Control Language)
라. 도메인 관계해석 질의어(Query By Example) INSERT INTO 컴퓨터과 테이블(학번, 이름, 학
년) SELECT 학번, 이름, 학년 FROM 학생테
0209 0403 이블 WHERE 학과=‘컴퓨터’;
3. SQL에서 명령어 짝의 사용이 부적절한 것은? 가. 학생테이블에서 학과가 컴퓨터인 사람의 학
가. UPDATE... / SET... 번, 이름, 학년을 검색하라.
나. INSERT... / INTO... 나. 학생테이블에 학과가 컴퓨터인 사람의 학번,
다. DELETE... / FROM... 이름, 학년을 삽입하라.
라. CREATE VIEW... / TO... 다. 학생테이블에서 학과가 컴퓨터인 사람의 학
번, 이름, 학년을 검색하여 컴퓨터과 테이블에
삽입하라.
0405
라. 컴퓨터과 테이블에서 학과가 컴퓨터인 사람의 학
4. STUDENT 테이블을 생성한 후, GENDER 필드가 번, 이름, 학년을 검색하여 학생테이블에 삽입하라.
누락되어 이를 추가하려고 한다. 이에 적합한
SQL 명령어는? 9908

가. CREATE 나. ALTER 9. 학생(STUDENT) 테이블에 전산과 학생이 50명,


다. ADD 라. MODIFY 전자과 학생이 100명, 기계과 학생이 50명 있다
0603
고 할 때, 다음 SQL 문 ㉠, ㉡, ㉢의 실행 결과
튜플 수는 각각 얼마인가? (단, DEPT 필드는 학
5. SQL의 DROP 문은 어떠한 목적으로 사용되는가?
과명을 의미한다.)
가. 스키마, 테이블 및 뷰의 제거 시에 사용된다.
나. 스키마, 테이블 및 뷰의 정의 시에 사용된다. ㉠ SELECT DEPT FROM STUDENT;
다. 데이터베이스의 무결성을 체크하는데 사용된다. ㉡ SELECT DISTINCT DEPT FROM STUDENT;
라. 데이터베이스를 최적화하는데 사용된다. ㉢ SELECT COUNT (DISTINCT DEPT) FROM
STUDENT WHERE DEPT=‘전산과’;
가. ㉠ 3 ㉡ 3 ㉢ 1
나. ㉠ 200 ㉡ 3 ㉢ 1
다. ㉠ 200 ㉡ 3 ㉢ 50
라. ㉠ 200 ㉡ 200 ㉢ 50

64
www.gisa79.com

0106 9904 0505

10. 회사원이라는 테이블에서 사원명을 찾을 때, 연 13. 다음과 같은 일련의 권한 부여 SQL 명령에 대


락번호가 Null 값이 아닌 사원명을 모두 찾을 때 한 설명 중 부적합한 것은?
의 SQL 질의로 옳은 것은?
DBA: GRANT SELECT ON STUDENT TO
가. SELECT 사원명 FROM 회사원 WHERE 연
락번호 !=NULL; U1 WITH GRANT OPTION;
나. SELECT 사원명 FROM 회사원 WHERE 연 U1: GRANT SELECT ON STUDENT TO U2;
락번호 <> NULL; DBA: REVOKE SELECT ON STUDENT
다. SELECT 사원명 FROM 회사원 WHERE 연 FROM U1 CASCADE;
락번호 IS NOT NULL;
라. SELECT 사원명 FROM 회사원 WHERE 연 가. U1은 STUDENT에 대한 검색 권한이 없다.
락번호 DON'T NULL; 나. DBA는 STUDENT에 대한 검색 권한이 있다.
다. U2는 STUDENT에 대한 검색 권한이 있다.
0303
라. U2는 STUDENT에 대한 검색 권한을 다른
11. 아래의〔인사〕테이블과〔차량〕테이블을 이용 사용자에게 부여할 수 없다.
하여 SQL문을 수행했을 경우의 결과는?
select 종류 from 차량 where 사원번호 = 0203 0308
(select 사원번호 from 인사 where 성명 = 14. Embedded-SQL의 설명으로 옳지 않은 것은?
오형우);
가. 응용 프로그램 내에 데이터를 정의하거나 질
[인사] 성명 소속 사원번호 [차량] 사원번호 종류 의하는 SQL 문장을 내포하여 프로그램이 실
김이순 총무과 25 23 A 행될 때 함께 실행되도록 한다.
박이준 자재과 56 25 B 나. Host Program의 컴파일 시 선행처리기에 의
이형수 영업과 23 43 C 해 내장 SQL문은 분리되어 컴파일 된다.
오형우 교육과 43 56 D
다. 호스트 변수와 데이터베이스 필드의 이름은
가. 43 나. 56 같아도 된다.
다. C 라. D 라. 내장 SQL 문의 호스트 변수의 데이터 타입은
이에 대응하는 데이터베이스 필드의 SQL 데
0106
이터 타입과 일치하지 않아도 된다.
12. 관계 데이터베이스의 테이블 지점정보(지점코
드, 소속도시, 매출액)에 대해 다음과 같은 SQL 0103
문이 실행되었다. 그 결과에 대한 설명으로 부적
15. 삽입(embedded) SQL 문이 포함된 응용 프로
합한 것은?
그램에서 프로그램의 중간에 ‘EXEC SQL
SELECT 소속도시, AVG(매출액)
FETCH C1.....'과 같은 문장이 포함되어 있다
FROM 지점정보 WHERE 매출액 > 1000 면, 이 문장이 나타나기 전에 반드시 먼저 나타
GROUP BY 소속도시 나야 되는 삽입 SQL명령어들로 구성된 것은?
HAVING COUNT(*) >= 3; 가. DECLARE CURSOR
가. WHERE 절의 조건에 의해 해당 도시의 지점 나. DECLARE CURSOR, OPEN
들의 매출액 평균이 1000 이하인 경우는 출 다. DECLARE CURSOR, OPEN, PREPARE
력에서 제외된다. 라. DECLARE CURSOR, OPEN, PREPARE,
나. 지점이 3 군데 이상 있는 도시에 대해 각 도 EXECUTE
시별로 그 도시에 있는 매출액 1000 초과인
지점들의 평균 매출액을 구하는 질의이다.
다. SELECT 절의 "AVG(매출액)"을 "MAX(매출
액)"으로 변경하면 각 도시 별로 가장 높은
매출을 올린 지점의 매출액을 구할 수 있다.
라. HAVING 절에서 "COUNT(*)>=3"을 "SUM
(매출액)>=5000"으로 변경하면 어느 한 도시
의 지점들의 매출액 합이 5000 이상인 경우
만 그 도시 지점들의 매출액 평균을 구할 수
있다.

65

You might also like