SQLD 학습을 진행하며 기억할 내용을 간략히 기록합니다.
용어로 Entity(엔티티)를 엔터티라고 발음하지만 엔티티로 정리합니다.
여러 테이블로부터 원하는 데이터를 조회하기 위해서는 전체 테이블 개수에서 최소 N-1개만큼의 JOIN조건 필요
일반적으로 조인은 PK와 FK값의 연관성에 의해 성립
DBMS 옵티마이저는 FROM절에 나열된 테이블이 아무리 많아도 항상 2개의 테이블을 짝 지음
EQUI JOIN
: '=' 연산자에 의해서만 수행, 그 이외의 비교 연산자를 사용할 경우 모두 NON EQUI JOIN
대부분 NON EQUI JOIN
을 수행할 수 있으나 때로는 불가능한 경우도 있음
FULL OUTER JOIN: 두 테이블 간의 모든 데이터를 결합, LEFT & RIGHT OUTER JOIN을 합친 것
MySQL의 경우 FULL OUTER JOIN이 존재하지 않기 때문에 UNION을 사용해서 합칠 수 있음
CROSS JOIN: 일반 집합 연산자의 PRODUCT 개념으로 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말함
SELECT, PROJECT, JOIN, DIVIDE(현재 사용x)
GROUP BY절은 NULL이 있을 경우 NULL 데이터도 집계에 포함한다.
SQL Server에서 NULL은 가장 작은 값으로 간주
ORACLE에서 NULL은 가장 큰 값으로 간주
UNION ALL은 중복제거를 하지 않는다.
UNION은 내부적으로 정렬을 하기 때문에 성능적으로 UNION ALL이 더 좋다.
1/12/(60/30) = 1시간
1/24 = 1시간
1/24/60 = 1분
1/24/6 = 10분
1.5/24 = 1시간 30분
NVL(표현식1, 0)
표현식1이 NULL이면 0으로 표시
NULL이 아니면 그대로 표현식1로 표시
NVL2
함수는 NULL이 아닌 경우 지정값1을 출력하고, NULL인 경우 지정값2를 출력한다.
NVL2("값", "지정값1", "지정값2") // NVL2("값", "NOT NULL", "NULL")
NULLIF('A', 'A')
두 인자값이 같으면 NULL 반환, 다르면 첫번째 인자값 반환
COALESCE(콜럼1, 콜럼2, ...)
적은 콜럼 중 NULL이 아닌 첫 값을 호출
콜럼1이 'A', 콜럼2가 NULL이면 'A'
콜럼1이 NULL, 콜럼2가 'B'면 'B'
콜럼1이 'A', 콜럼2가 'B'면 'A'
칼럼끼리 연산할 때 NULL을 포함하면 결과가 NULL이다.
레코드끼리 연산할 때 NULL을 포함하면 결과가 NULL이 아니다.
NULL을 연산에서 제외하기 때문이다.
콜럼(열, field)
레코드(행, row)
NULL로만 구성된 컬럼을 COUNT하면 공집합이 아니라 0이 나온다.