본문 바로가기

SQL

(21)
SQL [12] - SELF JOIN 조인되는 테이블이 같은 경우를 SELF JOIN이라고 합니다. 테이블 명에 반드시 알리아스(별명)을 지정해야 합니다. (같은 테이블이라서 구문 내에서 구분해주어야 합니다.) 조회되는 모든 컬럼도 테이블의 별명을 붙여야 합니다. 예제들을 보며 셀프 조인의 적용 사례를 확인해봅니다 -- Quiz. dept2 테이블에서 부서코드와 상위부서코드, 부서명 그리고 상위부서명을 출력하기 -- 단 모든 부서가 나와야함 select * from dept2; dept2의 테이블의 DCDOE는 부서 코드, PDEPT는 해당 부서의 상위 부서의 부서 코드를 뜻합니다. 우리가 원하는 결과 값은, DNAME(부서명)에 해당하는 상위 부서의 이름을 재 출력하여 조회하는 것이기 때문에, PDEPT를 이용하여 해당하는 DCODE를 조..
SQL [11] - JOIN(Cross, Equi, non-Equi, Outer) SQL JOIN이란, 두 개의 다른 테이블의 데이터들을 하나의 테이블로 조회하는 기능이다. 여러가지 환경에 따라서, 정의과 기능이 달라진다. 1. Cross (카티션 곱) 두개의 카티션 곱, Cross Join 두 개의 조회된 레코드 수의 곱의 갯수로 레코드가 조회됨 조회되는 레코드의 갯수가 곱의 갯수이므로 사용시 주의해야함 구문 1. 오라클 방식 : SELECT 컬럼들 또는 *(모든 컬럼) FROM 테이블1, 테이블2; 2. ANSI (표준) 방식 : SELECT 컬럼들 또는 *(모든 컬럼) FROM 테이블1 CROSS JOIN 테이블 2; select * from emp; select * from dept; 오라클 방식 : select * from emp, dept order by empno; ANS..
SQL [10] - LAG, LEAD, RANK OVER, SUM OVER, LISTAGG 1. lag(컬럼명, offset, 기본값) over (정렬방식). 정렬 방식에 따른 이전 항목 조회 select name, hiredate, pay, lag(pay,1,0) over (order by hiredate) from professor ; 마지막 컬럼은 이전 행의 PAY값을 출력하고 있다. 2. lead(컬럼명, offset, 기본값) over (정렬방식). 정렬 방식에 따른 이후 항목 조회 select name, hiredate, pay, lead(pay,1,0) over (order by hiredate) from professor ; 마지막 컬럼은 다음 행의 PAY값을 출력하고 있다. 3. rank 함수 : 순위 지정 함수 -- rank (값) within group (정렬 방식) : 정..
SQL [9] - GROUP BY와 HAVING (+ ROLL UP, GROUPING SET) 1. Group by : 컬럼을 기준으로 레코드를 그룹화 하기 위한 조건 복수행(그룹) 함수 : 여러행에 대한 정보를 조회하는 함수 예를 들면 학생 테이블에는 학년(grade)이 1,2,3,4학년으로 총 4가지가 있고 총 20명의 학생이 있습니다. student 테이블의 총 행의 수를 구하고 싶으면 count함수를 이용하면되고, 평균 몸무게를 구하고 싶으면 avg(weight)를 이용하면 됩니다. select count(*) from student ; select avg(weight) from student ; count나 avg와 같은 복수행 그룹 함수는 요약 값을 보여주는 함수이기 때문에, 일반적으로 select * from student; 처럼 여러 줄의 리스트 행을 출력하는 구문과 동시에 쓰일 수..
SQL [8] - NVL, DECODE, CASE 조건에 따른 치환 함수 1. NVL / NVL2 (1) NVL -- nvl : null 값을 다른 값으로 치환하는 함수 -- nvl(컬럼명, 치환값) Quiz. 보너스 값이 null인 값을 0으로 치환하여 출력하기 select name, bonus from professor; select name, nvl(bonus,0) from professor; Quiz. 학생의 이름과 지도 교수 번호 출력하기. 단 지도 교수가 없는 학생의 지도 교수 번호는 9999 select name, nvl(profno,'9999') from student; (2) NVL2 -- nvl2(컬럼, null이 아닌 치환값, null인 치환값) Quiz. 교수의 이름 급여 보너스 연봉 출력하기. 연봉 : 급여*12+보너스, 보너스가 없으면 급여*13 계산..
SQL [7] - 형식 변환 (to_char, to_date, to_number) 1. 날짜나 숫자 값을 문자 값으로 변환해주는 함수 (1) 날짜 -> 문자 yyyy : 4자리 연도 yy : 2자리 연도 rrrr : 4자리 연도 (2000년 이후 y2k버그를 대비하여 추가된 형식) rr : 2자리 연도 (2000년 이후 y2k버그를 대비하여 추가된 형식) year : 영문으로 년도 표시 mm : 2자리 월 mon : 영문 월 약자 표시 (ex. JAN, FEB, MAR, ...) month : 영문 월 전체 표시(ex. January, February, March, ...) dd : 2자리 일 day : 요일 ddth : 몇번째 날짜인지 표시 (서수 날짜) hh : 하루를 12시간으로 표시 (오전이든 오후든 8시) hh24 : 하루를 24시간으로 표시 (오전이면 8시 오후면 20시) ..
SQL [6] - 숫자 함수와 날짜 함수 1.round : 반올림 round(컬럼 또는 숫자, 표시되는 소숫점이하 자리수) select round(12.34567,2) from dual; 2.trunc : 버림 trunc(컬럼 또는 숫자, 표시되는 소숫점이하 자리수) select trunc(12.34567,2) from dual; 3. mod : 나머지 출력 mod(컬럼 또는 숫자, 나눌수) select mod(10,3) from dual; 4. ceil : 큰 근사정수 / floor : 작은 근사정수 select ceil(12.12345) from dual; select floor(12.12345) from dual; 5. power : 제곱함수 select power(2,3) from dual; 6. abs : 절대값 select abs(1..
SQL [5] - 문자 함수들 1. Dual : 문자함수에 앞서 오라클에서 dual이라는 기능을 설명해드립니다. 테이블명 자리에 dual을 넣고 컬럼명 부분에 원하는 임의의 값을 넣으면, 임의의 값의 1행 테이블을 만들수 있습 니다. -> 간단한 연습할 때 크게 유용하니 알아두시길 바랍니다. : ) 예시) select '가나다' from dual; select 12000 from dual; 2. initcap : 첫문자는 대문자, 나머지는 소문자로 변환해줍니다. bEnJaMin이라는 값을 실제 영어 대소문자법에 따라 첫글자를 대문자로 만들어주고 싶을때, 아래처럼 사용합니다. (문자 값은 무조건 작은 따옴표로 묶어주세요.) select initcap('bEnJaMin') from dual; 3. upper : 모든 문자를 대문자로 변환..