반응형
1. 윈도우 함수(Window Function): 여러 행 간의 관계 정의 함수, 중첩 불가
RANK(): 중복 순위 포함
SELECT cost_center, RANK() OVER (ORDER BY cost_center DESC) AS rk
FROM employees;
DENSE_RANK(): 중복 순위 무시
SELECT cost_center, DENSE_RANK() OVER (ORDER BY cost_center DESC) AS rk
FROM employees;
2. 윈도우 함수 문법
PARTITION BY: 그룹핑 기준
SELECT deptno, ename, sal,
RANK() OVER (PARTITION BY deptno ORDER BY sal DESC ) as rk
FROM emp ;
3. 서브쿼리 다중행 비교 연산자
WHERE EXISTS: 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건
상관 서브쿼리의 칼럼을 테이블 별칭으로 한정하지 않으면, 서브쿼리 테이블의 칼럼을 우선적으로 검색한다. 즉 아래에서 dname은 dept 테이블의 dname 컬럼이라고 인식하게 된다. 따라서 X.dname = dname 조건은 항상 True기 때문에 emp 테이블의 전체 행이 반환된다.
SELECT *
FROM emp A
WHERE EXISTS (SELECT 1
FROM dept X
WHERE X.dname = dname);
# 서브쿼리의 SELECT 1은 단순히 값이 존재하는지를 알려주는 지표일뿐, 숫자 1은 아무 의미가 없다
# 1 대신 0, 2 등으로 해도 무방하다
4. LPAD(), RPAD() 함수
LPAD: 지정한 길이만큼 왼쪽부터 특정한 문자로 채운다
LPAD("값", "총 문자길이", "채움문자")
SELECT empno
,ename
,deptno
,LPAD(deptno, 5) --1 # 채움문자를 지정하지 않으면 디폴트값은 공백
,LPAD(deptno, 5, ' ') --2
,LPAD(deptno, 5, '0') --3
,LPAD(deptno, 5, 'A') --4
FROM emp;
RPAD: 지정한 길이만큼 오른쪽부터 특정한 문자로 채운다
RPAD("값", "총 문자길이", "채움문자")
SELECT empno
,ename
,deptno
,RPAD(deptno, 5) --1
,RPAD(deptno, 5, ' ') --2
,RPAD(deptno, 5, '0') --3
,RPAD(deptno, 5, 'A') --4
FROM emp;
728x90
반응형
'문돌이 존버 > DB 및 SQL 스터디' 카테고리의 다른 글
Postgresql HAVING 조건절 사용하기 (0) | 2021.04.07 |
---|---|
SQLD NOT EXISTS(), 집합연산자, ROLLUP(), CUBE() 예제 (0) | 2021.03.06 |
SQLD ROWNUM, LIKE, UNION, INTERSECT, MINUS 예제 (0) | 2021.02.27 |
MySQL 언어 설정(charset) 변경하기! (0) | 2021.02.20 |
Postgresql VIEW 사용해보기 (0) | 2021.02.17 |