서브쿼리
또 하나의 테이블
(SELECT문의 결과)
서브쿼리는 메인쿼리 사용가능
메인쿼리에서는 서브쿼리 사용 불가
메인이 서브쿼리보다 먼저 실행되기 때문
- 연관 서브쿼리
- 메인쿼리의 컬럼을 서브쿼리에서 사용
- 비연관 서브쿼리
- 메인쿼리의 컬럼을 서브쿼리에서 사용하지 않음
종류
- 스칼라 서브쿼리
- SELECT 문의 칼럼 입력 위치
- 인라인 뷰
- FROM 절의 테이블 입력 위치
- 동적으로 테이블 생성
- 중첩 서브쿼리
- WHERE, HAVING (조건절)의 칼럼 또는 테이블 입력 위치
그룹함수
GROUP BY 절에 따른 경과에 대해서 그룹 별로 연산을 수행하는 함수
집계함수 외에 ROLLUP, CUBE, GROUPPING SETS
소계란
if CYL 4, 6, 8 이 있으면
4의 총계수
6의 총계수
8의 총계수
를 소계라 한다.
- ROLLUP
- ROLLUP (CYL, GEAR)
- cyl과 gear의 조합별 집계
- cyl에 대한 소계 (gear를 무시한 부분 합계)
- 전체 행에 대한 합계 (cyl과 gear 모두 무시)
- GROUPING SETS(CYL, GEAR, (CYL), ()) 같은 의미
- ROLLUP (CYL, GEAR)
- CUBE
- CUBE (CYL, GEAR)
- cyl과 gear의 조합별 집계
- cyl 값에 대한 전체 gear의 소계 (gear 무시)
- gear 값에 대한 전체 cyl의 소계 (cyl 무시)
- 전체 cyl과 gear의 합계 (모든 값 무시)
- 만들 수 있는 가능한 모든 그룹 조합에 대해 합계와 부분 합계(소계)를 제공
- GROUPING SETS(CYL, GEAR, (CYL, GEAR), ()) 과 같은 의미
- CUBE (CYL, GEAR)
- GROUPPING SETS
- GROUPPING SETS(CYL, GEAR)
- CYL 소계
- GEAR 소계
- GROUPPING SETS(CYL, GEAR)
윈도우 함수
순위함수
- RANK
- 1, 2, 2, 4, 4, 4, 7, ......
- DENSE_RANK
- 1, 2, 2, 3, 3, 3, 4, ......
- ROW_NUMBER
- 1, 2, 3, 4, 5, 6, 7, ......
SELECT RANK() OVER(ORDER BY COUNT(*) DESC)
PARTITION도 가능
집계함수
SELECT MAX(SALARY) OVER(PARTITION BY JOB)
ORDER BY 도 가능
JOB 컬럼 그룹바이한 후 MAX 값 추출
Top N 쿼리
ROWNUM 함수
행에 순차적인 번호를 붙여주는 함수
중간에 값을 건너뛰고 가져올 수 없음
WHERE 절에서 사용
WHERE = ROWNUM <= 5; -> 1~ 5
WHERE = ROWNUM = 5; -> 아무런 결과를 가져오지 못함
PIVOT / UNPIVOT
정규표현식
메타 문자
[] 대괄호 안에 있냐 없냐에 따라 의미가 달라짐
- \
- \n 줄바꿈
- ^
- ^The: The로 시작하는 문자열
- $
- $ing: ing로 끝나는 문자열
- .
- 임의의 한 문자
- a.b: acb, a-b, a1b
- ?
- 선행문자 0 or 1
- no?: n, no
- ? 앞 문자가 있냐 없냐
- *
- 선행문자 0 개 이상
- no*: n, no, noooooo...
- +
- 선행 문자 1개 이상
- no+: no, nooooooo...
- |
- 선택적 일치
- a|b: a, b
- []
- 대괄호 안의 문자들 중 하나와 일치
- [abc]: a, b, c
- [-]
- 연속 문자의 범위 지정
- [a-b]: a~z
- [^]
- 대괄호 안의 문자들을 제외한 나머지 문자들 중 하나와 일치
- [^abc]: a, b, c를 제외한 나머지 문자
- ()
- 한 단위로 취급
- (ab): ab
Oracle의 정규표현신
- REGEXP_LIKE
- LIKE 연산
- REGEXP_REPLACE
- 문자열 대체
- REGEXP_INSTR
- 문자열 검색 후 위치 반환
- REGEXP_SUBSTR
- 부분 문자열 반환
- REGEXP_COUNT
- 특정 패턴의 문자열 개수 반환
COL1 | COL2 |
AA | 1 |
AA | 1 |
AA | 2 |
BB | 2 |
BB | 3 |
SELECT COUNT(COL1), COUNT(COL2)
FROM (SELECT DISTINCT COL1, COL2
FROM TBL);
DISTINCT 는 행 기준으로 중복 처리
답 4, 4
'SQL' 카테고리의 다른 글
SQLD 마무리 (1) | 2024.11.12 |
---|---|
sqld 공부 ( 2 과목 : 관리구문 ) (0) | 2024.11.10 |
sqld 공부 ( 2 과목 : SQL 기본 ) (1) | 2024.11.03 |
sqld 공부 ( 1 과목 : 데이터 모델링의 이해 ) (4) | 2024.11.02 |