sql 기본 문법 정리
- Structured Query Language
- 관계 데이터베이스에서 사용되는 대표적인 언어
- SQL의 종류
- 정의어(DDL, Data Definition Language)
- 조작어(DML, Data Manipulation Language)
- 제어어(DCL, Data Control Language)
SQL 문법
1. 데이터 정의어(DDL)
- 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 삭제할 때 사용하는 언어
- 종류
CREATE
: 스키마, 도메인, 테이블, 뷰, 인덱스 정의ALTER
: TABLE에 대한 정의 변경DROP
: 스키마, 도메인, 테이블, 뷰, 인덱스를 삭제
CREATE
-
테이블 정의
1 2 3 4 5 6 7 8 9
1. CREATE TABLE 테이블_이름 2. ({속성_이름 데이터_타입 [DEFAULT 기본값] [NOT NULL], ...} 3. [PRIMARY KEY(기본키_속성명),] 4. [UNIQUE(대체키_속성명),] 5. [FOREIGN KEY(외래키_속성명) REFERENCES 참조테이블(기본키_속성명)] 6. [ON DELETE CASCADE | SET NULL | SET DEFAULT | NO ACTION] 7. [ON UPDATE CASCADE | SET NULL | SET DEFAULT | NO ACTION], 8. [CONSTRAINT 제약조건명 CHECK(조건식)] 9. );
- 생성할 데이터베이스의 타입(
TABLE
)과 이름 지정 - 괄호(
()
)를 사용해 테이블의 속성 지정{}
: 반복적으로 사용되는 요소[]
: 생략 가능한 요소 ([NOT NULL]
: 공백을 허용하지 않는다는 속성이 필드마다 선택 사항임)
- 기본키로 지정할 속성 선택(
NOT NULL
기본 지정) - 유일키로 지정할 속성 선택
- 왜래키로 지정할 속성 선택
- 외부 테이블의 기본 키를 가져와 자신의 테이블 속성에 나타냄
- 외부 테이블의 이름과 속성명 => 외래키의 속성으로 저장
- 외래키 데이터의 영향을 받으면 어떻게 처리할지 옵션 지정
ON DELETE/UPDATE
: 영향을 받는 데이터가 있다면 레코드를 함께 삭제하거나 갱신SET NULL
: 레코드 삭제를 하지 않고 관련 데이터만 변경SET DEFAULT
: 기본 값으로 변경NO ACTION
: 아무 작업도 하지 않음
- 별도의 제약 조건 지정
- 생성할 데이터베이스의 타입(
-
예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14
1. 학번, 성명, 학과, 학년, 학점으로 구성된 [학생] 테이블을 만들어라. 2. 학번과 학년은 숫자형 자료이며, 나머지는 문자형이다. 3. 성명은 가변길이 최대 5자리, 학과는 고정길이 10자리, 학점은 고정길이 1자리 문자형이다. 4. 학번을 기본키로 지정한다. 5. 성명 속성은 공백이 있을 수 없다. 6. 학과 속성을 이용하여 [수강] 테이블의 학과를 참조하도록 외래키를 지정하며, 참조 테이블에서 삭제가 발생하면 NULL값으로 하고, 수정이 발생하면 연쇄적으로 수정하도록 한다. 7. 학년의 속성값은 4 이하의 값을 갖도록 'hak' 이름으로 제약한다. CREATE TABLE 학생 ( 학번 INT, 성명 VARCHAR(5) NOT NULL, 학과 CHAR(10), 학년 INT, 학점 CHAR(1), PRIMARY KEY(학번), FOREIGN KEY(학과), REFERENCES 수강(학과), ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT hak CHECK(학년 <= 4) );
-
스키마 정의
1
CREATE SCHEMA 스키마_이름 AUTHORIZATION 사용자;
-
도메인 정의
1 2
CREATE DOMAIN 도메인_이름 데이터_타입 [DEFAULT 기본값] [CONSTRAINT 제약조건_이름 CHECK(VALUE IN(범위_값))];
-
예제
1 2 3 4 5
// 속성의 값으로 'T'와 'F'로만 구성되는 'success'라는 이름의 도메인을 정의하시오 // (단, 속성값이 입력되지 않을 경우 기본값은 'T'로 한다.) CREATE DOMAIN success CHAR(1) DEFAULT 'T' CONSTRAINT success CHECK(VALUE IN('T', 'F'));
-
-
인덱스 정의(중복 가능)
1
CREATE INDEX 인덱스_이름 ON 테이블_이름(속성_이름 [ASC|DESC]);
-
인덱스 정의(중복 불가능)
1
CREATE UNIQUE INDEX 인덱스_이름 ON 테이블_이름(속성_이름 [ASC|DESC]);
-
예제
1 2 3
// [학생] 테이블의 학과 속성값을 오름차순 정렬하여, 중복을 허용하지 않도록 'stud_idx'라는 이름의 인덱스를 정의하시오. CREATE UNIQUE INDEX stud_idx ON 학생(학과 ASC);
-
ALTER
-
데이터베이스 구조 변경 (TABLE 정의 변경)
- 대부분 속성을 추가하거나 삭제하는데 사용
-
속성 추가
1
ALTER TABLE 테이블_이름 ADD 속성_이름 데이터_타입 [DEFAULT 기본값];
-
예제
학번 성명 학과 학년 학점 071025 이영진 전기통신 3 A 081517 홍길동 산업공학 2 B 081520 강희영 컴퓨터공학 4 A 1 2 3 4
// 아래 [학생] 테이블에 '주소' 속성을 추가하시오 // (단, 주소 항목은 가변길이 문자형으로 30자까지 입력될 수 있다.) ALTER TABLE 학생 ADD 주소 VARCHAR(30);
-
-
속성 변경(기본값 변경)
1
ALTER TABLE 테이블_이름 ALTER 속성_이름 [SET DEFAULT 기본값];
-
속성 삭제
1 2 3
ALTER TABLE 테이블_이름 DROP 속성_이름 [CASCADE | RESTRICT]; // CASCADE: 연관이 있는 테이블 함께 다룸 // RESTRICT: 연관이 있는 테이블이 있다면 작업 취소
-
예제
학번 성명 연락처 전공 학년 072233 박봉달 010-1234-5678 컴퓨터 3 084466 김태수 010-2345-6789 국문 3 090522 최우수 010-4321-1357 영문 2 053322 이영진 010-2468-3579 법학 4 1 2
// 아래 [학적] 테이블에서 '학년' 속성을 제거하시오 ALTER TABLE 학적 DROP 학년;
-
DROP
-
스키마, 도메인, 테이블, 뷰, 인덱스 삭제
1 2 3 4 5 6
DROP SCHEMA 스키마_이름 [CASCADE | RESTRICT]; DROP DOMAIN 도메인_이름 [CASCADE | RESTRICT]; DROP TABLE 테이블_이름 [CASCADE | RESTRICT]; DROP VIEW 뷰_이름 [CASCADE | RESTRICT]; DROP INDEX 인덱스_이름; DROP CONSTRAINT 제약조건_이름 // 제약조건 삭제
-
CASCADE
: 참조하는 다른 모든 개체 함께 삭제RESTRICT
: 다른 개체가 참조 중일 경우 삭제 취소 -
예제
학번 성명 주민등록번호 전공 학년 083577 강희영 850502-1234657 컴퓨터 3 093505 김정미 840127-2345678 컴퓨터 2 072719 홍길동 811022-1345678 토목 4 100325 이영진 890628-1456789 법학 1 1 2 3
// 아래 [학적] 테이블을 제거하시오. 만약, 관계된 데이터가 있을 경우 함께 삭제하시오. DROP TABLE 학적 CASCADE;
-
2. 데이터 조작어(DML)
- DB 사용자가 저장된 데이터를 실질적으로 처리하는데 사용
- 데이터의 검색, 삽입, 수정, 삭제 등
- 종류
SELECT
: 테이블에서 조건에 맞는 튜플 검색INSERT
: 테이블에 새로운 튜플 삽입DELETE
: 테이블에서 조건에 맞는 튜플 삭제UPDATE
: 테이블에서 조건에 맞는 튜플의 내용 변경
SELECT
1
2
3
4
5
1. SELECT [DISTINCT][테이블명.]속성명1, [테이블명.]속성명2, ...
2. FROM 테이블명1, 테이블명2, ...
3. [WHERE 조건]
4. [GROUP BY 속성명1, 속성명2, ...[HAVING 조건]]
5. [ORDER BY 속성명 [ASC | DESC]];
SELECT
DISTINCT
: 중복된 튜플이 있으면 그 중 첫번째 튜플만 검색속성명
: 검색해 불러올 속성(열) 및 수식
FROM
: 질의에 의해 검색될 데이터들을 포함하는 테이블명WHERE
: 검색할 조건GROUP BY
: 특정 속성을 기준으로 그룹화하여 검색할 때 그룹화 할 속성HAVING
: 해당 그룹에 대한 조건
ORDER BY
속성명
: 정렬 기준이 되는 속성명[ASC | DESC]
: 정렬 방식(ASC:오름차순, DESC/생략:내림차순)
INSERT INTO
-
기본 테이블에 새로운 튜플 삽입
1
INSERT INTO 테이블명([속성명1, 속성명2, ...]) VALUES (데이터1, 데이터2, ...);
DELETE FROM
-
기본 테이블의 튜플 중 특정 튜플 삭제
1
DELETE FROM 테이블명 [WHERE 조건];
UPDATE SET
-
기본 테이블의 튜플 중 특정 튜플의 내용 변경
1
UPDATE 테이블명 SET 속성명=데이터[, 속성명=데이터, ...][WHERE 조건];
조건 연산자
LIKE
- 대표 문자를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플을 검색하기 위해 사용
%
: 모든 문자_
: 문자 하나#
: 숫자 하나
BETWEEN
- 지정된 속성이 두 숫자 사이의 값을 가지는 튜플 검색
- eg) 생일 01/09/69~10/23/73 사이 자료만 검색 =>
WHERE 생일 BETWEEN #01/09/69# AND #10/22/73#
- eg) 생일 01/09/69~10/23/73 사이 자료만 검색 =>
그룹 함수
GROUP BY
절에 지정된 그룹별로 속성의 값 집계COUNT/SUM/AVG/MAX/MIN(속성명)
: 그룹별 튜플 수/합/평균/최대/최소
집합 연산자 종류
UNION
: 두 조회 결과 통합, 중복된 행은 한 번만 출력UNION ALL
: 중복된 행 전부 출력INTERSECT
: 두 조회 결과 중 공통된 행 출력EXCEPT
: 첫번째 조회 결과에서 두번째 조회 결과를 제외한 행 출력
3. 데이터 제어어(DCL)
- 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는데 사용되는 언어
COMMIT
과ROLLBACK
은 트랜잭션 수행과정에서 사용됨(TCL에 해당)
-
COMMIT
: 명령에 의해 수행된 결과를 실제 물리적 디스크로 저장- 데이터베이스 조작 작업이 정상적으로 완료되었음을 알림
-
ROLLBACK
: 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래 상태로 복구 -
GRANT
: 데이터베이스 사용자에게 사용 권한 부여1
GRANT 권한_종류 ON 테이블_이름 TO 사용자 [WITH GRANT OPTION | WITH ADMIN OPTION];
-
REVOKE
: 데이터베이스 사용자의 사용 권한 취소1
REVOKE 권한_종류 ON 테이블_이름 FROM 사용자 [CASCADE];
Leave a comment