1. Count 함수


COUNT(*) 은 NULL을 포함한 모든 데이터의 수


COUNT(commission_pct) 는 NULL을 제외한 데이터의 수


1
SELECT COUNT(*) ,COUNT(commission_pct*salary) FROM EMPLOYEES;
cs



2.  SUM 함수  합계

    AVG 함수   평균

    MAX 함수   최대

    MIN 함수   최소

    


1
2
3
4
5
6
7
SELECT 
       SUM(salary),
       AVG(salary),
       MAX(salary),
       MIN(salary)
FROM   
        EMPLOYEES ;
cs





3.  GROUP BY 함수  
 특정 조건으로 세부적인 결과 출력하기

*******where절에는 사용할수 없음!!!!*******

1
2
3
4
5
SELECT department_id,
       COUNT(*),
       SUM(salary)
FROM EMPLOYEES       
GROUP BY department_id ; 
cs




3.  HAVING 절  
 
1
2
3
4
5
6
SELECT department_id,
       COUNT(*),
       SUM(salary)
FROM EMPLOYEES
WHERE SUM(salary) > 10000       
GROUP BY department_id ; 
cs

-이렇게 하면 오류를 발생시킨다.  WHERE 절에는  GROUP BY 를 사용할 수 없다.
그렇기때문에 HAVING 절을 사용해야한다. 

1
2
3
4
5
6
SELECT department_id,
       COUNT(*),
       SUM(salary)
FROM EMPLOYEES
HAVING SUM(salary) > 10000       
GROUP BY department_id ; 
cs


1. 치환 함수 

NVL(컬럼, 숫자)   숫자로 치환

NVL(컬럼, '문자')  문자로 치환

NVL2 NULL이 아닐경우 ㅇㅇ으로 치환


우선 전체 데이터를 확인해보겠습니다.



클릭 위치를 보면 Kimbeerely씨의 DEPARTMENT_ID가    NULL 값이 들어가있습니다.


null값을 80으로 치환하여 출력합니다. (활용의 예: 금액에 NULL일경우 0으로 )


