독서

[데이터베이스 개론] 데이터베이스 언어 SQL

오렌지색 귤 2022. 3. 11. 22:47
반응형

SQL의 소개

 

정의 : SQL (Structured Query Language)은 관계 데이터베이스를 위한 표준 질의어로 많이 사용되는 언어

 

 

기능에 따른 분류

  1. 데이터 정의어 : 테이블을 생성하고, 변경 제거하는 기능을 제공
  2. 데이터 조작어 : 테이블에 새 데이터를 삽입하거나, 테이블에 저장된 데이터를 수정, 삭제, 검색하는 기능 제공
  3. 데이터 제어어 : 보안을 위해 데이터에 대한 접근 및 사용 권한을 사용자별로 부여하거나 취소하는 기능을 제공하는 언어

 

 


SQL을 이용한 데이터 정의

 

테이블 생성

 

CREATE TABLE 테이블_이름 (
        속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값]
        [PRIMARY KEY (속성_리스트)]  // 기본키는 NOT NULL 표기해주는 것이 좋다
        [UNIQUE (속성_리스트)]
        [FOREIGN KEY (속성_리스트) REFERENCES 테이블_이름(속성_리스트)] [ON DELETE 옵션] [ON UPDATE 옵션]
        [CONSTRAINT 이름] [CHECK(조건)]
);

// 예시
CREATE TABLE 주문 (
    주문번호    CHAR(3)            NOT NULL,
    주문고객    VARCHAR(20),
    주문제품    CHAR(3),
    수량          INT,
    배송지         VARCHAR(30),
    주문일자    DATE,
    PRIMARY KEY(주문번호),
    FOREIGN KEY(주문고객) REFERENCES 고객(고객아이디),
    FOREIGN KEY(주문제품) REFERENCES 제품(제품번호)
);
  • ON DELETE 옵션
    • ON DELETE NO ACTION : 튜플을 삭제하지 못하게 한다
    • ON DELETE CASCASE : 관련 튜플을 함께 삭제한다
    • ON DELETE SET NULL : 관련 튜플의 외래키 값을 NULL로 변경한다
    • ON DELETE SET DEFAULT : 관련 튜플의 외래키 값을 미리 지정한 기본 값으로 변경한다
  • ON UPDATE 옵션
    • ON UPDATE NO ACTION : 튜플을 변경하지 못하게 한다
    • ON UPDATE CASCADE : 관련 튜플에서 외래키 값을 함께 변경한다
    • ON UPDATE SET NULL : 관련 튜플의 외래키 값을 NULL로 변경한다
    • ON UPDATE SET DEFAULT : 관련 튜플의 외래키 값을 미리 지정한 기본 값으로 변경한다
  • 데이터 무결성 제약조건의 정의
    • CHECK 키워드로 제약조건 지정
    • CONSTRAINT 키워드로 제약 조건에 이름 부여

 

 

테이블 변경

 

// 새로운 속성 추가
ALTER TABLE 테이블_이름 ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값];

// 기존 속성 삭제
ALTER TABLE 테이블_이름 DROP COLUMN 속성_이름;

// 새로운 제약조건 추가
ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약조건_이름 제약조건_내용;

// 기존 제약 조건 삭제
ALTER TABLE 테이블_이름 DROP CONSTRAINT 제약조건_이름;

 

테이블 삭제

 

DROP TABLE 테이블_이름;

 

 

 


SQL을 이용한 데이터 조작

 

데이터 검색

 

SELECT [ ALL | DISTINCT ] 속성_리스트
FROM 테이블_리스트
[ WHERE 조건 ]
[ GROUP BY 속성_리스트 [ HAVING 조건 ] ]
[ ORDER BY 속성_리스트 [ ASC | DESC ] ];
  • LIKE를 이용한 검색
    • % : 0개 이상의 문자 (문자의 내용과 개수는 상관 없음)
    • _ : 1개의 문자 (문자의 내용은 상관 없음)
  • NULL을 이용한 검색 : = <> 사용하면 안된다
    • IS NULL;
    • IS NOT NULL;
  • 집계 함수를 이용한 검색
    • COUNT
    • MAX
    • MIN
    • SUM : 숫자 데이터만 가능
    • AVG : 숫자 데이터만 가능

집계 함수 이용시 주의사항

  1. 집계 함수는 널인 속성 값은 제외하고 계산한다
  2. 집계 함수는 WHERE 절에서는 사용할 수 없고 SELECT 절이나 HAVING 절에서만 사용할 수 있다

 

 

  • 부속 질의문을 이용한 검색
다중 행 부속 질의문에 사용 가능한 연산자
IN
NOT IN
EXISTS
NOT EXISTS
ALL
ANY 또는 SOME

 

 

 

질의 내용은 다양하게 표현할 수 있다

// 조인 질의를 이용한 SELECT 문
SELECT 제품.제품명, 제품.제조업체
FROM 제품, 주문
WHERE 제품.제품번호 = 주문.주문제품 AND 주문.주문고객 = 'BANANA';

// EXISTS 연산자를 이용한 SELECT 문
SELECT 제품명, 제조업체
FROM 제품
WHERE EXISTS (SELECT *
              FROM 주문
              WHERE 제품.제품번호 = 주문.주문제품 AND 주문.주문고객 = 'BANANA');

// IN 연산자를 이용한 SELECT 문
SELECT 제품명, 제조업체
FROM 제품
WHERE 제품번호 IN (SELECT 주문제품
                   FROM 주문
                   WHERE 주문고객 = 'BANANA');

 

 

데이터 삽입

 

// 데이터 직접 삽입
INSERT INTO 테이블_이름[(속성_리스트)]
VALUES (속성값_리스트);

// 부속 질의문을 이용한 삽입
INSERT INTO 테이블_이름[(속성_리스트)]
SELECT 문;

 

데이터 수정

 

UPDATE 테이블_이름
SET 속성_이름1 = 값1, 속성_이름2 = 값2, ...
[WHERE 조건];

 

데이터 삭제

 

DELETE
FROM 테이블_이름
[WHERE 조건];

 

 

 

 


 

정의 : 다른 테이블을 기반으로 만들어진 가상 테이블

 

일반 테이블과 달리 데이터를 실제로 저장하고 있지 않는다.

 

뷰에 대한 삽입, 수정, 삭제 연산으로 인해 기본 테이블의 값이 변한다.

 

 

변경 불가능한 뷰의 중요한 특징

  1. 기본 테이블의 기본키를 구성하는 속성이 포함되어 있지 않은 뷰는 변경할 수 없다
  2. 기본 테이블에 있던 내용이 아니라 집계 함수로 새로 계산된 내용을 포함하고 있는 뷰는 변경할 수 없다
  3. DISTINCT 키워드를 포함하여 정의한 뷰는 변경할 수 없다
  4. GROUP BY 절을 포함하여 정의한 뷰는 변경할 수 없다
  5. 여러 개의 테이블을 조인하여 정의한 뷰는 변경할 수 없는 경우가 많다

 

장점

  1. 질의문을 좀 더 쉽게 작성할 수 있다
  2. 데이터의 보안 유지에 도움이 된다
  3. 데이터를 좀 더 편리하게 관리할 수 있다

 

뷰의 생성

 

CREATE VIEW 뷰_이름[(속성_리스트)]
AS SELECT 문
[WITH CHECK OPTION];

 

뷰의 삭제

 

DROP VIEW 뷰_이름;

 

 

 


삽입 SQL

 

크게 중요하지 않아 생략

 

 


PS

데이터베이스 개론 2판, 한빛아카데이, 김연희 저

반응형