본문 바로가기

전체 글

(144)
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 로 되어..
SQL 단일행 함수 - 날짜함수 날짜함수 months_between : 날짜와 날짜 사이의 개월수를 출력 add_months : 날짜에서 개월수를 더한 날짜를 출력 last_day : 특정 날짜의 달의 마지막 날짜를 출력 next_day : 해당날짜의 달에서 앞으로 돌아올 특정 요일의 날짜를 출력 오늘 날짜 출력 하기 (sysdate) select sysdate from dual; 예제 : 내일 날짜 select sysdate + 1 from dual; 날짜 - 날짜 = 숫자 (날짜에서 날짜빼면 그사이의 며칠인지를 뽑는것이기 때문에 날짜가 뽑히는게 아닌 숫자가 뽑힌다.) 날짜 + 숫자 = 날짜 날짜 - 숫자 = 날짜 (months_between) (날짜 사이의 달 구하기) 예시 : 오늘 날짜에서 입사일을 빼보세요 select sysda..
SQL 단일행 함수 - 숫자함수 (Round, Trunc, Mod)반올림, 숫자버리기, 나누기 숫자함수 ROUND (반올림 하여 출력) 예제 : 876.567 소수점 두번째 자리인 6에서 반올림 해서 출력 select round(876.567, 1) from dual; 두번째 자리에서 반올림하면 소수점 첫번째 자리 값만 출력되기 때문에 1 이다. 0 은 = '.' 의 자리수를 의미한다 round(숫자, 0 ) 의 0 은 쓰나, 안쓰나 같은 값이 나온다. 문제 : 우리반 테이블에서 나이를 출력하는데 , 일의 자리에서 바로 반올림 select round(sal, 2) from emp; Trunc (숫자를 버리고 출력하기) 예제 : 876.567 출력, 소수점 두번짜자리인 6과 그 이후 숫자를 모두 버리고 출력 select trunc(876.567, 1) from dual; 설명 : 소수점 이후는 지정..