데이터베이스

8. 데이터베이스 언어 SQL

YJH3968 2021. 9. 28. 16:22
728x90

1. SQL의 소개

 - SQL(Structured Query Language)

  • 관계 데이터베이스를 위한 표준 질의어
  • 데이터 정의어, 데이터 조작어, 데이터 제어어가 있다.

 - SQL의 분류

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

2. SQL을 이용한 데이터 정의

 - 테이블 생성

  • CREATE TABLE 문을 사용한다.
  • 속성의 정의
    • 테이블을 구성하는 각 속성의 데이터 타입을 선택한 다음 null 값 허용 여부와 기본 값 필요 여부 결정
    • NOT NULL : 속성이 null 값을 허용하지 않음을 의미한다.
      ex) VARCHAR(20) NOT NULL
    • DEFAULT : 속성의 기본 값을 지정한다.
      ex) INT DEFAULT 0
  • 키의 정의
    • PRIMARY KEY
      • 기본키(primary key)를 지정
    • UNIQUE
      • 대체키를 지정
      • 유일성을 가지고 기본키와 달리 null 값이 허용됨
    • FOREIGN KEY
      • 외래키를 지정
      • 외래키가 어떤 테이블의 무슨 속성을 참조하는지 REFERENCES 키워드 다음에 제시
        ex) FOREIGN KEY(소속부서) REFERENCES 부서(부서번호)

  • 데이터 무결성 제약조건의 정의
    • CHECK
      • 테이블 내 데이터의 무결성을 유지하기 위해 특정 속성에 대한 제약조건을 지정
      • CONSTRAINT 키워드와 함께 고유의 이름을 부여할 수도 있다.
        ex) CHECK(재고량 >= 0 AND 재고량 <= 10000)
        ex2) CONSTRAINT CHK_CPY CHECK(제조업체 = '한빛제과')

 - 테이블 변경

  • ALTER TABLE 문을 사용
  • 새로운 속성 추가 시 ADD 키워드를 사용
  • 기존 속성 삭제 시 DROP 키워드를 사용
    • CASCADE : 삭제할 속성과 관련된 제약조건이나 참조하는 다른 속성을 함께 삭제
    • RESTRICT : 삭제할 속성과 관련된 제약조건이나 참조하는 다른 속성이 존재하면 삭제 거부
  • 테이블 제거
    • DROP TABLE 문을 사용
    • CASCADE : 제거할 테이블을 참조하는 다른 테이블도 함께 제거
    • RESTRICT : 제거할 테이블을 참조하는 다른 테이블이 존재하면 제거 거부

