ㅁ DB 그룹함수와 서브쿼리
SELECT절에 사용하는 그룹함수 AVG, COUNT, MAX, MIN,SUM등
--AVG, SUM은 숫자값에만 사용가능 (산술연산)
--MIN과 MAX는 모든 데이터 값에 사용가능함
함수 (distinct / all 표현식 )
그룹함수는 null값을 무시함 (자동으로 빼버림)
--함수 >> 값을 받아 진행되는 것
그래서 값이 없는 null을 빼버림
따라서 앞에 nvl을 넣어 지정값을 0으로 해줘야 함
--ex) select avg(commission_pct)가 아닌
select avg(nvl(commission, 0)pct))
-- group by 를 통해 소그룹을 만들 수 있음 >> 똑같은 애들을 그룹화해서 묶어주는것
select절에 있는 컬럼 중 그룹함수에 없는 컬럼은 다 group by절에 포함시켜야 함
따라서 pk는 중복이 없으므로 그룹화가 의미가 없음
ㅁ 서브쿼리 구문
특정값을 몰라 여러 개의 질문이 필요할때 사용하는 구문 (비교할때 숫자면 숫자, 글자면 글자끼리 비교해야 함)
>> Abel보다 월급이 높은 사람을 출력하시오
ㄴselect last_name, salary
from employees
where salary (select salary
from employees
where last_name = 'Abel')
group by를 제외한 모든 절에 들어갈 수 있음
--where 컬럼의 조건 안에 들어가는 서브쿼리 >> 조건식의 값으로 사용됨
--having 그룹화의 조건 안에 들어가는 서브쿼리 >> 조건식의 값으로 사용됨
1. 특정값을 모를때(Abel의 급여) 서브쿼리 사용하자
2. 무슨 값을 모르는지 찾자(Abel의 급여)
3. 모르는 값을 서브쿼리를 통해 찾자ㅣ
--모르는 값을 서브쿼리의 어떤 칼럼으로 찾을지 결정 (select salary)
4. 서브쿼리가 넘겨주는 값을 메인쿼리의 어떤 컬럼이 받을지 결정 (where salary)
--대부분의 서브쿼리의 컬럼과 메인쿼리의 컬럼은 같은 경우가 대부분임
5. 서브쿼리의 결과가 하나인지 여러 개인지에 따라 사용할 연산자(=,in등등)을 결정하자
--넘겨주는 값과 받아주는 값의 데이터 타입만 같으면 됨
다중행 서브쿼리일 경우 연산자가 단일행일때와 다름
--(ex)서브쿼리 값이 30,40일떄
table 연산자 결과
------- ---------- --------------
10 in (30,40) = 30, 40의 값
20 > all = 40보다 큰값 50, 60
30 < all = 30보다 작은값 10,20
40 > any = 최소값 30보다 큰값 40,50,60
50 < any = 최대값 40보다 작은 값 10, 20, 30
60
서브쿼리를 create table를 만들때나, insert 를 이용할때 사용할 수도 있다
'Oracle' 카테고리의 다른 글
Oracle (6) - DB 트랜잭션과 DML명령어 ( insert, update, delete ) (0) | 2022.06.08 |
---|---|
Oracle (5) - DDL명령어 (테이블 만들기, 데이터 삽입하기 등) (0) | 2022.06.07 |
Oracle (4) - DB 조인에 관하여 (0) | 2022.06.03 |
Oracle (2) - Table에 있는 Column의 예시, SELECT절을 포함한 실행순서, 연산자 모음 (0) | 2022.06.02 |
Oracle (1) - 개념 정리 (0) | 2022.05.31 |