SQL : 현재 관계 DBMS 시장에서 널리 사용되는 ANSI (미국 표준 기구) 표준 언어

  • 비절차적 언어이므로 원하는 바만 명시, 처리하는 방법은 명시하지 않음
  • 대화식 SQL과 내포된 SQL이 있다.
  • 관계 DBMS는 사용자가 입력한 SQL문을 번역, 요구한 데이터를 찾는데 모든 과정을 담당한다.

데이터 정의어

  • 스키마의 생성 : CREATE (DOMAIN, TABLE, VIEW...)
    • CREATE SCHEMA MY_DB
  • 스키마의 제거 : DROP (DOMAIN, TABLE, VIEW...)
    • DROP SCHEMA MY_DB
  • 릴레이션의 정의에 사용되는 오라클 데이터 타입
    • INT, NUMBER(n, s) : 정수와 소수점
    • CHAR(n), VARCHAR(n) : 문자열과 가변 문자열
  • 제약조건
    • NOT NULL, UNIQUE, CHECK ...
  • 참조 무결성 제약조건
    • ON DELETE NO ACTION
    • ON DELETE CASCADE : 기본 키 삭제시 외래 키도 삭제된다.
    • ON DELETE SET NULL : 참조되는 값 삭제시 참조하는 값을 NULL로 바꾼다.
    • ON DELETE SET DEFAULT : NULL이 아닌 DEFAULT값으로 바꾼다.
    • ON UPDATE NO ACTION

SELECT절
  • 관계 DB에서 정보를 검색하는 SQL문
    • 관계 대수의 실렉션, 프로젝션, 조인, 카티션 곱 등을 결합한 것으로 가장 자주 사용된다.
    • SELECT절과 FROM절은 필수적, 나머지는 선택 사항
    SELECT         [DISTINCT] 애트리뷰트(들)
    FROM          릴레이션(들)
    [WHERE        조건
           [중첩 질의]]
    [GROUP BY   애트리뷰트(들)]
    [HAVING      조건]
    [ORDER BY   애트리뷰트(들) [ASC|DESC]];

    • * (아스테리카)를 사용하면 전체에 대해 검색할 수 있다.
    • 보통은 애트리뷰트를 열거해 검색
    • DISTINCT를 사용하면 중복을 제거해 준다.
    • 산술 연산자를 이용할 수 있다.


    WHERE절 : 검색 조건을 명시

    • % (퍼센트 기호)를 이용해 문자열을 비교할 수 있다. 
      • WHERE EMPNAME LIKE '이%'   ☞  '이씨 성을 가진'
    • 부울 연산자 (AND, OR, <>(NOT))를 이용해 조건을 제시할 수 있다.
    • 범위 연산자도 가능
    • 리스트를 사용한 검색이 가능하다.
      • WHERE DNO IN (1, 3)  ☞  '1번 부서나 3번 부서에 소속된'
    • NULL값과의 직접적인 비교는 불가능하다. 
      • IS NULL, IS NOT NULL 등으로 사용가능

    ORDER BY절 :  오름차순(ASC)과 내림차순(DESC)으로 정렬할 때 사용한다. 
    - SELECT절에 명시한 애트리뷰트들을 사용해서 정렬해야 한다.

    AS문 : 서로 다른 릴레이션에 동일한 이름을 가진 애트리뷰트가 있을 때 구분하기 위한 방법
    - EMPLOYEE AS E, DEPARTMENT AS D

    집단 함수
    • DB에서 검색된 여러 투플들의 집단에 적용되는 함수
    • 한 개의 애트리뷰트에 적용되어 단일 값을 반환한다.
    • SELECT절과 HAVING절에만 나타날 수 있음
    • COUNT(*)는 릴레이션의 모든 행들의 총 개수
    • COUNT(애트리뷰트)는 해당 애트리뷰트에서 널값이 아닌 값들의 갯수
    • SUM, AVG, MAX, MIN ..
    그룹화 : GROUP BY절에 사용된 애트리뷰트에 동일한 값을 갖는 투플들이 묶인다.

    HAVING절 : 각 그룹이 만족해야 하는 조건을 명시
    - HAVING절에 나타나는 애트리뷰트는 반드시 GROUP BY절에 나타나거나 집단 함수에 포함되어야 한다.

    집합 연산 : 두 릴레이션이 합집합 호환성을 가져야 적용할 수 있다.
    - UNION(합집합), EXCEPT(차집합), INTERSECT(교집합)


    조인
    • 두 개 이상의 릴레이션으로부터 연관된 투플들을 결합
    • WHERE절에 애트리뷰트들을 비교하는 조인 조건이 포함
    • 조인 조건이 명확해지도록 애트리뷰트 이름 앞에 변수를 사용하는 것이 좋다.
    자체 조인 : 한 릴레이션에 속하는 투플을 동일한 릴레이션에 속하는 투플들과 조인.
    - 릴레이션에 대한 별칭을 두 개 지정해야 한다.


    중첩 질의
    • 질의의 WHERE 또는 FROM절에 다시 SELECT문이 괄호로 묶여 포함되는 것
    • 부질의(subquery)라고 한다.
    • 결과는 크게 세 종류가 있다.
      • 한 개의 스칼라값
      • 한 개의 애트리뷰트로 이루어진 릴레이션 : 외부 질의의 WHERE절에서 IN, ANY, ALL, EXISTS와 같은 연산자를 사용해야 한다.
        1. IN : 한 애트리뷰트가 값들의 집합에 속하는가
        2. ANY : 한 애트리뷰트가 값들의 집합에 속하는 하나 이상의 값들과 어떤 관계를 갖는가
        3. ALL : 한 애트리뷰트가 값들의 집합에 속하는 모든 값들과 어떤 관계를 갖는가
        4. EXISTS : 중첩 질의의 결과가 빈 릴레이션인지 여부를 검사
      • 여러 애트리뷰트로 이루어진 릴레이션
    • 상관 중첩 질의 : 중첩 질의의 WHERE절에서 외부 질의에 선언된 릴레이션의 일부 애트리뷰트를 참조


    + Recent posts