3. SQL을 이용한 데이터 조작

 - 데이터 검색(SELECT)

  • 기본 검색
    • SELECT + 속성 이름
    • FROM + 테이블 이름
    • 검색 결과는 테이블 형태로 반환
    • ALL : 결과 테이블이 tuple의 중복을 허용하도록 지정
    • DISTINCT : 결과 테이블이 tuple의 중복을 허용하지 않도록 지정
    • AS 키워드를 이용해 결과 테이블에서 속성의 이름을 바꾸어 출력 가능
  • 산술식을 이용한 검색
    • SELECT 키워드와 함께 산술식 제시
    • 속성의 값이 실제로 변경되지는 않음
    • 결과 테이블에서만 계산된 결과 값이 출력됨
  • 조건 검색
    • 조건을 만족하는 데이터만 검색
    • WHERE 키워드와 함께 비교 연산자와 논리 연산자를 이용해 검색 조건 제시
  • LIKE를 이용한 검색
    • LIKE 키워드를 이용해 부분적으로 일치하는 데이터를 검색
    • 문자열을 이용하는 조건에만 LIKE 키워드 사용 가능
  • NULL을 이용한 검색
    • IS NULL : 특정 속성의 값이 null 값인지 비교
    • IS NOT NULL : 특정 속성의 값이 null 값이 아닌지를 비교
  • 정렬 검색
    • ORDER BY를 이용
    • ASC : 오름차순(기본값), DESC : 내림차순
  • 집계 함수를 이용한 검색
    • 특정 속성의 값을 통계적으로 계산한 결과를 검색하기 위해 집계 함수를 이용
    • 집계 함수 사용 시 주의 사항
      • null인 속성 값은 제외하고 계산
      • WHERE 절에서는 사용할 수 없고 SELECT 절이나 HAVING 절에서만 사용 가능
  • 그룹별 검색
    • GROUP BY 키워드를 이용해 특정 속성의 값이 같은 tuple을 모아 그룹을 만들고 그룹별로 검색
    • HAVING 키워드를 함께 이용해 그룹에 대한 조건을 작성(이는 집계 함수는 WHERE 절에서 사용할 수 없기 때문이다.)
    • GROUP BY 절에 명시된 속성은 반드시 SELECT 절에 반드시 포함
    • 집계 함수나 GROUP BY 절에 명시된 속성 외의 속성은 SELECT 절에 작성 불가
  • 여러 테이블에 대한 조인 검색
    • 조인 검색 : 여러 개의 테이블을 연결하여 데이터를 검색하는 것
    • 조인 속성 : 조인 검색을 위해 테이블을 연결해주는 속성
      • 연결하려는 테이블 간에 조인 속성의 이름은 달라도 되지만 domain은 같아야 함
      • 일반적으로 외래키가 조인 속성으로 이용됨
    • FROM + 검색에 필요한 모든 테이블
    • WHERE 절에 조인 속성의 값이 같아야 함을 의미하는 조인 조건을 제시
    • 같은 이름의 속성이 서로 다른 테이블에 존재할 수 있으므로 속성 이름 앞에 해당 속성이 소속된 테이블의 이름을 표시
      ex) 주문.주문고객
    • 여러 테이블에 대한 조인 검색 시 INNER JOIN.. ON을 사용하기도 한다.
  • 부속 질의문을 이용한 검색
    • SELECT 문 내에 또 다른 SELECT 문을 포함하는 질의
    • 단일 행 부속 질의문 : 하나의 행을 결과로 반환
    • 다중 행 부속 질의문 : 하나 이상의 행을 결과로 반환
    • 부속 질의문을 먼저 수행하고, 그 결과를 이용해 상위 질의문을 수행
    • 부속 질의문과 상위 질의문을 연결하는 연산자가 필요
    • 단일 행 부속 질의문은 비교 연산자를 사용 가능하나 다중 행 부속 질의문은 사용 불가
    • 다중 행 부속 질의문에서 사용하는 연산자
      • IN / NOT IN : 부속 질의문의 결과 값 중 일치하는 것이 있으면(없으면) 검색 조건이 참
      • EXISTS / NOT EXISTS : 부속 질의문의 결과 값이 하나라도 존재하면(존재하지 않으면) 검색 조건이 참
      • ALL / ANY(SOME) : 비교 연산자와 함께 사용하는데, 부속 질의문의 결과 값 모두와(하나라도) 비교한 결과가 참이면 검색 조건을 만족

 - 데이터 삽입

  • INSERT 문을 사용
  • 데이터 직접 삽입
    • INTO + tuple을 삽입할 테이블의 이름(속성의 이름1, 속성의 이름2, ... )
    • VALUES + (속성 값1, 속성 값2, ... )
    • INTO 절의 속성 이름과 VALUES 절의 속성 값은 일대일 대응되어야 함
  • 부속 질의문을 이용한 데이터 삽입
    • VALUES 대신 SELECT 문을 이용해 다른 테이블에서 검색한 데이터를 삽입

 - 데이터 수정

  • UPDATE 문을 사용
  • 테이블에 저장된 tuple에서 특정 속성의 값을 수정
  • SET 키워드 다음에 속성 값을 어떻게 수정할 것인지를 지정
  • WHERE 절에 제시된 조건을 만족하는 tuple에 대해서만 속성 값을 수정(생략 시 모든 tuple에 대해 속성 값을 수정)

 - 데이터 삭제

  • DELETE 문을 사용
  • 테이블에 저장된 데이터를 삭제
  • WHERE 절에 제시한 조건을 만족하는 tuple만 삭제(WHERE 생략 시 테이블에 존재하는 모든 tuple을 삭제 해 빈 테이블이 됨)

 

출처 : 데이터베이스의 원리와 응용 강의

 

728x90

'데이터베이스' 카테고리의 다른 글

7. 관계 데이터 연산  (0) 2021.09.27
6. 정규화  (0) 2021.09.24
5. 관계 데이터 모델  (0) 2021.09.24
4. 개념적 데이터 모델링  (0) 2021.09.24
3. 데이터베이스 시스템  (0) 2021.09.22