본문 바로가기

공부/Oracle26

오라클 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.
오라클 SQL 문법 공부9 - MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY 서론 날짜형 데이터들은 단순히 숫자처럼 +1이나 +3으로도 일 수를 조정 할 수는 있지만 한달의 일자의 수는 각 달마다 다르므로 이 함수들을 사용해야 정확한 날짜를 찾거나 차이를 알수가 있다. 아주 간단한 날짜 계산식이라면 모를까 대부분은 아래 함수들을 가지고 계산을 한다. 본론 MONTHS_BETWEEN, ADD_MONTHS --MONTHS_BETWEEN(날짜1, 날짜2) --두 날짜 간의 개월 수 차이 값을 반환 --두 날짜 중 큰 날짜를 먼저 써야 양수가 나온다 SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('2017-01-30', 'YYYY-MM-DD')) FROM DUAL; SELECT TRUNC(SYSDATE - HIREDATE) AS 입사일수, TRUNC(MONTHS_.. 2017. 9. 22.
오라클 SQL 문법 공부8 - ROUND, TURNC, MOD, FLOOR, CEIL, ABS, SIGN 서론 이번에는 주로 숫자형 데이터를 처리하는 함수들을 배워볼 차례이다. 본론 ROUND, TRUNC --ROUND(숫자 [,m]) 반올림 / TRUNC(숫자, [,m]) 버림 select round(12343.46), --뒤에 인자 없으면 소수점 첫번째 자리에서 반올림 round(1234.56, 1), --소수점 2번째 자리에서 반올림하여 1자리로 표시 round(1234.56, 2), --소수점 3번째 자리가 없어서 그대로 round(1234.56, -1) --정수 1자리에서 반올림 from dual; SELECT TRUNC(1234.45) FROM DUAL; --ROUND(날짜, 단위), trunc --라운드 반올림, trunc 버림 --날짜를 년, 월 단위로 반올림, 버림(단위: 'month', '.. 2017. 9. 22.
오라클 SQL 문법 공부7 - LPAD, LTRIM, TRIM, REPLACE, TRANSLATE 서론 이번에도 역시 문자열을 가공하는 함수들에 대해서 알아보고자 한다. 나름 자주 쓰이는 함수이니 익숙해지면 좋을 것 같다. 본론 LPAD, RPAD --LPAD('문자열' 또는 컬럼명, 바이트 [,채울 문자])) --이거 자리수가 아니라 바이트 수 같은데? 숫자 영문 1, 한글, 특수문자 2바이트씩 --바이트 수 만큼 다 찰 때까지 해당 문자열을 가장 왼쪽에 반복해서 출력 --문자열을 붙였을때의 크기가 바이트 수를 넘어서면 붙지 않는다. --채울 문자 생략 시에는 공백을 문자대신 끼워서 반환한다. --RPAD는 오른쪽에 붙임 --채울문자를 넣어야 하는데 자리수가 부족하면 안 채워짐 --양쪽에 삽입하기 위해서는 각각 사용할 수 밖에 없다 SELECT RPAD(LPAD('1234', 6, '*'), 8, .. 2017. 9. 20.