41. REPLACE, LENGTH
-
REPLACE는 REPLACE(범위, 변경 전 문자열, 변경 후 문자열); 로 쓰인다.
-
REPLACE의 변경 후 문자열을 생략하면 변경 전 문자열을 삭제할 수 있다.
-
변경 전 문자열에 CHR(10)을 사용하면 엔터값을 제거한다.
-
LENGTH에서는 줄바꿈과 띄어쓰기도 하나의 글자 수로 취급한다.
-
CHR(10), CHR(13)이 줄바꿈, CHR(9)는 탭이다.
(윈도우에선 \r\n(CHR(13)+CHR(10))이 줄바꿈이고 리눅스는 /n(CHR(10))이 줄바꿈이다.
42. DATE 계산법
-
오라클의 DATE는 +1을 할 때마다 1일씩 추가된다.
-
1/24를 더하면 1시간이 추가되며 1/24/60을 더하면 1분이 추가된다.
43, 44. SEARCHED_CASE_EXPRESSION
-
SEARCHED_CASE_EXPRESSION SQL문장은 조건절에 내용이 맞으면 THEN을 실행하고 틀리면 ELSE를 실행한다.
-
SIMPLE_CASE_EXPRESSION은 기능은 같지만 CASE뒤에 컬럼이나 표현식이 등장해야하며 WHEN 뒤는 조건이 붙어있어야한다.
[SEARCHED_CASE_EXPRESSION]
SELECT LOC,
CASE WHEN LOC = 'NEW YORK' THEN 'EAST'
ELSE 'ETC'
END AS AREA
FROM DEPT;
[SIMPLE_CASE_EXPRESSION]
SELECT LOC,
CASE LOC WHEN 'NEW YORK' THEN 'EAST'
ELSE 'ETC'
END AS AREA
FROM DEPT;
- 이 둘은 같은 기능을 하며 SEARCHED_CASE_EXPRESSION는 우위 비교 등 다양하고 정규한 비교가 가능하다.
- THEN과 ELSE의 위치에 따라 쿼리문이 유사해도 출력값이 달라질 수 있다.
45, 46, 48, 49. ISNULL, NULLIF, NVL, NVL2, COALESCE
- SQL Server에서 쓰이는 ISNULL함수는 ISNULL(컬럼명, 컬럼이 NULL일 경우 대체할 값)으로 쓰이며 컬럼에 데이터가 NULL이면 대체값으로 대체하여 입력된다.
- Oracle에서 쓰이는 NVL(표현식, 대체 값)은 표현식에 데이터에 NULL이 있으면 대체 값으로 바꿔주며 컬럼 데이터에 NULL이 전혀 없으면 NOT-NULL이 반환된다.
- NVL2(컬럼명, NULL일 경우 대체값, NULL이 아닐 경우 대체값) NVL과 유사하지만 NULL이 아닐 경우 대체하는 값을 넣을 수 있다.
- NULLIF(표현식1, 표현식2)은 표현식1과 2가 같으면 NULL을 반환하고 같지 않으면 표현식 1을 반환한다.
- SQL Server에서 NVL, NVL2와 같은 기능을 수행하기 위해 NULLIF을 쓰고 있다.
- SQL Server에서 ISNULL, Oracle에서 NVL, NVL2를 쓸 수 있고 NULLIF는 공통으로 쓰인다.
- 별개로 COALESCE가 있는데 COALESCE(컬럼명)을 쓰면 컬럼의 행에 있는 NULL값을 제외한 첫번째 값을 반환하고 모두 NULL이면 NULL을 반환한다.
- COALSECE(컬럼명, 대체값)을 적으면 행의 값이 모두 NULL일 경우 대체값이 반환된다.
47. SQL NULL포함 연산
- 0을 어떤 실수로 나눠도 0이 반환된다.
- 흔히 Java에서 실수를 0으로 나누면 ArithmaticException이 발생한다. 그처럼 SQL에서도 같은 원리로 적용된다. SQL연산 시에 0으로 특정 값을 나누면 에러가 발생한다.
- NULL은 어떠한 연산을 해도 NULL값이 반환된다.
- 1000 / NULL 또한 NULL의 반환이다.
- NULL은 모르는 값이기 때문에 0과는 성질이 다르다.
50, 51. NULL포함 집계함수
- NULL이 포함된 행의 AVG는 없는 값으로 계산한다. 평균을 구할 때 NULL값이 있어도 분모가 늘어나지 않는다.(모르기 때문에 계산할 수 없다고 판단)
- COUNT(*)는 NULL을 포함한 행의 수를 출력한다.
- COUNT(표현식)은 NULL값을 제외한 행의 수를 출력한다.
52, 53. GROUP BY와 HAVING절
- GROUP BY는 출력값의 공통된 값을 묶어준다고 생각하면된다.
- GROUP BY에 사용된 컬럼에 조건을 부여할 수 있는 것이 HAVING절이다.
- 즉, GROUP BY에 적용된 컬럼에만 HAVING절을 적용할 수 있다. GROUP BY에 없는 컬럼에 HAVING 조건을 붙이면 오류가 발생한다.
- HAVING 조건절에는 그룹함수와 관련한 어떠한 조건을 붙일 수 있다.