1
SELECT NVL(DEPARTMENT_ID,80FROM EMPLOYEES;
cs



2. DECODE 함수


DECODE ( A , B , 1)    

A가 B라면 1을 출력  (A=B 라면 1을 출력)  A!=B 나머지는 NULL을 출력합니다

1
SELECT FIRST_NAME, DECODE(DEPARTMENT_ID,110,1FROM EMPLOYEES;
cs


DECODE ( A , B , 1, 2) 

A가 B라면 1을 출력 아니라면 2을 출력 


1
SELECT FIRST_NAME, DECODE(DEPARTMENT_ID,110,1,2FROM EMPLOYEES;
cs

DECODE ( A , B , 1, 2) 

A가 B라면 1을 출력 아니라면 2을 출력 



DECODE ( A , B , 1, C, 2, 3) 

A가 B라면 1을 출력하고 A가 C라면 2를 출력하고 아무것도 아니라면 3을 출력

1
SELECT FIRST_NAME, DECODE(DEPARTMENT_ID,110,1,100,2,3FROM EMPLOYEES;
cs


DECODE ( A , B , DECODE( C, D, 3)) 

A가 B일 경우중 C = D 라면 3을 출력


 

3. CASE 함수

#문법#


CASE 조건 WHEN 결과1 THEN 출력1

  WHEN 결과2 THEN 결과2

             ELSE 출력 3

END "컬럼명"


1
2
3
4
5
6
7
8
SELECT FIRST_NAME,DEPARTMENT_ID,
       CASE DEPARTMENT_ID WHEN 10 THEN 'TEAM-1'
                          WHEN 20 THEN 'TEAM-2'
                          WHEN 30 THEN 'TEAM-3'
                          ELSE 'N/A'
       END "TEAM"
FROM EMPLOYEES
WHERE DEPARTMENT_ID <50
cs



1. TO_CHAR

숫자 or 날짜→ 문자


1
2
3
SELECT first_name, TO_CHAR(salary*12,'$999,999,999') AS SAL,
TO_CHAR(HIRE_DATE,'yyyy~mm~dd') AS HIRE_DATE
FROM EMPLOYEES;
cs







2. TO_NUMBER

'숫자 같은 문자' → 숫자


1
SELECT TO_NUMBER('01012341234'FROM DUAL;
cs

* 문자에서 숫자로 형 변환이 이뤄지면서 

.숫자는 맨앞에 0을 출력하지 않으므로  맨앞에 "0" 이 사라졌습니다.



3. TO_DATE

'날짜 같은 문자' → 날짜 타입


1
SELECT TO_DATE('1988/04/19'FROM DUAL;
cs



3. 자동 형 변환

1
SELECT 2 + TO_NUMBER('10'FROM DUAL;
cs



자동 형 변환 후 합계를 구합니다.











8



  



1. SYSDATE 함수

   OS(리눅스 윈도우 등)에서 시간을 가져옵니다.


1
2
  
SELECT SYSDATE FROM DUAL;
cs



2. SYSDATE 함수 (FORMAT 변경하기)

  

1
ALTER SESSION SET NLS_DATE_FORMAT= 'YYYY-MM-DD:HH24:MI:SS';
cs


3. MONTHS_BETWEEN함수

두 날짜 사이의 개월 수를 출력하는 함수

SYSDATE - HIRE_DATE 


1
2
SELECT SYSDATE, MONTHS_BETWEEN(SYSDATE,hire_date)
FROM EMPLOYEES;
cs





4. ADD_MONTHS함수

기준일에 + 개월 수


1
2
SELECT HIRE_DATE, ADD_MONTHS(hire_date,5)
FROM EMPLOYEES;
cs





4. NEXT_DAY 함수

지정된 요일 가장 빠른 날짜


1
SELECT SYSDATE, NEXT_DAY(SYSDATE,'월'FROM DUAL;
cs





5. LAST_DAY 함수

지정된 날짜가 속한 달의 마지막 날 출력


1
SELECT SYSDATE, LAST_DAY(SYSDATE) FROM DUAL;
cs





 




 en  






숫자관련 함수들은 금융권 등에서 많이 사용되며 자리수 또는 올림, 반올림 , 버림 등 주의하셔야합니다.



1. ROUND함수

주어진 숫자에서 반올림


1
2
3
4
select ROUND(123.456,2) AS ROUND1,
       ROUND(123.456,0) AS ROUND2,
       ROUND(123.456,-1) AS ROUND3
from dual;
cs



2. TRUNC함수

주어진 숫자에서 버림


1
2
3
4
select TRUNC(123.456,2) AS ROUND1,
       TRUNC(123.456,0) AS ROUND2,
       TRUNC(123.456,-1) AS ROUND3
from dual;
cs




3. MOD (나머지 값을 구하는 함수)

   CEIL (주어진 숫자에서 가장 가까운 정수)

   FLOOR (주어진 숫자에서 가장 가까운 작은 정수)


1
2
3
4
SELECT MOD(11,4"Modulus",
      CEIL(0.3333"Ceil",
      FLOOR(1.3333"Floor"
  FROM DUAL
cs







1. INITCAP (첫 글자만 대문자로 출력하고 나머지는 소문자)


1
select first_name , initcap(first_name)from EMPLOYEES;
cs



2. lOWER / UPPER (모두 소문자 / 모두 대문자)


1
select first_name , LOWER(first_name), UPPER(first_name) from EMPLOYEES;
cs



3. LENGTH / LENGTHB (문자열길이 / 바이트수)

영어일땐 바이트수가 보통 1byte라 동일하지만 한글일 땐 보통 할글자수에 2byte이기 때문에 곱절로 나옴


1
select first_name , LENGTH(first_name), LENGTHB(first_name),LENGTH('오라클'),LENGTHB('오라클')  from EMPLOYEES;
cs



4. SUBSTR / SUBSTRB  (특정 부분 골라내기 ) ex : 주민등록번호 성별 골라내기 등.


1
2
3
4
select first_name , SUBSTR(first_name,1,3)from EMPLOYEES;
 
select SUBSTR('001212-1000000',-7,1from dual;
 
cs



---------------------------------------------------------------------------------------


5. INSTR (특정 글자의 위치 찾기)

INSTR(컬럼 or 문자열 ,'찾는 글자', '시작',' 몇 번째인지 ')

1
select hire_date, INSTR(hire_date,'/',1,2from EMPLOYEES;
cs






6.   LPAD     /   RPAD(문자로 채우기)
       왼쪽    /  오른쪽
1
select first_name , LPAD(first_name,10,'*'), RPAD(first_name,10,'*'),LPAD('오라클',10,'*'),RPAD('오라클',10,'*')  from EMPLOYEES;
cs



7.   LTRIM    /   RTIRM( 문자 지우기)

        왼쪽    /  오른쪽


1
select first_name , LTRIM(first_name,'E'), RTRIM(first_name,'e'),LTRIM('오라클','오'), RTRIM('오라클','클')from EMPLOYEES;
cs



7.   REPLACE 문자 바꿔주기


1
select REPLACE('901212-1000000',SUBSTR('901212-1000000',-6,7),'******'from dual;
cs




'데이터베이스 > Oracle' 카테고리의 다른 글

5. 오라클 기초 (날짜 관련 함수)  (0) 2018.02.20
4. 오라클 (숫자관련 함수)  (0) 2018.02.20
2. 오라클 기초 익히기 (WHERE)  (0) 2018.02.18
1. 오라클 기초 익히기  (0) 2018.02.18
2. 가상 컬럼 만들기  (0) 2018.02.16

1. 원하는 데이터 조회하기


1
SELECT First_name, Last_name , DEPARTMENT_ID FROM EMPLOYEES WHERE DEPARTMENT_ID= 60;
cs



2. BETWEEN 연산자 


1
SELECT First_name, Last_name , SALARY FROM EMPLOYEES WHERE SALARY BETWEEN 5000 AND 10000;
cs




3. IN연산자 


1
SELECT First_name, Last_name FROM EMPLOYEES WHERE FIRST_NAME IN ('John' , 'Luis');
cs


4. 

4. LIKE 연산자 (주로 검색에 활용함)


 LIKE 연산자에는 % 와 _ 두가지가 있는데 

% : 글자수 제한없이 검색

_ : 글자수는 한 글자만 검색


1
SELECT First_name, Last_name FROM EMPLOYEES WHERE FIRST_NAME LIKE ('A%');
cs



1
SELECT First_name, Last_name FROM EMPLOYEES WHERE FIRST_NAME LIKE ('A__t');
cs





5. 여러 검색 조건을 한번에 검색할 때


1
SELECT First_name, Last_name ,SALARY,DEPARTMENT_ID  FROM EMPLOYEES WHERE SALARY > 5000 AND DEPARTMENT_ID= 60;
cs






6. ORDER BY 절을 이용해 정렬하기

* 문장의 마지막에 작성해야함
디폴트 값은 ASC
 ASC (오름차순) 
DESC( 내림차순)

1
SELECT First_name, Last_name , SALARY FROM EMPLOYEES WHERE SALARY > 5000 ORDER BY  SALARY DESC;
cs

 



'데이터베이스 > Oracle' 카테고리의 다른 글

4. 오라클 (숫자관련 함수)  (0) 2018.02.20
3. 오라클 기초 (문자함수)  (0) 2018.02.18
1. 오라클 기초 익히기  (0) 2018.02.18
2. 가상 컬럼 만들기  (0) 2018.02.16
1. 테이블 복사하기  (0) 2018.02.16

1. 테이블 구조 파악하기

1
DESC EMPLOYEES;
cs


2. 데이터 조회하기

1
SELECT * FROM EMPLOYEES;
cs




3. 특정 데이터 조회하기

1
SELECT First_name, Last_name , Email FROM EMPLOYEES;
cs



4. 컬럼 대신 문자 사용하기


1
SELECT First_name, Last_name , 'Hello~~' FROM EMPLOYEES;
cs



5. 컬럼 별칭 사용하기


1
SELECT First_name AS "성", Last_name AS "이름" FROM EMPLOYEES;

cs





6. 연결 연산자로 컬럼 붙이기

1
SELECT First_name || Last_name   FROM EMPLOYEES;
cs




7. 중복 데이터 제거 후 출력


1
SELECT distinct department_id from EMPLOYEES;
cs






'데이터베이스 > Oracle' 카테고리의 다른 글

4. 오라클 (숫자관련 함수)  (0) 2018.02.20
3. 오라클 기초 (문자함수)  (0) 2018.02.18
2. 오라클 기초 익히기 (WHERE)  (0) 2018.02.18
2. 가상 컬럼 만들기  (0) 2018.02.16
1. 테이블 복사하기  (0) 2018.02.16

우선 설명부터 하자면 

이런식으로 판매가 데이터를 입력하고 수량 데이터를 입력하면 합계에는 수식만 걸어두는 계산되게 하는 하는것이라

이해하면 될것같다


우선 테이블을 먼져 생성해보자

1
2
3
4
CREATE table vtb_01(
    no1 NUMBER,
    no2 NUMBER,
    no3 NUMBER GENERATED ALWAYS AS (no1 * no2) VIRTUAL);
cs

위 엑셀 처럼 no1이 판매가라 생각하고 no2는 수량 이라생각하고 no3컬럼에 두개의 곱을 계산하여 넣게 하기위해 테이블을 만들었다.

1
INSERT into tvb_01 VALUES (1000,2,2000);

cs 


만약 이렇게 no3 컬럼에 까지 값을 넣으려한다면


이렇게 에러를 발생시킬 것이다..


1
INSERT INTO vtb_01 (no1,no2) VALUES (2000,1);
cs

no1 no2 컬럼에 데이터만 입력하고  조회를 해보면


이렇게 no3 컬럼에 곱해서 잘 들어가는것을 볼수있다.


1
update vtb_01 set no1 = 3000;
cs

만약 데이터를 수정한다면 no3의 값 또한 변경되는 것을 확인 할 수 있다.









'데이터베이스 > Oracle' 카테고리의 다른 글

4. 오라클 (숫자관련 함수)  (0) 2018.02.20
3. 오라클 기초 (문자함수)  (0) 2018.02.18
2. 오라클 기초 익히기 (WHERE)  (0) 2018.02.18
1. 오라클 기초 익히기  (0) 2018.02.18
1. 테이블 복사하기  (0) 2018.02.16

기존 테이블


1
2
3
4
5
6
7
8
9
10
CREATE TABLE CRUD
(
    CRNO            INT               NOT NULL
    CRTITLE         VARCHAR2(255)     NULL
    USERNO          INT               NULL
    CRMEMO          VARCHAR2(1000)    NULL
    CRDATE          DATE              NULL
    CRDELETEFLAG    CHAR(1)           NULL
    CONSTRAINT CRUD_PK PRIMARY KEY (CRNO)
)
cs



1. 모든 컬럼 및 데이터 복사하기


1
2
3
4
CREATE TABLE CRUD1
 AS 
SELECT * FROM CRUD
 
cs



2. 특정 컬럼 만 복사하기


1
2
3
4
5
CREATE TABLE CRUD2
 AS 
SELECT CRTITLE , CRMEMO
FROM CRUD
 
cs



3. 테이블 구조만 가져오고 데이터는 안가져오기


1
2
3
4
CREATE TABLE CRUD3
AS
SELECT * FROM CRUD
WHERE 1=2;
cs


컬럼은 그대로 가져왔는데 데이터는 없다!!

'데이터베이스 > Oracle' 카테고리의 다른 글

4. 오라클 (숫자관련 함수)  (0) 2018.02.20
3. 오라클 기초 (문자함수)  (0) 2018.02.18
2. 오라클 기초 익히기 (WHERE)  (0) 2018.02.18
1. 오라클 기초 익히기  (0) 2018.02.18
2. 가상 컬럼 만들기  (0) 2018.02.16

+ Recent posts