ALTER문에서 FK를 추가할 때는 ADD CONSTRAINT로 쓰이고 CREATE문에서 CONSTRAINT를 사용할 때는 ADD가 사용되지 않음
FK 제약조건 생성 시 DELETE SET NULL의 함정!!
PK는 TABLE당 주키로 1개만 생성
DELETE * FROM TABLE명 같은 형태는 없음
TRUNCATE는 기본적으로 DDL문이기 때문에 AUTO COMMIT을 하게 됌
TRANSACTION의 특성 4가지
TRANSACTION에 대한 격리성이 낮은 경우 발생할 수 있는 문제점
ORACLE에서는 NULL이 가장 큰 값, SERVER SQL에서는 NULL이 가장 작은 값
GROUP BY, HAVING절, ORDER BY 절에서 오류가 발생할 수 있는 경우의 수
SELECT 절에 집계함수로 사용된 컬럼을 GROUP BY가 없는 HAVING절에 사용하는 것은 가능
SELELCT SUM(주문금액) AS 합계
FROM 주문
HAVING AVG(주문금액) > 100;
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;
중첩된 그룹함수의 경우 최종 결과값은 1건 밖에 될 수 없기 때문에 GROUP BY절에게 기술된 메뉴ID와 사용유형코드는 SELECT 절에 기술될 수 없음.
때문에 SELECT절에 기술하기 위해서는 위 처럼 HAVING절 사용 필요
SELECT 메뉴ID, 사용유형코드, AVG(COUNT(*)) AS AVGCNT
FROM 시스템사용이력
GROUP BY 메뉴ID, 사용유형코드;
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';
GROUP BY 사용 시 GROUP BY절에 기술된 내용이 아닌 것은 ORDER BY 절에 사용 불가능
# 아래와 같이 작성하면 ORDER BY절에서 에러남
SELECT 지역, SUM(매출금액) AS 매출금액
FROM 지역별매출
GROUP BY 지역
ORDER BY 년 DESC;
맞다 1개만 가능