2024. 9. 12. 15:37ㆍSQL
orderby
order by는 쿼리문중에 순서상 가장 마지막에 수행된다. 정렬을 수행하는 구문이기때문에 출력할 값들을 전부 고른 후에 어떻게 정렬할지 order by구문에서 정의되기때문이다.
order by가 생략될 경우에는 출력되는 컬럼들은 랜덤으로 정렬되어 출력된다
order by_오름차순
--order by--
--asc, desc--
select * from emp;
--select절의 맨 마지막에 작성--
select * from emp order by sal; --오름차순--
select ename, job from emp order by sal;
--select 절에 명시되지 않은 컬럼을 기준으로 정렬하는것도 가능함--
--이렇게 적을 경우 orderby가 항상 마지막에 실행되기 때문에--
--사원이름과 직업만 먼저 출력된다음에 월급기준으로 오름차순하는것--
select * from emp where deptno =30 order by sal asc;
오름차순의 경우 asc를 적어 사용하지만 order by의 디폴트 값이 오름차순으로 설정되어있기때문에 컬럼명만 적어도 오름차순으로 자동 정렬되어 출력된다.
order by_내림차순
select * from emp order by sal desc; --내림차순--
select ename, job, deptno from emp order by sal desc;
--내림차순의 경우 반드시 해당 기준 컬럼명뒤에 desc를 붙여야 한다--
내림차순의 경우 디폴트값으로 오름차순이 설정되어있기때문에 반드시 desc를 적어야한다.
order by_이중정렬
--이중 정렬--
select ename, job, sal, deptno from emp
order by deptno asc, sal desc;
--앞에 위치한 deptno를 먼저 작은 순서대로 정렬하고, 그 안에서 sal이 큰 순서대로 다시 정렬한다--
order by에서 이중정렬을 사용할 경우 order by뒤에 우선으로 정렬될 컬럼의 순서대로 적어준다.
위의 쿼리문의 경우에는 부서번호인 deptno를 오름차순 한 후에, 월급인 sal컬럼을 가장 큰 순서대로 정렬하고있다.
결과를 보면 쿼리문대로 번호는 가장 작은 번호인 10번부터 출력되었고, 부서별로 가장 큰 sal값부터 출력되었다.
order by_별칭 및 숫자 사용
select ename as e, job as j, sal as s, deptno as d
from emp
order by e,j,s desc, d;
select ename, job, sal, deptno from emp
order by 1,2,3,4 desc; --select에 나열된 순서대로 숫자표기 가능--
order by는 select보다 더 나중에 출력되기때문에 유일하게 별칭사용이 가능하며,
전체컬럼을 출력하는것이 아닌 경우, select 절에 나열된 컬럼의 순서대로 order by에서 숫자로도 사용이 가능하다.
order by_ 다른 연산자와 함꼐 사용하기 (간단활용)
--다른 연산자와 함꼐 사용하기--
select * from emp where job in ('CLERK','SALESMAN','ANALYST')
order by hiredate;
--직업이 'CLERK','SALESMAN','ANALYST'인 사람들중에--
--입사날짜가 가장 작은 순서대로 출력 --> 가장 일찍 입사한 사람순서대로--
order by를 where절과 함께 사용하거나 in연산자와 함께 사용하면 원하는 결과값을 더 깔끔하게 정리하여 볼 수 있다.
*특히 실무에서 날짜를 활용하여 쿼리문을 작성하는 경우가많으니, 날짜를 이용하여 연습하는것이 좋을듯!*
집계함수
집계함수는 sql을 활용하여 데이터 분석을 할때 가장 기본이 되며 가장 많이 사용되는 함수이다.
집계함수의 경우 count를 제외하고 당연히 숫자로 이루어진 컬럼에만 사용할 수 있다!
*집계함수는 null을 제외하고 계산된다*
집계함수_sum
--sum 합계--
select sum(sal) from emp;
select sum(comm) from emp;
select sum(sal), sum(comm) from emp;
select ename, sum(sal) from emp;--에러!--
sum은 전체합계를 하는 함수다. sum안에 전체합계를 보고싶은 컬럼을 삽입하면 해당 컬럼의 전체 합계를 보여준다.
전체합계를 출력하는것이기 때문에 단일 컬럼으로 출력된다. 이 때문에 다른 컬럼들과 함께 사용하게 되면 에러가 난다!
집계함수_count
--count 개수파악--
select count(*) from emp; --14--
select * from emp; --14개 행--
select count(comm) from emp; --null제외 값--
select count(comm) from emp where comm is null;
--count는 null로 이루어진 컬럼을 출력하게 되면 공집합이 아니라 0이 출력된다--
count는 해당 개수를 출력한다. count역시 null을 제외한 값을 반환하지만 count(*)의 경우 전체 컬럼을 보겠다고 입력했을 시
null이 없는 컬럼도 존재하기 때문에 null상관없이 전체 행갯수가 몇개인지 파악이 가능하다.
count경우 개수를 파악하는것이기때문에 문자형 컬럼 사용도 가능하다. count의 경우 null로만 이루어진 컬럼을 반환하게 될경우 공집합이 아닌 null이 반환된다. 위의 쿼리문의 경우 where 절을 이용하여 null값만 출력되도록 했다. count개수를 알려주는 함수인데, 위 쿼리문에서는 [그래서 where절로 제한한 행의 개수가 몇개인데?] 로 해석이 되기때문에 0이 출력되는것이다.
집계함수_avg
--avg 합계--
select avg(sal) from emp;
select avg(comm) from emp;
avg는 평균을 반환하는 함수이다. 마찬가지로 null을 제외하고 계산하기때문에 해당 컬럼에 null이 있다면 전체 수에서 나눠지는 값이 달라지기 때문에 이 점을 주의해야한다.
집계함수_min, max
select min(sal) from emp;
select max(sal) from emp;
select max(hiredate) from emp;
select min(hiredate) from emp;
select min(sal), max(comm) from emp;
min은 최소값을, max는 최대값을 반환한다. min, max로 날짜를 출력하는 경우, min은 가장 옛날 날짜를 max는 가장 최근 날짜를 반환한다.
집계함수와 where절 사용
--집계함수와 where절 함께 사용--
select sum(sal) from emp where sal >=3000;
--sal이 3000이상인 sal만 합계처리--
select count(job) from emp where job like 'S%';
--직업이름이 S로 시작하는 행의 수--
집계함수와 where절을 함께 사용하게 되면 where절 조건에 해당하는 값만 볼 수 있다.
집계함수와 같이 자주 사용되는 null치환 함수
--집계함수와 같이 사용되는 null치환함수--
--NVL(컬럼, 치환값)--
select round(avg(comm),2) from emp;
select round(avg(NVL(comm,0)),2) from emp; --사원 전체수 포함--
집계함수가 null을 제외하고 계산을 처리하기때문에 null값을 포함해야하는경우 원하는 값이 올바르게 출력되지 않을 수 있다.
이런경우 사용할 수 있는 함수가 NVL이다.
치환을 사용하지 않고 null값이 있는 comm의 평균을 구하게되면, not null끼리의 평균이기때문에 전체 사원의 평균 comm값이 되기 어렵다.
이런경우 NVL를 사용하여 comm이 null인 행들의 값을 0으로 치환하여 전체 사원수에서 값을 나눠 제대로된 평균값을 낼 수 있도록 할 수 있다.
학습일기
집계함수는 실무에서도 정말 많이, 자주 사용된다. 월별 전체 매출액, 매출평균 등 데이터분석을 함에 있어 가장 기초가 되는 이런 데이터 분석을 할때 제일먼저 사용이 된다. 그리고 실무에서는 정말 다양한 환경과 상황에 따라 어쩔수 없이 데이터에 null을 입력해야하는 경우가 많아, 집계함수를 사용할때 NVL 이외에도 다양한 null 치환 함수와 사용하는 경우가 대부분이라고 하니, 집계함수를 연습할때는 집계함수만 사용하여 코드를 짜는것이 아니라, 실무의 환경과 동일하게 null치환함수와 함께 사용할것!!
'SQL' 카테고리의 다른 글
SQL (시퀀스와 제약조건, 식별자, 비식별자) (0) | 2024.09.13 |
---|---|
SQL 그룹함수(group by, grouping, rollup,cube)와 having (0) | 2024.09.12 |
SQL dual 테이블과 연산자와 where절 (0) | 2024.09.12 |
SQL 데이터베이스 다루기_[alter,별칭] (0) | 2024.09.11 |
SQL 데이터베이스 다루기_[오라클 테이블 생성, 변경, 삭제] (0) | 2024.09.11 |