데이터베이스 개론2판(김연희)를 읽고 복습목적으로 내용을 정리한 글입니다.
SQL은 관계 데이터베이스를 위한 표준 질의어로 많이 사용되는 언어이다.
SQL은 직접 DBMS에 접근할 수도 있고, C++이나 Java와 같은 언어로 작성한 응용프로그램에 삽입하여 사용할 수도 있다.
기능에 따라 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 나눈다.
CREATE TABLE 테이블_이름 (
1) 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값]
2) [PRIMARY KEY (속성_리스트)]
3) [UNIQUE (속성_리스트)]
4) [FOREIGN KEY (속성_리스트) REFERENCES 테이블_이름(속성_리스트)]
[ON DELETE 옵션] [ON UPDATE 옵션]
5) [CONSTRAINT 이름] [CHECK(조건)]
);
- [ ]로 표시된 항목은 생략 가능
NOT NULL
제약조건을 함께 정의한다.REFERENCES
키워드를 뒤에 밝혀야 한다.CHECK
키워드로 정의한다.CONSTRAINT
키워드로 제약조건의 이름을 명시할 수 있다.CRAET TABLE 제품(
제품번호 CHAR(3) NOTNULL,
제품명 VARCHAR(20),
재고량 INT,
단가 INT,
PRIMARY KEY(제품번호),
CHECK (재고량>=0 AND 재고량 <=10000)
);
ALTER TABLE
문으로 새로운 속성 추가, 변경, 삭제와 제약조건 추가, 삭제 등이 가능하다.
ALTER TABLE 테이블_이름
ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본값];
ALTER TABLE 테이블_이름 DROP COLUMN 속성_이름
ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약조건_이름 제약조건_내용;
DROP TABLE 테이블_이름;
원하는 데이터를 검색, 새로운 데이터 삽입, 데이터 수정, 삭제로 분류할 수 있다.
SELECT [ALL: DISTINCT] 속성_리스트 [AS 바꿀_속성_이름]
FROM 테이블_리스트
SELECT
문의 결과는 테이블이며 중복된 투플을 허용한다.DISTINCT
키워드로 중복을 제거할 수 있다.AS
키워드로 속성의 이름을 바꾸어 출력할 수 있다.*
은 속성 리스트 전체를 의미한다.+
,-
,*
,/
등의 산술 연산자와 상수를 SELECT
문에 사용할 수 있다.SELECT 단가 + 500 AS "조정 단가"
FROM 제품;
SELECT [ALL:DISTINCT] 속성_리스트
FROM 테이블_이름
[WHERE 조건];
WHERE
키워드와 조건을 이용해 특정 조건을 만족하는 투플만 결과로 가져올 수 있다.LIKE
키워드를 확인할 수 있다.%
: 0개 이상의 문자
_
: 1개의 문자
데이터%
데이터___
%데이터%
IS NULL
키워드를 이용한다.IS NOT NULL
false
를 반환한다. 따라서 널값인지 확인하기 위해서는 반드시 위의 키워드를 사용한다.SELECT [ALL: DISTINCT] 속성_리스트
FROM 테이블_리스트
[WHERE 조건]
[ORDER BY 속성_리스트 [ASC: DESC]]
ORDER BY
키워드를 이용해 결과를 정렬한다.ASC
: 오름차순(기본값)DESC
: 내림차순NULL
값은 오름차순 기준 마지막에 출력된다.SELECT AVG(단가)
FROM 제품;
COUNT
: 속성의 개수
MAX
: 속성의 최대값
MIN
: 속성의 최솟값
SUM
: 속성 값의 합계
AVG
: 속성 값의 평균
- NULL값은 제외하고 계산한다.
- WHERE
절에는 사용할 수 없다.
- SUM
, AVG
는 숫자형 데이터 타입에만 사용할 수 있다.
특성 속성의 값이 같은 투플을 모아 그룹을 만들고, 그룹별로 검색하기 위해 GROUP BY
키워드를 사용한다.
SELECT [ALL: DISTINCT] 속성_리스트
FROM 테이블_리스트
[WHERE 조건]
[GROUP BY 속성_리스트 [HAVING 조건]]
[ORDER BY 속성_리스트 [ASC: DESC]]
HAVING
키워드로 조건을 추가로 명시할 수 있다.GROUP BY
절에는 집계함수나 GROUP BY
절에 있는 속성외의 속성은 SELECT
절에 사용할 수 없다.
GROUP BY
로 1차로 그룹을 나누고 이후 집계함수 등을 이용해 연산을 수행한다.
FROM
절에 검색에 필요한 모든 테이블을 나열하고, WHERE
절에는 조인 속성의 값이 같아야 함을 의미하는 조인 조건을 제시한다.SELECT 제품, 제품명
FROM 제품, 주문
WHERE 주문.주문고객 = 'banana` AND 주문.제품번호 = 제품.제품번호;
SELECT
문(메인 쿼리) 안에 또 하나의 SELECT
문(서브 쿼리)을 포함할 수 있다.
SELECT 제품명, 제조업체
FROM 제품
WHERE 제품번호 IN (SELECT 주문제품
FROM 주문
WHERE 주문고객='banana`);
SELECT 제품명, 단가, 제조업체
FROM 제품
WHERE 단가 > ALL (SELECT 단가
FROM 제품
WHERE 제조업체 = '대한식품');
INSERT
INTO 테이블_이름[(속성_리스트)]
VALUES (속성값_리스트);
INTO
절의 속성 리스트와 VALUES
절은 속성 값은 순서대로 일대일 대응되고 개수도 같아야 한다.SELECT
문을 이용해 다른 테이블에서 검색한 데이터를 투플로 삽입한다.
INSERT
INTO 테이블_이름[(속성_리스트)]
SELECT 문;
UPDATE 테이블_이름
SET 속성_이름1 = 값1, 속성_이름2 = 값2, ...
[WHERE 조건];
WHERE
절을 생략하면 테이블에 존재하는 모든 투플을 대상으로 SET
절에 따라서 데이터를 수정한다.DELETE
FROM 테이블_이름
[WHERE 조건];
WHERE
절 생략시 모든 투플이 삭제된다. 하지만 DROP TABLE
문으로 테이블 자체를 삭제하는 것과는 다르다.뷰(view)는 다른 테이블을 기반으로 만들어진 가상 테이블이다.
CREATE TABLE
로 만들어진 테이블을 기본 테이블이라고 한다.CREATE VIEW 뷰_이름[(속성_리스트)]
AS SELECT 문
[WITH CHECK OPTION];
SELECT
문은 생성하고자 하는 뷰의 정의를 담는다.ORDER BY
를 사용할 수 없다.WITH CHECK OPTION
키워드를 포함하는 경우, 생성 시 포함한SELECT
에 명시된 조건을 위반하는 데이터의 삽입, 수정 및 삭제 연산을 뷰에 시도하는 경우 거부한다.생성된 뷰에서도 일반 테이블처럼 SELECT
문을 사용하여 데이터를 검색할 수 있다.
SELECT
문이 내부적으로 기본 테이블에 대한 SELECT
문으로 변환되어 수행되기 때문이다.기본적으로 뷰에 대해서 데이터 삽입, 수정, 삭제 연산이 가능하지만 모든 뷰에 가능한 것은 아니다.
DISTINCT
키워드를 포함하여 정의한 뷰는 변경할 수 없다.GROUP BY
절을 포함하여 정의한 뷰는 변경할 수 없다.굳이 기본테이블 말고 이러한 제약사항이 존재하는 뷰를 생성하고 사용하는 이유는 무엇일까
WHERE
절 없이 특정 조건을 만족하는 데이터를 검색할 수 있다.DROP VIEW 뷰_이름
C, C++, Java같은 프로그래밍 언어로 작성된 응용 프로그램 안에 삽입하여 사용할 수도 있다.
EXEC SQL
을 붙인다.EXEC SQL BEGIN DECLARE SECTION;
char p_no[4], p_name[21];
int price;
EXEC SQL END DECLARE SECTION;
...
EXEC SQL SELECT 제품명, 단가 INTO :p_name, :price
FROM 제품
WHERE 제품번호 = :p_no;
...
IT CookBook, 데이터베이스 개론(2판): 기초 개념부터 빅데이터까지_김연희