본문 바로가기

Oracle

(101)
SQL 다중행 함수 - 그룹함수 (Count) 건수 COUNT (건수를 세는 함수) count 또한 그룹함수이기때문에 null 값을 무시하고 계산해 준다. → null 값이 없는 컬럼을 기준으로 count 를 해주어야한다. → 만약 null값이 있는 컬럼으로 count 하게 되면 누락 된다. null 값을 세지 않기 때문. 그래서 제일 확실한 방법은 모든 컬럼 (*) 을 선택하면 확실하다. select count(*) from emp; 문제 : 직업이 세일즈 맨인 사원들이 몇명? select count(*) from emp where job = 'SALESMAN'; → 웬만하면 * 을 쓰자!! 문제 : 우리반 통신사가 lg 인 학생들은 전부 몇명인지 카운트 출력 select count(*) from emp14 where lower(telecom) = 'l..
SQL 다중행 함수 - 그룹함수 (SUM) 토탈값 SUM (토탈값) GROUP 함수의 특징 : null 값을 무시한다. 예제 : 커미션의 토탈값을 출력 select sum(comm) from emp; or select sum(nvl (comm,0)) from emp; → 두개의 sql 중 속도가 빠른 sql 은 무엇인가? 첫번째 sql 이 속도가 더 빠르다. NULL 값을 무시하고 계산하기때문에 식이 줄어든다. 두번째 sql 은 null 값이 0으로 치환되어 sum 연산에 포함되어있다. 따라서 만약 데이터가 1억개 넘는다고 하면 0 을 더하는 식이 있기 때문에 연산시간이 너무 늘어나게 된다. 문제 : 직업 , 직업별 토탈월급을 출력 , 직업별토탈월급이 높은 순으로 출력 select job, sum(sal) from emp group by job orde..
SQL 다중행 함수 - 그룹함수 (AVG) 평균값 구하기 AVG (평균 출력) → 만약 출력했을때 소수점이 너무많아서 안나오게 하고싶다면 round 둘러준다. 특징 NULL 값이 있을 경우 avg 는 계산할때 NULL 값을 빼고 계산한다. → 그룹함수의 특징이다. 예제 : 우리반 테이블에서 평균 나이를 출력하세요 select round(avg(age),1) from emp14; 문제 : 직업, 직업별 평균월급 출력 select job, round( avg(sal)) from emp group by job; 문제 : 커미션을 다 더해서(null 포함) 전체 사원수로 나누게 하려면 ? select avg(nvl(comm,0)) from emp; 설명 : null 값을 0으로 치환하여 평균값을 출력한다. 문제 : class_type , class_type별 평균나이..
SQL 다중행 함수 - 그룹함수 (MIN) 최소값 MIN (최소값 출력) min 만 출력한다면 GROUp by 절은 필요없다. 하지만 다른 컬럼과 함께 Min 의 값을 도출하려면 GROUP by 절을 꼭 사용해주어야 오류 없이 출력된다. 예제 : 부서번호가 20번인 사원들의 최소월급 select min(sal) from emp where deptno = 20 ; 문제 : 직업, 직업별 최소월급 출력 , 직업을 abcd 순으로 출력 select job, min(sal) from emp group by job order by job asc; 문제 : 부서번호, 부서번호별 최소 월급을 출력 부서번호별 최소월급이 낮은것부터출력 select deptno, min(sal) from emp group by deptno order by 2 asc; 문제 : 입사년도(..
SQL 다중행 함수 - 그룹함수 MAX (최대값) 다중행 함수??? —> 함수 —> 함수 —> —> 함수 여러개의 함수가 입력되어서 하나의 행으로 출력 되어지는 함수 → 그룹함수는 NULL 값을 무시합니다. 그룹함수를 사용하려면 GRoup by 절을 사용해야한다. MAX (최대값 출력하기) 예제 : 사원 테이블에서 최대 월급만 출력 select max(sal) from emp; 문제: 직업이 세일즈 맨 인 사원들 중에 최대월급 select max(sal) from emp where job = 'SALESMAN'; 옆에 세일즈맨이 뜨도록 select job, max(sal) from emp where job = 'SALESMAN'; → 이렇게 하면 에러가 난다 이유는?단일그룹의 그룹함수가 아니다! 마지막 실행이 select 절이 마지막 이기때문에 wher..
SQL 단일행 함수 - 일반함수 ( case when ~ then~ else~end as ) 파생컬럼생성 case when~ then~ else~end as절 (if 문 ) 부등호 ,= 비교가 모두 가능하다 decode 는 = 부등호 비교만 가능했음! 예제 : 이름, 월급, 보너스를 출력하는데 월급이 3000 이상이면 보너스를 9000을 출력하고 월급이 3000보다 작으면 0을 출력하시오 select ename, sal, case when sal ≥3000 then 9000 else 0 end as 보너스 from emp; 문제 : 직업이 세일즈맨, 어널리스트인 사원들의 이름 직업 월급 보너스를 출력 월급이 3000 이상이면 보너스를 500, 2000 이상이면 보너스를 300 월급이 1000 이상이면 보너스 200 나머지는 0을 출력한다. select ename, job, sal, case when sal ..
SQL 단일행 함수 - 일반함수 ( Decode ) decode (if 문으로 구현 하고 싶을때) = (부등호) 비교만 가능하다. decode 의 뜻 : 코드가 없고, sql 함수로만 구현하겠다. 없는 컬럼을 기존에 있던 컬럼들을 조합하거나 연산자 식을 이용하여 컬럼을 새로 생성해주는것 (파생컬럼생성) 라고 생각하면된다. 예제 : 이름, 부서번호, 보너스 출력 , 보너스가 부서번호 10이면 300, 20이면 400 나머지 부서번호는 0 으로 출력 보너스 라는 컬럼은 없는데 새로운 데이터를 위해 생성하여 출력해야하기때문에 →파생변수 (= 파생컬럼) 이라고 칭한다. 예를 들자면 학생들이 이해하기 쉽게 책의 내용을 요약한다거나 한다는 의미 emp 테이블에서 보너스라는 컬럼을 만들어 내려면 decode 라는 함수를 사용해야한다. select ename, dept..
SQL 단일행 함수 - 일반함수 (NULL 을 처리하는 NVL, NVL2) 일반함수 NVL, NVL2 (null 값 대신 다른 데이터 출력 하기) 결측치를 다른값으로 치환하는 함수 (머신러닝 할때 굉장히 중요한 함수 중 하나) null 은 어떤것과 더하더라도 출력 되는 값은 null 이 되기때문에 꼭 null은 다른값으로 치환해 주어야 계산이 원활하게 이루어 진다. 예제 : 커미션값이 null 인 사람들의 이름과, 월급과 커미션 출력 select ename, sal, comm from emp where comm is null; 설명 : 만약 데이터가 많다면 , 이게 일부러 null 값인지, 실수로 넣지 않은건지 헷갈릴 수 있기 때문에, null 값을 0으로 치환해 주는 과정을 하는것이 좋다. 예제 : 이름과, 커미션 출력 하는데 커미션이 null 인 사원들은 0으로 치환하여 출..