SQL
[SQL] TO_CHAR 함수 사용법 (날짜 포맷, 소수점, 천단위 콤마)
날짜 포맷 변경 (YYYY-MM-DD) YYYY: 년, MM: 월, DD: 일, HH24: 24시간, HH: 12시간, MI: 분, SS:초SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') --20200723 , TO_CHAR(SYSDATE, 'YYYY/MM/DD') --2020/07/23 , TO_CHAR(SYSDATE, 'YYYY-MM-DD') --2020-07-23 , TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') --2020-07-23 11:10:52 FROM dual 소수점 변경 FM: 문자열의 공백제거숫자의 최대 길이만큰 9999... 형식을 지정한다. (9 : 값..
[SQL] MINUS 사용법 (차집합, EXCEPT)
개념MINUS 연산자를 사용하면 서로 다른 쿼리문에서 차집합의 데이터를 구할 수 있다. MINUS 연산자는 다른 데이터베이스의 EXCEPT 연산자와 비슷한 기능을 하며, 중복 값이 제거된 차집합 데이터가 반환된다는 것을 숙지해야 한다. MINUS 연산자를 사용하여 쿼리문을 작성하면 직관성은 좋지만 성능에 이슈가 발생하는 경우가 많다. 성능 이슈가 발생하면 NOT EXISTS 연산자로 쿼리문을 변경하는 것도 성능 향상에 좋은 방법이다.기본 사용법SELECT empno, ename, job, deptno FROM emp WHERE sal > 2500 MINUS SELECT empno, ename, job, deptno FROM emp WHERE deptno = 10MINUS 연산자를 사용할 때는 MINU..
[SQL] join에 대하여
inner join 형식은 아래와 같다SELECT pka, c1, pkb, c2FROM AINNER JOIN B ON pka = fka; 예시) 방문객들과 지불금액의 연관관계를 확인하는 sql 쿼리문이다 1. 먼저 아래와 같이 ERD에서 customer와 payment에 어떤 key를 이용하여 연결되어 있는지 확인한다 2. 찾은 key를 이용하여 inner join 쿼리를 작성한다SELECT customer.customer_id, first_name, last_name, amount, payment_dateFROM customerINNER JOIN payment ON payment.customer_id = customer.customer_idORDER BY payment_date; 위에서 보는것과..
[SQL] 집계함수 - ROLLUP, CUBE, GROUPING SETS
GROUP BYSELECT 상품ID, 월, SUM(매출액) AS 매출액FROM 월별매출GROUP BY 상품ID, 월;ROLLUP소그룹간의 합계를 계산하는 함수다. 이를 사용하면 GROUP BY로 묶은 각각의 소그룹 합계와 전체 합계를 모두 구할 수 있다.SELECT 상품ID, 월, SUM(매출액) AS 매출액FROM 월별매출GROUP BY ROLLUP(상품ID, 월);NULL값으로 표시된 부분들이 ROLLUP을 써서 나온 합계다GROUP BY ROLLUP(컬럼1, 컬럼2)=GROUP BY 컬럼1, 컬럼2UNION ALLGROUP BY 컬럼1UNION ALL모든 집합 그룹 결과CUBE항목들 간의 다차원적인 소계를 계산한다. ROLLUP과 달리 GROUP BY절에 명시한 모든 컬럼에 대해 소그룹 합계를 계산..
[SQL] 윈도우 함수 (Window Function)
개념행과 행 간의 관계를 쉽게 정의하기 위해 만들어졌고 분석 함수나 순위 함수로도 알려져있다, 기존에 사용하던 집계 함수도 있고, 새로이 전용으로 만들어진 기능도 있으며 다른 함수와 달리 중첩해서 사용은 못하지만 서브쿼리에는 사용할 수 있다.종류1. 그룹 내 순위 (RANK): RANK, DENSE_RANK, ROW_NUMBER2. 그룹 내 집계 (AGGREGATE): SUM, MAX, MIN, AVG, COUNT (sql server는 OVER 절의 OREDER BY 지원 X)3. 그룹 내 행 순서: FIRST_VALUE, LAST_VALUE, LAG, LEAD (오라클에서만 지원)4. 그룹 내 비율 관련: CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT5. 선형 ..
[SQL] CHAR, VARCHAR 차이점
CHAR은 말 그대로 고정형이다ex) CHAR(8)로 선언 시 글자가 몇개가 됐건 8 바이트의 공간을 차지한다 VARCHAR은 반대로 가변형이기 때문에 길이에 따라 차지하는 용량이 달라진다ex) VARCHAR(8) 선언 시 글자를 한개를 넣으면 1바이트, 2개를 넣으면 2바이트 등등VARCHAR = variable + char CHAR은 경우에 따라 데이터가 낭비될 수 있지만 추후 연산이 필요없기 때문에 검색 속도 및 읽히는 속도가 VARCHAR 비해 빠르고 글자 수가 고정 되어있어 보다 효율적으로 관리할 수 있다는 장점이 있다.ex) 주민번호, 전화번호, 사원번호 등 VARCHAR은 입력받은 데이터의 크기가 작을 경우 그 크기만큼만 메모리를 차지하므로 사용량을 줄일 수 있다는 장점이 있다또한 VARCH..
[SQL] 계층형 쿼리 (START WITH, CONNECT BY)
개념테이블에 계층형 구조 즉, 수직적 구조가 존재할 때 이를 조회하기 위한 쿼리이다 회사 조직도를 예시로 들자면회사는 최상위 계층이고, 회사를 중심으로 개발부, 경영지원부, 영업부 세 부서로 나뉜다.계속해서 부서를 중심으로 하위 계층이 생성되어 있다고 가정하고 이를 테이블로 나타내면 아래와 같다 부서번호는 고유식별자로 Primary Key가 된다START WITH- 계층의 루트로 사용될 행을 지정한다.- 서브 쿼리를 사용할 수 있다.- 어떤 레코드를 최상위 레코드로 정할지 결정한다 SELECT * FROM EMP_TB START WITH 부서번호 IS NULL;CONNECT BY- 연결고리를 만든다- PRIOR 연산자로 계층구조를 표현할 수 있다- 서브쿼리를 사용할 수 없다 앞서 START WITH를 ..
[SQL] OVER절
테이블 정의 데이터는 아래와 같다쿼리문위 데이터에서 각 날짜별로 창고의 재고를 알기위해 필요한 데이터는 전체 합이 아닌 날짜별 누적합이다1번 행은 10월 1일까지의 합 SUM(1)2번 행은 10월 2일까지의 합 SUM(1, 2)3번 행은 10월 3일까지의 합 SUM(1, 2, 3) 이렇게 각 행별로 특정 기준에 따라 필요한 집합을 구해 함수를 적용하고 싶을 때 쓰는 구문이 OVER 절이다SELECT 번호 , 날짜 , 수량 , SUM(수량) OVER(ORDER BY 날짜) AS 재고FROM 창고 언뜻 GROUP BY랑 비슷하게 보이지만1) OVER절은 행과 행 간의 관계를 정의하는 함수인 WINDOW FUNCTION이며, 그룹을 지어주기보다는 행의 범위를 지정해준다2) GROUP BY절은 결과 행 개..
[SQL] TRIM
문자열의 양 끝단에서 공백 또는 지정된 문자열을 제거하고 반환한다 TRIM([[arg1], [arg2] from] arg3)arg1 : LEADING / TRAILING / BOTH, 생략될 경우 기본값은 BOTH이다arg2 : 제거할 특정 문자 또는 문자열 arg2가 생략되면 공백을 제거한다arg3 : 문자열값 또는 문자열형의 칼럼 예제1) 예제2) LEADING 예제3) TRAILING 예제4) BOTH 다음 SQL문들 중 실행결과가 다른 하나를 고르시오① SELECT TRIM(TRAILING '_' FROM '_ERROR_CODE_') AS RESULT FROM DUAL;② SELECT LTRIM('?_ERROR_CODE', '?') AS RESULT FROM DUAL;③ SELECT RTRIM(..
[SQL] NULL 관련 함수
NVL(arg1, arg2)첫 번째 인자가 Null이 아니면 첫 번째 인자를 그대로 반환하고 Null이면 두 번째 인자를 반환* SQL Server에서는 NVL 대신 ISNULL을 사용 arg1 : 칼럼 또는 표현식arg2 : 칼럼 또는 표현식, 단 arg1와 같은 데이터 타입을 가져야한다NULLIF(arg1, arg2)입력된 두 인자가 같으면 Null을 반환하고 다르면 첫 번째 인자를 반환 arg1 : 칼럼 또는 표현식arg2 : 칼럼 또는 표현식, 단 arg1와 같은 데이터 타입을 가져야한다COALESCE(arg1, arg2)입력된 인자를 순서대로 평가해 Null이 아닌 첫 번째 인자를 반환arg1 : 칼럼 또는 표현식arg2 : 칼럼 또는 표현식, 단 arg1와 같은 데이터 타입을 가져야한다 아래의..