목차
💡 주요 키워드 ? SQL, DDL, DROP, DCL, GRANT, DML, DELETE, SELECT, DISTINCT, JOIN
💡 관계 대수(Relation Algebra) : 기존 릴레이션(테이블)들로부터 새로운 릴레이션을 생성하는 절차적 언어 문법 이라고 보면 된다. 릴레이션에 대해 기본적인 연산자들을 적용하여 보다 복잡한 관계 대수식을 점차적으로 만들 수 있다.
💡 관계 대수의 9대 연산자 : 셀렉션, 프로젝션, 합집합, 교집합, 차집합, 카티션 곱, 조인, 디비전
💡 관계 해석(Relation Calculus) : 관계 해석은 원하는 데이터가 무엇인지만 선언하는 이른바 비절차적 언어이다. 즉, 원하는 데이터만 명시하고 "어떻게 질의를 해석하는가"에 대해 언급이 없는 선언만 하는 언어인 것이다.
관계 해석은 튜플 관계 해석(Tuple Relational Calculus), 도메인 관계 해석(Domain Relational Calculus) 종류가 있다.
💡 질의어(Query Language) : 질의어는 데이터베이스 파일과 범용 프로그래밍 언어를 정확히 알지 못하는 단말 사용자들이 단말기를 통해서 대화식으로 쉽게 DB를 이용할 수 있도록 되어 있는 비 절차어의 일종이다.
명령어 | 기능 |
CREATE | SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의한다. |
ALTER | TABLE에 대한 정의를 변경하는 데 사용한다. |
DROP | SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 삭제한다. |
💡 스키마란 ?
1. 스키마는 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합이다.
2. 스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다.
3. 스키마는 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나눠진다.
명령어 | 기능 |
SELECT | 테이블에서 조건에 맞는 튜플을 검색한다. |
INSERT | 테이블에서 새로운 튜플을 삽입한다. |
DELETE | 테이블에서 조건에 맞는 튜플을 삭제한다. |
UPDATE | 테이블에서 조건에 맞는 튜플의 내용을 변경한다. |
명령어 | 기능 |
COMMIT | 명령에 의해 수행된 결과를 실제 물리적 디스크로 저장하고, 데이터베이스 조작 작업이 정상적으로 완료되었음을 관리자에게 알려준다. |
ROLLBACK | 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구한다. |
GRANT | 데이터베이스 사용자에게 사용 권한을 부여한다. |
REVOKE | 데이터베이스 사용자의 사용 권한을 취소한다. |
📌 DDL(데이터 정의어)는 DB 구조, 데이터 형식, 접근 방식 등 DB를 구축하거나 수정할 목적으로 사용하는 언어이다.
📌 CREATE SCHEMA는 스키마를 정의하는 명령문이다.
CREATE SCHEMA 스키마명 AUTHORIZATION 사용자_id;
🔔 예제) 소유권자의 사용자 ID가 '홍길동'인 스키마 '대학교'를 정의하는 SQL문은 다음과 같다.
CREATE SCHEMA 대학교 AUTHORIZATION 홍길동;
📌 CREATE DOMAIN은 도메인을 정의하는 명령문이다.
CREATE DOMAIN 도메인명 [AS] 데이터_타입
[DEFAULT 기본값]
[CONSTRAINT 제약 조건명 CHECK (범위 값)];
💡 구문에서 대괄호([])의 의미 ? SQL문에서 [AS] 처럼 대괄호로 묶은 명령어들은 생략이 가능하다는 의미이다.
🔔 예제) '성별'을 '남' 또는 '여'와 같이 정해진 1개의 문자로 표현되는 도메인 GENDER를 정의하는 SQL문은 다음과 같다.
CREATE DOMAIN GENDER CHAR(1) // 정의된 도메인은 이름이 'GENDER' 이며 문자형이고 크기는 1이다.
DEFAULT '남' // 도메인 GENDER를 지정한 속성의 기본값은 '남'이다.
CONSTRAINT VALID-GENDER
CHECK(VALUE IN ('남', '여)); // GENDER를 지정한 속성에는 '남', '여' 하나의 값만을 저장할 수 있다.
📌 CREATE TABLE은 테이블을 정의하는 명령문이다.
CREATE TABLE 테이블명
(속성명 데이터_타입 [DEFAULT 기본값] [NOT NULL], ...
[, PRIMARY KEY(기본키_속성명, ...)]
[, UNIQUE(대체키_속성명, ...)]
[, FOREIGN KEY(외래키_속성명, ...)]
[REFERENCES 참조 테이블(기본키_속성명, ...)]
[ON DELETE 옵션]
[ON UPDATE 옵션]
[, CONSTRAINT 제약조건명] [CHECK (조건식)]);
💡 NOT NULL : NULL이란 모르는 값 또는 적용할 수 없는 값을 의미하는 것으로 NOT NULL은 특정 속성이 데이터 없이 비어 있어서는 안 된다는 것을 지정할 때 사용한다.
💡 참조 무곃성의 CASCADE 법칙 : 참조 무결성 제약이 설정된 기본 테이블의 어떤 데이터를 삭제할 경우 그 데이터와 밀접하게 연관되어 있는 다른 테이블의 데이터들도 도미노처럼 자동으로 삭제된다. 이러한 법칙을 '계단식', '연속성'이라는 사전적 의미를 가진 CASCADE 법칙이라고 한다.
🔔 예제) '이름', '학번', '전공', '성별', '생년월일'로 구성된 <학생> 테이블을 정의하는 SQL문을 작성하시오. 단, 제약조건은 다음과 같다.
CREATE TABLE 학생 // <학생> 테이블을 생성한다.
(이름 VARCHAR(15) NOT NULL // '이름' 속성은 최대 문자 15자로 NULL 값을 갖지 않는다.
학번 CHAR(8), // '학번' 속성은 문자 8자이다.
전공 CHAR(5), // '전공' 속성은 문자 5자이다.
성별 GENDER, // '성별' 속성은 'GENDER' 도메인을 자료형으로 사용한다.
생년월일 DATE, // '생년월일' 속성은 DATE 자료형을 갖는다.
PRIMARY KEY(학번), // '학번'을 기본키로 정의한다.
FOREIGN KEY(전공) REFERENCES 학과(학과코드) // '전공' 은 <학과> 테이블의 학과코드 '속성을 참조하는 외래키
ON DELETE SET NULL // <학과> 테이블에서 튜플이 삭제되면 관련된 모든 튜플의 '전공'속성의 값을 NULL로 변경한다.
ON UPDATE CASCADE, // <학과> 테이블에서 '학과코드'가 변경되면 관련된 모든 튜플의 '전공' 속성의 값도 같은 값으로 변경한다.
CONSTRAINT 생년월일제약 CHECK(생년월일) >= '1980-01-01')); // '생년월일' 속성에는 198-01-01 이후의 값만을 저장할 수 있으며, 이 제약 조건의 이름은 '생년월일제약'이다.
📌 기존 테이블의 정보를 이용해 새로운 테이블을 정의할 수 있다.
표기 형식
CREATE TABLE 신규 테이블명 AS SELECT 속성명[, 속성명, ...] FROM 기존 테이블명;
🔔 예제) <학생> 테이블의 '학번', '이름', '학년', 속성을 이용하여 <재학생> 테이블을 정의하는 SQL문을 작성하시오.
CREATE TABLE 재학생 AS SELECT 학번, 이름, 학년 FROM 학생;
📌 CREATE VIEW는 뷰(VIEW)를 정의하는 명령문이다.
표기 형식
CREATE VIEW 뷰명[(속성명, 속성명, ...])] AS SELECT문;
🔔 예제) <고객> 테이블에서 '주소'가 '안산시'인 고객들의 '성명'과 '전화번호'를 '안산고객'이라는 뷰로 정의하시오.
CREATE VIEW 안산고객(성명, 전화번호)
AS SELECT 성명, 전화번호
FROM 고객
WHERE 주소 = '안산시';
💡 뷰(View) : 뷰는 하나 이상의 기본 테이블로부터 유도되는 이름을 갖는 가상 테이블(Virtual Table)이다. 테이블은 물리적으로 구현되어 실제로 데이터가 저장되지만, 뷰는 물리적으로 구현 되지 않는다. 즉 뷰를 생성하면 뷰 정의가 시스템 내에 저장되었다가 SQL내에서 뷰 이름을 사용 하면 실행 시간에 뷰 정의가 대체되어 수행된다.
💡 서브 쿼리(Sub Query) : 서브 쿼리는 조건절에 주어진 질의로서, 상위 질의에 앞서 실행되며 그 검색 결과는 상위 질의의 조건절의 피연산자로 사용된다.
📌 CREATE INDEX는 인덱스를 정의하는 명령문이다.
표기 형식
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명(속성명 [ASC | DESC], [, 속성명 [ASC DESC]])
[CLUSTER];
💡 인덱스(Index) : 인덱스는 검색 시간을 단축시키기 위해 만든 보조적인 데이터 구조다.
💡 클러스터드 인덱스(Clustered Index) : 인덱스 키의 순서에 따라 데이터가 정렬 되어 저장되는 방식이다. 실제 데이터가 순서대로 저장되어 있어 인덱스를 검색 하지 않아도 원하는 데이터를 빠르게 찾을 수 있다. 하지만 데이터 삽입, 삭제, 발생 시 순서를 유지하기 위해 데이터를 재정렬해야 한다.
💡 넌 클러스터드 인덱스(Non-Clustered Index) : 인덱스의 키 값만 정렬되어 있을 뿐 실제 데이터는 정렬되지 않는 방식이다. 데이터를 검색하기 위해서는 먼저 인덱스를 검색하여 실제 데이터의 위치를 확인해야 하므로 클러스터드 인덱스에 비해 검색 속도가 떨어진다.
🔔 예제) <고객> 테이블에서 UNIQUE한 특성을 갖는 '고객번호' 속성에 대해 내림차순으로 정렬하여 '고객번호_idx'라는 이름으로 인덱스를 정의하시오.
CREATE UNIQUE INDEX 고객번호_idx
ON 고객(고객번호 DESC);
📌 ALTER TABLE은 테이블에 대한 정의를 변경하는 명령문이다.
표기 형식
ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT '기본값'];
ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT '기본값'];
ALTER TABLE 테이블명 DROP COLUMN [CASCADE];
🔔 예제1) <학생> 테이블에 최대 3문자로 구성되는 '학년' 속성을 추가하시오.
ALTER TABLE 학생 ADD 학년 VARCHAR2(9);
🔔 예제2) <학생> 테이블의 '학번' 필드의 데이터 타입과 크기를 VARCHAR2(10)으로 하고 NULL값이 입력 되지 않도록 변경하시오.
ALTER TABLE 학생 ALTER 학번 VARCAHAR2(10) NOT NULL;
📌 DROP은 스키마, 도메인, 기본 테이블, 뷰, 테이블, 인덱스, 제약 조건 등을 제거하는 명령문이다.
표기 형식
DROP SCHEMA 스키마명 [CASCADE | RESTRICT];
DROP DOMAIN 도메인명 [CASCADE | RESTRICT];
DROP TABLE 테이블명 [CASCADE | RESTRICT];
DROP VIEW 뷰명 [CASCADE | RESTRICT];
DROP INDEX 인덱스명 [CASCADE | RESTRICT];
DROP CONSTRAINT 제약조건명;
🔔 예제) <학생> 테이블을 제거하되, <학생> 테이블을 참조하는 모든 데이터를 함께 제거하시오.
DROP TABLE 학생 CASCADE;
📌 [정보처리기사] 데이터베이스 구축 - SQL 응용/DML (0) | 2024.02.16 |
---|---|
📌 [정보처리기사] 데이터베이스 구축 - SQL 응용/DCL (0) | 2024.02.16 |
📌 [정보처리기사] 논리 데이터 모델의 물리 데이터 (모델 변환/모델 품질 검토) (0) | 2024.02.16 |
📌 [정보처리기사] 물리 데이터베이스 설계 - 스토리지 (0) | 2024.02.15 |
📌 [정보처리기사] 데이터베이스 백업 (0) | 2024.02.15 |