1. SQL 언어 이해
1) SQL이란?
- "Structured Query Language(구조화된 질의어"의 약자로, 1974년 IBM 연구소에서 발표한 SEQUEL(Structured English QUEry Language)에서 유래한 데이터 언어이다.
- 현재 미국 표준연구소(ANSI)와 국제 표준 기구(ISO)에게 관계 DB의 표준 언어로 채택하고 있다.
2) SQL의 특징
- 단순히 검색만을 위한 데이터 질의어가 아니라, 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)의 기능을 모두 제공하는 종합적인 DB언어이다.
- 관계 대수와 관계 해석을 기초로 하는 고급 데이터 언어이다.
- 데이터 연산에 대한 처리 과정은 명시하지 않고, 데이터 연산의 결과만을 명시하는 비절차적 언어
- 즉, 선언적 언어이므로, 사용자 편의 중심의 언어이다.
- SQL의 표준하로 인해, 상용 관계 DBMS들 간의 전환이 용이하다.
- 단말기(Terminal)에서 단독으로 대화식 질의어로 사용할 수 있다.
- 자바, C/C++ 등으로 개발된 응용 프로그램에 삽입해서 사용할 수 있다.
- 개개의 레코드(튜플) 단위로 처리하기 보다는 레코드 집합 단위로 처리한다.
- 릴레이션, 튜플, 속성 등의 관계 데이터 모델의 공식 용어 대신, 테이블, 행, 열과 같은 일반적인 용어를 사용한다.
2. SQL 데이터 정의어(DDL)
1) 데이터 정의어의 명령어 종류
① CREATE : DB(또는 스키마) 및 DB 객체를 생성한다.
② ALTER : 기존의 DB객체를 변경한다.
③ DROP : DB(또는 스키마) 및 DB 객체를 삭제한다.
- CREATE TABLE 명령의 한 형식

