본문 바로가기

공부33

오라클 SQL 문법 공부18- SELF JOIN, 분석함수(RANK() OVER) 서론 이번에는 자기 자신 테이블을 두개 JOIN을 하여 처리하는 SELF JOIN에 대해서 알아보고자 한다. 보통 한 테이블에 기본키 외에 기본키에 대한 상위 관리자등의 리스트가 있거나 테이블 내에서 얻고자 하는 정보가 있을경우 사용된다. 본론 SELF JOIN --조인하고자 하는 대상이 보인 테이블에 존재하는 경우의 조인이다. --단 한번의 테이블 ACCESS로는 원하는 결과값을 가져올 수 없을 때 사용한다. --OUTER 조인을 자주 사용함 SELECT E1.ENAME AS 사원이름, E1.SAL, E2.ENAME AS 상위관리자명, E2.SAL FROM EMP E1, EMP E2 WHERE E1.MGR = E2.EMPNO(+); --AND E1.SAL > E2.SAL; SELECT D1.DNAME,.. 2017. 11. 2.
오라클 SQL 문법 공부17 - JOIN (OUTER JOIN) 서론 이번에는 조인 중 아우터 조인에 대해서 알아보고자 한다. 아우터 조인은 매칭되는 값이 없을 경우 표현되지 않았던 EQUI JOIN, NON EQUI JOIN에 비해 매칭이 되지 않아도 기준이 되는 테이블의 값들은 표시되는 것을 말한다. 아래 내용을 살펴보자. 본론 OUTER JOIN --OUTER JOIN (아우터 조인) --EQUI JOIN의 조인 조건에서 양측 칼럼 값 중, 어느 하나라도 NULL이면 -- = 비교 결과가 거짓이 되어 NULL 값을 가진 행은 출력되지 않는다 --EQUI JOIN에서 양측 칼럼 값 중의 하나가 NULL 이지만 --조인 결과로 출력할 필요가 있는 경우 OUTER JOIN 이 사용된다 --WHERE 절의 조인 조건에서 OUTER JOIN 연산자인 (+) 기호 사용 -.. 2017. 10. 31.
오라클 SQL 문법 공부16 - JOIN (EQUI JOIN, NON EQUI JOIN) 서론 여태까지 기본적인 조건에 의한 데이터들을 가공하여 조회 하였다면 여러 테이블들을 합해서 결과를 만들어내는 JOIN에 대해서 알아보고자 한다. 본론 JOIN? --JOIN이란 --여러 테이블의 데이터를 질의 할 경우 사용된다 --WHERE 절에서 조인 조건을 작성한다. --동일한 열 이름이 여러 테이블에 있는 경우 열 이름 앞에 테이블 이름이나 테이블 ALIAS를 붙인다 --N개의 테이블을 조인하려면 최소 N-1개의 조인 조건이 필요하다 --Cartesian Product --N개의 행을 가진 TABLE1과 M개를 가진 TABLE2의 카티시안 곱은 N*M 이다. --카티시안 곱은 다음 경우에 생성된다. --조인 조건을 생략한 경우 --조인 조건이 부적합할 경우 --첫번째 테이블의 모든행이 두번째 테이.. 2017. 10. 30.
오라클 SQL 문법 공부15 - 집합연산자 (UNION, UNION ALL, INTERSECT, MINUS) 서론 이번에는 복수의 테이블들을 묶어 하나의 테이블로 표시해 주는 집합연산자에 대해서 알아보고자 한다. 몇 가지만 이해하면 쓰는데 큰 무리가 없으니 4가지만 기억 하면 되겠다. 본론 UNION, UNION ALL --집합 연산자 --두개 이상의 집합에 대한 처리를 가능하게 하는 연산자이다. --집합 연산자는 두개 이상의 SQL 구문 사이에 쓸 수 있다 --UNION 과 UNION ALL --두 집합의 합집합을 나타내는 연산자 --UNION의 경우 중복된 값을 제거하여 나타낸다. --UNION ALL의 경우 중복된 값 까지 모두 나타낸다. --UNION은 중복된 값을 제거하기 위해 오라클 내부에서 정렬을 수행 --중복된 값이 없는데 굳이 UNION 써서 내부 정렬 할 필요 없음 ALL로 쓰면 정렬 안함 -.. 2017. 10. 30.
오라클 SQL 문법 공부14 - GROUP BY 절, HAVING 절 서론 SQL 기본 절 중에 가장 헛갈려 할 수 있는 GROUP BY 절에 대해서 알아보고자 한다. HAVING은 WHERE절의 조건과 비슷하지만 쓰임이 다르므로 구분만 하면 되겠다. GROUP BY 절을 완벽히 이해하면 대부분의 문법 문제들은 쉽게 풀 수가 있을 것이다. 본론 GROUP BY 절 --GROUP BY 절 --각 행을 특정 조건에 따라 그룹으로 분리하여 계산하도록 하는 구문식이다. --WHERE 절을 사용하여 행을 그룹으로 나누기 전에 행을 제외한다(조건검색) --GROUP BY에 있는 컬럼을 이용하여 그룹을 지정한다 --그룹에 대한 조건은 HAVING을 사용한다 --그룹에 대한 조건을 WHERE 절에서 사용할 수 있다 --같은 그룹끼리 묶기 위해 오라클 내에서 정렬을 수행함 --SELECT.. 2017. 10. 27.
오라클 SQL 문법 공부13 - GROUP 함수 (COUNT, SUM, MAX, MIN, AVG) 서론 테이블의 행의 개수를 구하거나, 특정행들의 숫자값들을 더하고 빼는 등의 연산을 할 수 있는 함수들이 있는데 GROUP 함수라고 한다. 단독으로도 쓰일 수 있고 추후에 GROUP BY 절과 함께 자주 쓰이는 함수들이니 꼭 알고 있는 것이 좋겠다. 본론 COUNT 함수 GROUP 함수 --여러 건의 데이터를 한꺼번에 처리하는 그룹 함수 --COUNT()함수 --그런데 그냥 COUNT(*) 하면 모든 행 갯수를 셈 --COUNT(COMM) 이렇게 하면 COMM컬럼에 NULL이 있으면 제외하고 셈 -- --*로 COUNT 하면 전체 데이터가 NULL인지 체크하기 때문에 성능상 좋지 않음 --그래서 그냥 전체 행 개수 셀때는 COUNT(1) 이런걸로 하면 좋은듯 --정렬을 DESC 하고 NOT NULL 컬럼.. 2017. 10. 26.
오라클 SQL 문법 공부12 - CASE 문 함수 서론 CASE문 함수는 특정한 조건일때 특정한 행위를 하게 도와주는 함수이다. DECODE와 거의 비슷한 기능을 가진 함수이다. 본론 CASE 문 --case문 --CASE 조건 WHEN 결과1 THEN 출력1 --WHEN 결과 2 THEN 출력2 --ELSE 결과 3 --END "컬럼명" --출력 데이터형이 모두 일치하여야 한다. --동등비교 일때만 생략 가능 --5) emp테이블에서 sal이 1000미만 이면 c등급, 1000에서 3000미만 B등급 --3000이상이면 A등급으로 등급을 나타내어라 --이거 CASE문으로도 해보기 SELECT ENAME, SAL, CASE WHEN SAL < 1000 THEN 'C등급' WHEN SAL < 3000 THEN 'B등급' ELSE 'A등급' END AS ".. 2017. 10. 17.
오라클 SQL 문법 공부11 - DECODE, NVL 함수 서론 오라클에서 자주 쓰이는 DECODE 함수이다. 다른 DBMS에는 없을 수도 있는 함수인데 특정값이 참인지 거짓인지 판별하여 다른 문자로 치환할 때 자주 쓰인다. 예를 들면 남자면 MALE, 여자면 FEMALE 등으로 말이다. 이와 비슷한게 다음에 할 CASE 문인데 CASE문에 비해 DECODE 함수는 성능상 좋진 않다고 한다. 필자도 사실 DECODE가 간편해서 자주 사용하는데 현업에서는 보통 성능상의 문제로 DECODE 보단 CASE문을 표준으로 정해 사용하는 일이 대부분이라고 하니 참고하자. 본론 DECODE 함수 --DECODE 함수 --조건문이 축약된 형식의 함수 표헌식이다. --각 조건이 맞을 경우 각각 문자를 치환할 수 있다. --A가 B와 같을 경우 1을 출력하는 경우 --DECODE.. 2017. 10. 17.
오라클 SQL 문법 공부10 - TO_CHAR, TO_DATE, TO_NUMBER 서론 이번에는 형변환 함수에 대해서 알아보고자 한다. 문자형, 숫자형, 날짜형 간의 연산을 하기 위해서는 같은 형끼리만 가능한데, 예를들어 VARCHAR2 형태의 속성이라면 값이 10이 들어가더라도 문자 10으로 인식한다. 보통 오라클에서는 WHERE절에 조건을 써 넣을때 COLUMN = 10 이라고 넣으면 COLUMN 컬럼이 문자형이라는 전제하에 묵시적형변환이 되어 자동으로 TO_NUMBER(COLUMN)으로 변경되어 인덱스를 타지도 않고 데이터가 많을 경우 성능이 좋아지지 않는다. 잘 알아두어야 하는 개념이다. 본론 TO_CHAR, TO_NUMBER --TO_CHAR 함수 (숫자형 -> 문자형으로 변환하기) --9 9의 개수만큼 자리 수 TO_CHAR(9876, '99999') 9876 --0 0 빈.. 2017. 10. 17.