본문 바로가기

Oracle/SQL

(98)
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으로 치환하여 출..
SQL 단일행 함수 -변환함수 (to_number) , 암시적 형 변환 TO_NUMBER (숫자형으로 변환) 만약, sal(월급) 컬럼이 to_char 인 문자형으로 되어있다면? select ename, sal from emp where sal = 3000 ; 을 출력한다면 오라클의 암시적 형변환으로 인해 출력은 된다. 하지만 제대로된 오라클의 성능을 위해서는 select ename sal, from emp where to_number(sal) = 3000; 이렇게 sal 을 숫자형으로 바꾸어서 출력해 주어야한다 - 지금의 예시는 설명을 위한 예시일뿐 컬럼에 가공(tom_number으로 ) 을 하는 식은 좋지 않다. 암시적 형 변환 다음의 식은 SAl이 숫자형이다. select ename, sal from emp where sal = '3000'; 설명 : where 절에 ..
SQL 단일행 함수 -변환함수 (To_date) 날짜형으로 변환 To _date (날짜형으로 변환), 나라마다 날짜형이 다르기 때문에 해당함수가 쓰인다. 내가 어떠한 환경에 있던 (나라 상관없이) 정확하게 81년 11월 17일에 입사한 사원의 데이터를 오류없이 검색하는 방법 년 월 일 모두를 출력 하는 경우에만 쓰일 수 있는 함수이다. 예제 : 이름과 입사일을 뽑는데 91년 11월17 일 인 사람들을 출력해라. select ename, hiredate from emp where hiredate = to_date ( '91/11/17', 'RR/NN/DD'); 설명 : 확실하게 날짜를 검색하는 방법이다. where 절에 where hiredate = '81/11/17' 도 검색이 되긴 한다. but 다른 환경(다른나라) 가면 오류가 뜰 수 있다는점 문제 : 81년도에 ..
SQL 단일행 함수 -변환함수 (To_char) 문자형으로 변환 변환함수 (데이터 유형을 변환하는 함수 ) 데이터 유형 : 문자형, 숫자형, 날짜형 to_char : 문자형으로 변환하는 함수 to_number : 숫자형으로 변환하는 함수 to_date : 날짜형으로 변환하는 함수 날짜를 문자로 출력할때 사용할 수 있는 날짜 포맷 RRRR, YYYY : 년도 4자리 RR, YY : 년도 2자리 MM, MON : 달 DD : 일 DAY, DY, D : 요일 WW, IW : 주 HH, HH24 : 시간 MI : 분 SS : 초 RR 과 YY 의 차이점 RR 1981 현재 연도에서 가장 가까운 연도로 인식 YY 2081 현재 세기로 인식 —>2050 년 이되면 ? ㅋㅋㅋ 오라클에서 해결방법을 준다고함 ! 오라클 날짜 형식을 살펴보면 대부분 한국에서는 RR/MM/DD 로 되어..