데이터베이스 - SQL

Chooooo·2023년 11월 29일
0

데이터베이스

목록 보기
2/3

😎 SQL의 소개

정의 : 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 : 숫자 데이터만 가능

집계 함수 이용시 주의사항
집계 함수는 널인 속성 값은 제외하고 계산한다
집계 함수는 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 조건];

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

일반 테이블과 달리 데이터를 실제로 저장하고 있지 않는다.
뷰에 대한 삽입, 수정, 삭제 연산으로 인해 기본 테이블의 값이 변한다.

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

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

장점

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

뷰의 삭제

DROP VIEW 뷰_이름;
profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글