2) CREATE TABLE 명령의 각 키워드의 기능
- NOT NULL : 속성이 널 값을 가질 수 있는지 여부를 설정함
- DEFAULT : 속성의 디폴트 값을 설정함
- PRIMARY KEY : 기본 키(개체 무결성 제약조건)를 설정함
- UNIQUE : 속성이 유일한 값을 가져야 한다는 무결성 제약 조건을 설정함
- FOREIGN KEY : 외래 키(참조 무결성 제약 조건)를 설정함
-> SQL에서는 참조된 테이블의 후보 키도 외래 키가 될 수 있음
3) CREATE TABLE 명령의 각 키워드의 기능
- 옵션: NO ACTION, SET NULL, SET DEFAULT, CASCADE 가운데 하나를 설정함
예) ON DELETE SET NULL
- 피참조 튜플(열 값)이 삭제되면, 널 값으로 갱신하도록 설정함
예) ON UPDATE CASCADE
-피참조 튜플(열 값)이 갱신되면, 이 튜플을 참조하는 튜플도 파급적으로 갱신하도록 설정함
- CONSTRAINT : 제약 조건의 이름을 설정함
- CHECK(조건식) : 삽입 또는 갱신 시에 만족해야 하는 무결성 제약조건을 설정함
4) DROP TABLE 명령의 일반 형식
DROP TABLE 기본테이블_이름
{RESTRICT | CASCADE};
- RESTRICT 옵션: 이 기본 테이블을 참조하고 있는 뷰나 제약조건이 있으면, 이 기본 테이블을 삭제할 수 없다.
- CASCADE 옵션: 이 기본 테이블을 참조하고 있는 뷰나 제약조건이 있으면, 그 뷰나 제약조건도 함께 모두 삭제한다.
3. SQL 데이터 제어어(DCL)
1) SQL 데이터 제어어의 명령어 종류
- GRANT : 사용자에게 DB객체에 대한 권한을 부여한다.
- REVOKE : 사용자에게 이미 부여된 DB 객체에 대한 권한을 취소한다.
2) GRANT 명령의 일반 형식
GRANT 시스템권한1[, 시스템 권한2, ...]
TO 사용자이름1[,사용자이름2, ...]
3) REVOKE 명령의 일반 형식
REVOKE 시스템권한1[, 시스템 권한2, ...]
FROM 사용자이름1[,사용자이름2, ...]
4. SQL 데이터 조작어(DML)
1) 데이터 조작어 명령어 종류
(번호는 SELECT 명령의 해석 순서)
- SELECT : DB 객체에서 데이터를 검색한다.
- INSERT : DB 객체에서 데이터를 삽입한다.
- DELETE : DB 객체에서 데이터를 삭제한다.
- UPDATE : DB 객체의 기존 데이터를 변경한다.
2) SELECT 명령의 일반 형식
⑤ SELECT [ALL | DISTINCT] {* | 열리스트 [AS 열별칭]}
① FROM 테이블_리스트
② [WHERE 조건]
③ [GROUP BY 열리스트]
④ [HAVING 그룹조건]
⑥ [ORDER BU 열리스트 [ASC | DESC]];
3) SELECT 명령의 구성
(1) SELECT 절
- 검색할 하나 이상의 데이터 항목 즉, 열 이름이나 열 별칭(Alias)을 기술한다.
① ALL : 검색 결과에서 중복되는 행을 그대로 표시하도록 지정함.
② DISTINCT : 검색 결과에서 중복되는 행을 그대로 표시하도록 지정함
③ * : 테이블의 모든 열을 검색하도록 지정하는 와일드카드(Wildcard) 문자임
④ AS 열별칭 : 열 이름에 새로운 이름 부여하는 것으로, AS는 생략 가능
(2) FROM 절 : 검색할 테이블 이름을 기술한다.
(3) WHERE 절: 검색할 조건을 기술한다.
(4) GROUP BY 절 : 그룹 질의를 수행할 열 이름을 기술한다.
- 즉, 특정 열의 값이 동일한 행들을 그룹핑해서, 각 그룹별로 한 행의 질의 결과를 생성할 때 사용한다.
(5) HAVING 절: 검색할 조건을 기술한다.
(6) ORDER BY 절
- 특정 열 값을 기준으로 질의 결과를 정렬할 때 기준이 되는 열 이름을 기술한다.
① ASC : 오름차순(Ascending) 정렬을 지정함(디폴트 값임)
② DESC : 내림차순(Descending) 정렬을 지정함
2) INSERT 명령의 일반 형식
① 새로운 데이터 직접 삽입하기
INSERT INTO 테이블_이름 [{열이름__리스트}]
VALUES(열값_리스트);
② 다른 테이블의 데이터를 복사해서 삽입하기
INSERT INTO 테이블_이름 [{열이름_리스트}]
3) DELETE 명령의 일반 형식
DELETE FROM 테이블_이름
[WHERE 조건];
4) UPDATE 명령의 일반 형식
UPDATE 테이블_이름
SET {열이름 = 산술식} +
[WHERE 조건];
4. SQL 뷰(View)
1) 뷰(View)란?
- 다른 테이블로부터 유도된 가상의 테이블(Virtual Table)로서, 물리적으로 생성되지 않는 논리적인 테이블이다.
2) 뷰의 특징
-
논리적인 테이블이므로 실제로 물리적으로 생성되지 않으며, 뷰의 정의만 시스템에 저장된다.
-
기본 테이블뿐만 아니라 다른 뷰를 기초로 생성할 수 있다.
-
뷰 자체는 데이터를 직접 포함하지 않지만, 창문 역할을 하는 뷰를 통해서 데이터의 검색과 삽입, 변경이 가능하다.
-
뷰에 대한 검색은 기본 테이블과 거의 유사하지만, 뷰를 통한 삽입, 삭제, 변경은 일부 제약을 받는다.
-
외부 스키마는 뷰와 기본 테이블의 정의로 구성된다.
-
뷰의 기본이 되는 기본 테이블이 삭제(변경)되면, 뷰도 자동으로 삭제(변경)된다.
-
뷰는 ALTER 문을 사용해서 변경할 수 없으며, 변경이 필요한 경우 삭제하고 다시 생성해야 한다.
-
뷰는 DROP문을 사용해서 삭제할 수 있다.