조건문
Decode
- select decode(col1,'A',1,'B',2,3) from dual; (col이 A면 1, B면 2, 아니면 3)
case
- case when col = 'A' then 1
when col = 'B' then 2
else 3 end;
- case col when 'A' then 1
when 'B' then 2
else 3 end;
집계함수
- Count, min sum, max 등
- null은 포함되지 않음
- (1, null, 2, 3, null) 의 데이터를 기준으로 결과는 다음과 같음
- Count() : 3
- Sum() : 6
- Avg() : 2
- Min() : 1
- Max() : 3
Col1 | Col2 | Col3 |
null | null | 1 |
2 | 3 | 2 |
1 | null | null |
- Select sum(col1 + col2 + col3) from dual; => null + 7 + null = 7 출력
- sum(col1) + sum(col2) + sum(col3) => 3 + 3 + 3 = 9 출력
그룹바이 group by
- 집약기능 가짐 (다수의 행을 하나로 합침)
- Group by 절에 온 컬럼만 select 절에 올 수 있음
join
Natural join
- 반드시 두 테이블 간 동일한 이름, 타입 가진 컬럼 필요
- 조인에 이용되는 컬럼은 명시하지 않아도 자동으로 조인에 사용
- 동일한 이름 갖는 컬럼 있지만 데이터 타입 다르면 에러 발생
- 조인하는 테이블 간 동일 컬럼이 SELECT 절에 기술되도 테이블 이름 생략해야 함
- select department_id 부서, department_name 부서이름, location_id 지역번호, city 도시
from departments
natural join locations
where city = 'Seattle';
Using
- USING 절은 조인에 사용될 컬럼 지정함
- NATURAL 절과 USING 절은 함께 사용할 수 없음
- 조인에 이용되지 않은 동일 이름 가진 컬럼은 컬럼명 앞에 테이블명 기술
- 조인 컬럼은 괄호로 묶어서 기술
- select department_id 부서번호, department_name 부서, loaction_id 지역번호, city 도시
from departments
join loactions using (location_id);
left outer join
- from table a left outer join table b
on a.col = b.col
- from table a, table b
where a.col = b.col(+) (오라클 sql 문법)
join 순서
- from a,b,c (a와 b가 join되고, 그리고 c와 join됨)
서브쿼리
- Select : 스칼라 서브쿼리
- From : 인라인뷰 (메인 쿼리 컬럼 사용 가능)
- where : 중첩 서브쿼리
- Group by : 사용 불가
- Having : 중첩 서브쿼리
- Order by : 스칼라 서브쿼리
- In : 서브쿼리 출력값들 or 조건
- Any/some : 서브쿼리 출력값들 중 가장 작거나 큰 값과 비교
- All : any/some 과 반대 개념
- Exists : 서브쿼리내 select 절엔 뭐가 와도 상관 없음. Row 있으면 true, 없으면 false
집합연산자
- Union : 정렬O, 중복제거O, 느림
- Intersect : 정렬O, 교집합, 느림
- Minus (except) : 정렬O, 차집합, 느림
- Union all : 정렬X, 중복제거X, 빠름
DDL
- Truncate : drop & create, 테이블 내부 구조는 남아 있으나 데이터가 모두 삭제됨
- Drop : 테이블 자체가 없어짐 (데이터도 없어짐)
- Delete : 데이터만 삭제
- Rollback : commit이랑 항상 같이 나옴
DML
- Insert : 데이터 넣는 명령, insert into 테이블 (col1, col2, col3...) values ('11', '22', '33'...);
vlaues 기준으로 좌우 괄호 속 개수 맞아야 함
- update : 데이터 특정 행의 값을 변경 (delete & insert)
update 테이블 set col = '값' where col1 = '조건';
- delete : 데이터 특정 행 삭제
delete from 테이블 where col = '조건';
- merge : 특정 데이터 넣을 때 해당 테이블 키값을 기준으로 있으면 update, 없으면 insert 함\
제약조건
- PK : not null + unique
테이블 당 하나의 PK 가질 수 있음 (복합키 가능)
- Not null : 해당 컬럼에 null 올 수 없음
- Unique : 해당 컬럼에 중복값 올 수 없음
DCL
- GRANT 시스템 권한명 [, 시스템 권한명 .... | 롤명] TO 유저명 [, 유저명... | 롤명... | PUBLIC | [WITH ADMIN OPTION];
- REVOKE { 권한명 [, 권한명...] ALL} ON 객체명 FROM {유저명 [, 유저명...] | 롤명(ROLL) | PUBLIC} [CASCADE CONSTRAINTS];
- Role은 객체
VIEW
- 독립성, 편의성, 보안성
- SQL 저장하는 개념
그룹함수
- roll up (순서 중요)
- cube (순서 상관 X)
- groupingsets
- grouping
ROLLUP
- GROUP BY에 있는 컬럼들을 오른쪽에서 왼쪽으로 그룹 생성
- a, b로 묶이는 그룹의 값
- a로 묶이는 그룹 소계
- 전체 합계
CUBE
- 나올 수 있는 모든 경우의 수로 그룹 생성
- a, b로 묶이는 그룹의 값
- a로 묶이는 그룹의 값
- b로 묶이는 그룹의 소계
- 전체 합계
rollup(A,B) != rollup(B,A), cube(A,B) = cube(B,A)
TCL
- Commit, rollback
- Auto commit, begin transaction (commit 기능 잠시 끄기) end
윈도우 함수
- rows between and 값 증가
- rows between UNBOUNDED PRECEDING and CURRENT ROW) as "직업별 합계";
- rows between 1 PRECEDING and 1 FOLLOWING) as "위아래합계";
- range between and 값 동일
1. UNBOUNDED PRECEDING : 최종 출력될 값의 맨 처음 row 값 (Partition by 고려)
2. CURRENT ROW : 현재 row 값
3. UNBOUNDED FOLLOWING : 최종 출력될 값의 맨 마지막 row 값 (Partition by 고려)
- Rank : 1, 1, 3, 4... (동률있을 시 건너뜀)
- Dense_rank : 1, 1, 2, 3... (건너뛰는것 없음)
- Partition by, order by
Row_number() over (partition by col1 order by col2)...
계층형 함수
- prior 자식데이터 = 부모데이터
- 부모데이터에서 자식데이터로 가면 순방향
- 순방향 : SELECT LEVEL,
LPAD(' ', 4 * (LEVEL - 1)) || 사원 사원,
관리자,
CONNECT_BY_ISLEAF ISLEAF
FROM 사원
START WITH 관리자 IS NULL
CONNECT BY PRIOR 사원 = 관리자;
- 역방향 :SELECT LEVEL,
LPAD(' ', 4 * (LEVEL - 1)) || 사원 사원,
관리자,
CONNECT_BY_ISLEAF ISLEAF
FROM 사원
START WITH 사원 = 'D'
CONNECT BY PRIOR 관리자 = 사원;
'Study > SQLD' 카테고리의 다른 글
[SQLD] SQLD 2과목 SQL 기본 및 활용(1) (0) | 2025.05.16 |
---|---|
[SQLD] SQLD 1과목 데이터 모델링의 이해 (2) (3) | 2025.05.15 |
[SQLD] SQLD 1과목 데이터 모델링의 이해 (1) (2) | 2025.05.14 |
[SQLD] 핵심요약 (3) (0) | 2025.05.12 |
[SQLD] 핵심요약 (1) (0) | 2025.05.12 |