오답노트

  1. ALTER문에서 FK를 추가할 때는 ADD CONSTRAINT로 쓰이고 CREATE문에서 CONSTRAINT를 사용할 때는 ADD가 사용되지 않음

  2. FK 제약조건 생성 시 DELETE SET NULL의 함정!!

  3. PK는 TABLE당 주키로 1개만 생성

  4. DELETE * FROM TABLE명 같은 형태는 없음

  5. TRUNCATE는 기본적으로 DDL문이기 때문에 AUTO COMMIT을 하게 됌

  6. TRANSACTION의 특성 4가지

  7. TRANSACTION에 대한 격리성이 낮은 경우 발생할 수 있는 문제점

  8. ORACLE에서는 NULL이 가장 큰 값, SERVER SQL에서는 NULL이 가장 작은 값

  9. GROUP BY, HAVING절, ORDER BY 절에서 오류가 발생할 수 있는 경우의 수

    1. SELECT 절에 집계함수로 사용된 컬럼을 GROUP BY가 없는 HAVING절에 사용하는 것은 가능

      SELELCT SUM(주문금액) AS 합계
      FROM 주문
      HAVING AVG(주문금액) > 100;
      
    2. GROUP BY절에 사용한 컬럼을 HAVING절에 사용하게 되면 FILTER 역할을 하게 되어 SELECT 절에 집계함수와 함께 사용 가능해짐

      SELECT **메뉴ID**, **사용유형코드**, COUNT(*) AS CNT
      FROM 시스템사용이력
      WHERE 사용일시 BETWEEN SYSDATE -1 AND SYSDATE
      GROUP BY **메뉴ID**, **사용유형코드**
      HAVING **메뉴ID** = 3 AND **사용유형코드** = 100;
      
    3. 중첩된 그룹함수의 경우 최종 결과값은 1건 밖에 될 수 없기 때문에 GROUP BY절에게 기술된 메뉴ID와 사용유형코드는 SELECT 절에 기술될 수 없음.

      때문에 SELECT절에 기술하기 위해서는 위 처럼 HAVING절 사용 필요

      SELECT 메뉴ID, 사용유형코드, AVG(COUNT(*)) AS AVGCNT
      FROM 시스템사용이력
      GROUP BY 메뉴ID, 사용유형코드;
      
    4. SELECT 절에 없더라도 테이블 내 존재하는 다른 컬럼을 WHERE 절이나 ORDER BY절에 사용 가능

      다만 INLINE VIEW 서브 쿼리로 작성한 내용에 대해서는 외부 SELECT절에서 WHERE절이나 ORDER BY절에 사용은 불가능

      # 가능한 것
      SELECT 지역, 매출금액
      FROM 지역별매출
      ORDER BY 년 DESC;
      
      # 불가능한 것 01
      SELECT 지역, 매출금액, 년
      FROM (
      	SELECT 지역, 매출금액
      	FROM 지역별매출
      	ORDER BY 년 DESC
      )
      WHERE 직역 = '성남';
      
      # 불가능한 것 02
      SELECT 지역, 매출금액
      FROM (
      	SELECT 지역, 매출금액
      	FROM 지역별매출
      	ORDER BY 년 DESC
      )
      WHERE 년 = '2021';
      
    5. GROUP BY 사용 시 GROUP BY절에 기술된 내용이 아닌 것은 ORDER BY 절에 사용 불가능

      # 아래와 같이 작성하면 ORDER BY절에서 에러남
      SELECT 지역, SUM(매출금액) AS 매출금액
      FROM 지역별매출
      GROUP BY 지역
      ORDER BY 년 DESC;
      

PK를 주키로 테이블당 1개만 가능한가?

맞다 1개만 가능

CREATE TABLE 시 NOT NULL 제약조건 외에 NULL 제약 조건도 존재