관계 데이터베이스 언어(SQL)

SQL 정의어(DDL)

CREATE : 테이블, 스키마, 도메인, 인덱스 ,뷰 등을 정의(생성)하기 위해 사용하는 명령문.

  • 학번, 성명, 학과, 학년, 학점으로 구성된 학생테이블을 만들어라.
  • 학번과 학년은 숫자형 자료이며, 나머지는 문자형이다.
  • 학번을 기본키로 지정한다.
  • 성명 속성은 공백이 있을 수 없다.
  • 학과 항목을 이용하여[수강]테이블의 학과를 참조하다록 외래키를 지정하며, 참조 테이블에서 삭제가 발생하면 NULL 값으로 하고, 수정이 발생하면 연쇄적으로 수정한다.
  • 학년의 속성값은 4이하의 값을 갖도록 ‘hak’ 이름으로 제약한다.
CREATE TABLE 학생 (
학번 INT,
성명 CHAR(10) NOT NULL,
학과 CHAR(20)
학년 INT,
학점 CHAR(1),
PRIMARY KEY(학번)
FOREIGN KEY(학과) REFERENCES 수강(학과)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT hak CHECK(학년<=4)
);
CREATE VIEW 3학년연락처(학번, 이름, 전화번호) 
AS SELECT 학번, 성명, 이름,
FROM 학생
WHERE 학년=3;  // [학생]테이블의 학번, 성명, 이름 속성을 가져와 같은 속성을 가진 [3학년연락처] 뷰를 생성.

ALTER : 기존에 만들어진 테이블에 새로운 속성을 추가(ADD)하거나 변경(ALTER), 삭제(DROP)할 때 사용하는 명령문.

ALTER TABLE 학생 ADD 주소 VARCHAR(30); // [학생] 테이블에 '주소' 속성을 추가(단. 주소는 가변길이 문자형 30자리까지 입력)

ALTER TABLE 학생 DROP 주소 CASCADE;  // [학생] 테이블에 '주소' 속성을 제거

DROP : 기존에 사용되던 테이블, 스키마, 도메인, 인덱스, 뷰, 제약조건 등을 제거할 때 사용. 전체 삭제.

DROP TABLE 학적 RESTRICT; // [학적] 테이블을 삭제(단 참조 중이면 삭제 안함)
DROP TABLE 학적 CASCADE; // [학적] 테이블을 삭제하고 이 테이블을 참조하는 다른 테이블도 연쇄적으로 삭제

SQL 조작어(DML)

  • SELECT : 테이블에서 원하는 자료를 검색하고자 하는 경우 사용. 산술식에 의한 계산도 수행.
SELECT 학번, 성명 FROM 학생 WHERE 수강과목='데이터베이스';
SELECT DISTINCT 수강과목 FORM 학생 WHERE 학년>=2; // [학생] 테이블에서 학년이 2인 학생의 수강과목을 중복없이 검색.
SELECT SUM(점수) AS 1학년합계 FORM 학생 WHERE 학년=1; // [학생] 테이블에서 학년이 1인 학생의 점수 합계 검색하고 '1학년 합계' 속성을 부여.
SELECT 성명 FROM 학생 WHERE 점수>=85 ORDER BY 학번 DESC; // [학생] 테이블에서 점수가 85점 이상인 학생의 성명을 내림차순으로 검색.
SELECT 학년 FROM 학생 WHERE 점수>=85 GROUP BY 학년 HAVING COUNT(*)>=2; //[학생]테이블에서 점수가 85점 이상인 학생이 2명 이상인 학년을 검색.
SELECT 성명 FROM 학생 WHERE 연락처 LIKE '%7588'; // [학생] 테이블에서 연락처 번호가 '7588'로 끝나는 학생의 성명 검색.
  • INSERT INTO : 기존 테이블에 새로운 자료(튜플)를 삽입하는 경우에 사용하는 명령.
INSERT INTO 학생( 학번, 성명, 학년, 수강과목, 연락처) VALUES (1511, '김정미', 4, '데이터베이스', '123-1234');
  • UPDATE : 테이블의 자료 중에서 값을 변경하고자 하는 경우.
UPDATE 학생 SET 점수=92 WHERE 성명='이영진';
  • DELETE : 테이블의 튜플(자료)을 살제할 경우 사용.
DLELTE FROM 학생 WHERE 학년=2;

SQL 제어어(DCL)

  • COMMIT / ROLLBACK : 연산 내용 승인 / 취소
  • GRANT / REVOKE : 데이터베이스에 대한 권한 부여 / 취소
GRANT UPDATE ON 학생 TO AAA WITH GRANT OPTION; // AAA 사용자에게 [학생] 테이블에 대해 업데이트 할 수 있는 권한을 부여(권한 부여 할 수 있는 권한도 부여)
REVOKE UPDATE ON 학생 FROM AAA CASCADE; // AAA 사용자에게 [학생] 테이블을 업데이트 할 수 있는 권한을 취소.(AAA가 부여한 다른 사용자 권한도 같이 취소)

DB의 키(key)와 무결성 제약조건

키(key)의 종류

  • 후보키(Candidate Key) : 릴레이션(테이블)에서 각 튜플을 유일하게 식별할 수 있는 속성이나 속성의 집합. 유일성과 최소성을 모두 만족해야한다.
  • 기본키(Primary Key) : 후보키 중에서 튜플을 식별하기 위해 특별히 선택된 키. 중복될 수 없으며, NULL 값이 올 수 없다.
  • 대체키(Alternate Key) : 후보키 중에서 기본키를 제외한 속성.
  • 외래키(Foreign Key) : 다른 키를 참조하기 위하여 사용되는 속성. 외래 식별자. 참조 릴레이션(테이블)의 기본키와 같아야 한다.
  • 슈퍼키(Super Key) : 한 테이블(릴레이션)내의 튜플들을 식별할 수 있는 후보키와 다른 속성들과의 모든 조합. 유일성은 만족, 최소성은 만족 안함.

무결성(Integrity) 제약 조건

  • 개체 무결성 : 모든 테이블의 튜플들은 유일값으로 식별되어야 함. 기본키는 null값이 올 수 없으며, 중복될 수 없다.
  • 참조 무결성 : 테이블과 테이블 간에 외래 식별자를 이용해 상호 참조할 때 오류가 없어야 함. 외래키는 널값이 올 수 있으며, 참조 릴레이션의 기본키와 같아야 한다.
  • 도메인 무결성 : 릴레이션(테이블)에서 속성값의 범위가 정의된 경우 그 속성값은 정해진 범위 이내의 값으로 구성되어야 함. 동일한 속성에 대해 데이터 타입과 데이터 길이가 동일해야 함.
  • 고유(Unique) 무결성 : 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 그 속성값은 모두 달라야 한다.
  • NULL 무결성 : 특정값에 NULL값이 올 수 없다는 조건.
  • 키 무결성 : 한 릴레이션에는 최소한 하나의 키가 존재해야 한다.