데이터베이스 언어 SQL

박민주·2024년 1월 22일
0

[cs]-DB

목록 보기
8/8
  • SQL의 역할을 이해하고, 이를 기능별로 분류해본다
  • SQL의 데이터 정의 기능을 예제를 통해 익힌다.
  • SQL의 데이터 조작 기능을 예제를 통해 익힌다.

SQL의 소개

SQL(Structured Query Langauge)

  • 관계 데이터베이트를 위한 표준 질의어
  • 1974년 IBM에서 시스템R을 질의하기 위해서 만들어진 구조화된 언어

    IBM 시스템 R(IBM System R)은 1974년에 시작된 IBM의 새너제이 연구소의 연구 프로젝트로 빌드된 데이터베이스 시스템이다. 시스템 R은 중대 프로젝트였다. SQL의 최초 구현체였으며 그 뒤로 표준 관계형 데이터 쿼리가 되었다
    https://ko.wikipedia.org/wiki/IBM_%EC%8B%9C%EC%8A%A4%ED%85%9C_R

  • 미국 표준 연구소인 ANSI와 국제 표준화 기구인 ISO에서 표준화 작업을 진행

SQL의 분류

데이터 조작어(Data Manipulation Language), 데이터 정의어(Data Definition Language), 데이터 제어어(Dat Contorl Language)

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

유형

분류
DDLCREATE(테이블 생성), ALTER(테이블 수정), DROP(테이블 삭제)
DMLSELECT(데이터 검색), INSERT(데이터 삽입), UPDATE(데이터 수정), DELETE(데이터 삭제)

SQL을 이용한 데이터 정의

테이블 생성 : CREATE TABLE 문

  • [ ]의 내용은 생략이 가능
  • 질의문은 세미콜론(;)으로 문장의 끝을 표시
  • 질의문은 대소문자를 구분하지 않음
    1) 테이블 구성하는 각 속성의 이름, 데이터 타입, 기본 제약 사항 정의
    2) 기본키 정의
    3) 대체키 정의
    4) 외래키 정의
    5) 데이터 무결성을 위한 제약조건 정의
  • 속성의 정의
    - 테이블 구성하는 각 속성의 데이터 타입을 선택한 다음 널 값 허용 여부와 기본 값 필요 여부를 결정
    • NOT NULL
      • 속성이 널 값을 허용하지 않음을 의미하는 키워드
      • 예) 고객아이디 VARCHAR(20) NOT NUL
    • DEFAULT
      • 속성의 기본 값을 지정하는 키워드
      • 예) 적립금 INT DEFAULT 0
  • 키의 정의
    • PRIMARY KEY
      • 기본키를 지정하는 키워드
      • 예) PRIMARY KEY(고객아이디)
    • UNIQUE
      • 대체키를 지정하는 키워드
      • 대체키로 지정되는 속성의 값은 유일성을 가지며 기본키와 달리 널 값이 허용됨
      • 예) UNIQUE(고객이름) - 동명이인이 없다는 가정하에
    • FOREIGN KEY
      • 외래키를 지정하는 키워드
      • 외래키가 어떤 테이블의 무슨 속성을 참조하는지 REFERENCES 키워드 다음에 제시
      • 예) FOREIGN KEY(소속부서) REERENCES 부서(부서번호)
  • 데이터 무결성 제약조건의 정의
    • CHECK
      • 테이블에 정확하고 유효한 데이터를 유지하기 위해 특정 속성에 대한 제약조건을 지정
      • CONSTRAINT 키워드와 함꼐 고유의 이름을 부여할 수도 있음
      • 예)CONSTRAINT CHK_CPY CHECK(제조업제='한빛제과')

CREATE TABLE 작성 예

	CREATE TABLE 고객(
    	고객아이디 VARCHAR(20) NOT NULL,
        고객이름 VARCHAR(10) NOT NULL,
        나이 INT,
        등급 VARCHAR(10) NOT NULL,
        직업 VARCHAR(20),
        적립금 INT DEFAULT 0
        RPIMARY KEY(고객아이디)
     );

	CREATE TABLE 제품(
    	제품번호 CHAR(3) NOT NULL,
        제품명 VARCHAR(20),
        재고량 INT,
        단가 INT,
        제조업체 VARCHAR(20),
        PRIMARY KEY(제품번호),
        CHECK (재고량 >= 0 AND 재고량 <=10000)
    );

	CREATE TABLE 주문(
    	주문번호 CHAR(3) NOT NULL,
        주문고객 VARCHAR(20), 
        주문제품 CHAR(5),
        수량 INT,
        배송지 VARCHAR(30),
        주문일자 DATETIME,
        PRIMARY KEY(주문번호),
        FOREIGN KEY 주문고객 REFERENCES 고객(고객아이디),
        FOREIGN KEY 주문제품 REFERENCES 제품(제품번호)
    );

외래키로 쓰이는 속성들의 데이터 타입이 모두 같은 것을 알 수 있다.

테이블 변경 : ALTER TABLE문

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

문제) 위의 고객테이블에 가입 날짜 속성을 추가해보자

	ALTER TABLE 고객 ADD 가입날짜 DATETIME
  • 기존 속성 삭제
	ALTER TABLE 테이블_이름 DROP 속성_이름 CASCADE | RESTRICT
  • cascade
    - 삭제할 속성과 관련된 제약 조건이나 참조하는 다른 속성을 함께 삭제
  • RESTRICT
    - 삭제할 속성과 롼련된 제약조건이나 참조하는 다른 속성이 존재하면 삭제 거부

문제) 고객 테이블의 등급 속성을 삭제하면서 관련된 제약 조건이나 등급 속성을 참조하는 다른 속성도 함께 삭제해보자

	ALTER TABLE 고객 DROP 등급 CASCADE;

테이블 제거 : DROP TABLE문

	DROP TABLE 테이블_이름 CASCADE | RESTRICE;
  • cascade
    - 제거할 테이블을 참조하는 다른 테이블도 함께 제거
  • RESTRICT
    - 제거할 테이블을 참조하는 다른 테이블이 존재하면 함께 제거 거부

예) 고객테이블을 삭제하되, 고객 테이블을 참조하는 다른 테이블이 존재하면 삭제가 수행되지 않도록 해보자.

	DROP TABLE 고객 RESTRICT;
profile
개발자 되고싶다..

0개의 댓글