본문 바로가기

Dev/DATABASE, SQL

(5)
드라이빙 테이블, Merge 문이란? 드라이빙 테이블은 조인시 가장 먼저 읽히는 테이블을 뜻한다. ANSI JOIN의 경우는 순서 상관없이 옵티마이저가 자동으로 최적화해서 가장 좋은 전략을 짜준다. 하지만 오라클조인을 사용할 땐 순서가 중요해지는데 대학에서 배운대로 더 적은 테이블을 먼저 읽는 것이 성능에 좋다. 즉, 드라이빙 순서대로 테이블을 기술한다는 것은 "먼저 읽혀야 하는 테이블을 FROM 절에서 먼저 배치한다"는 의미이다. MERGE INTO 대상_테이블 TUSING (서브쿼리 또는 소스 테이블) SON (조인 조건)WHEN MATCHED THEN UPDATE SET 컬럼1 = 값1, 컬럼2 = 값2 ...WHEN NOT MATCHED THEN INSERT (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...
ANSI JOIN, ORACLE JOIN 차이점 단순하게 안시조인은 JOIN, ON 을 사용하는 것이고 오라클조인은 WHERE 절로 테이블을 엮는 것이다. 그래서 오라클조인을 사용하면 아우터조인을 할 수 없다는 것이다. 하지만! 할 수 있다. 이런식으로 + 기호를 적어주면 아우터조인처럼 나타낼 수 있다. +를 적지 않은 쪽이 메인테이블이 된다. 뭔가 오라클조인이 불편해보이지만 장점도 있다. 안시조인은 두 테이블에 반드시 값이 존재해야 한다. 하지만 오라클조인은 WHERE 절이기 때문에 원하는 값을 = 'VALUE' 이렇게 해주면 얻을 수 있다.  성능차이도 ANSI조인이 더 옵티마이저 전략, 대용량 데이터에서 유리하다. 출처: https://gent.tistory.com/469
MySQL / ORACLE 의 GROUP BY 동작 차이 원래 MySQL만 사용했는데 취업을 해보니 많은 회사들이 ORACLE을 사용하고 있다는 것을 알게되었다. 그리고 개발자는 프로그래밍보다 중요한 것이 SQL 작성 능력임도 알게되었다. 그래서 요즘 SQL 문제를 열심히 풀고 있는데 그룹화 문제에서 다음과 같은 에러를 만났다. GROUP BY 절 이후 컬럼  https://school.programmers.co.kr/learn/courses/30/lessons/144856 이 문제의 정답 쿼리로 예를 들겠다.SELECT a.author_id, a.AUTHOR_NAME, b.CATEGORY, sum(price * SALES) as TOTAL_SALESFROM BOOK b, AUTHOR a, BOOK_SALES bsWHERE ..
[ORACLE] 오라클의 NULL 처리 IS NULL, IS NOT NULLSELECT * FROM TABLE_NAMEWHERE COL_NAME IS NULL NULL인지 아닌지 처리NVL, NVL2SELECT NVL(1, 2), NVL(COL_NAME, 'a')FROM TABLE_NAME; COL_NAME이 NULL이면 a가 나온다.SELECT NVL2('A', 'B', 'C') // C , NVL2(NULL, 'B', 'C') // 2 , NVL2(1, 2, 3) // 3FROM TABLE_NAME; 첫번째 파라미터가 NULL이면 3번째 파라미터가, 아니면 2번째 파라미터가 나온다.NULLIFSELECT NULLIF('A', 'B') // A , NULLIF('A', 'A') // NULL ..
SQL - 날짜 출력 방법 Specifier Description Example 1 %Y 연도(year): 4자리 표현 2021 2 %y 연도(year): 뒤에서 2자리 표현 21 3 %a 요일(weekday): 이름 줄임표현 Mon, Tue, Wed, ... 4 %W 요일(weekday): 이름 Sunday, ..., Saturday 5 %w 요일(weekday): 숫자 활용 0 = Sunday, ... , 6 = Saturday 6 %b 월(month): 이름 줄임표현 Jan, Feb, Mar, ... 7 %M 월(month): 이름 January, February, ..., December 8 %c 월(month): 숫자 표기(자릿수 고정 X) 0, 1, 2, ..., 12 9 %m 월(month): 숫자 표기(자릿수 2개로..