ORACLE SQL

SQL 1회독

최종군 2024. 7. 26. 22:34

 

 

DISTINCT  :

컬럼에 포함된 데이터 중 중복 값을 제외하고 한 번씩만 표시하고자 할 때 사용. 

* SELECT절에 1회만 기술 가능하다. 

 

 

 

비교 연산자 

 

1. BETWEEN AND :

비교하려는 값이 지정한 범위에 포함되면 TRUE를 리턴하는 

연산자로 

상한 값과 하한 값의 경계도 포함된다. 

 

SELECT EMP_NAME, SALARY
FROM EMPLOYEE 
WHERE SALARY BETWEEN 3500000 AND 6000000;

 

2. LIKE :  % ,_ ,   ESCAPE

비교하려는 값이 지정한 특정 패턴을 만족하면 TRUE를 리턴하는 연산자로 

'%'와 '_'를 와일드카드로 사용한다.

 

SELECTEMP_NAME, SALARY

FROM EMPLOYEE

WHEREEMP_NAME LIKE ‘전%’;

 

-- 전으로 시작하면 '전%'

-- 전으로 끝나면 '%전'

 

ESCAPE : 

와일드 카드 문자와 패턴의 특수문자가 동일한 경우 어떤 것을 

패턴으로 결정할지 구분하지 못하기 때문에 데이터로 처리할 와일드 카드 문자 

패턴 기호 앞에 임의의 특수문자를 사용하고 ESCAPE OPTION으로 등록하여 처리한다. 

 

 

WHEREEMAIL LIKE ‘_ _ _#_%’ ESCAPE ‘#’;

 

IN :

비교하려는 값 목록에 일치하는 값이 있으면 TRUE를 반환하는  연산자 

 

WHEREDEPT_CODE IN(‘D6’, ‘D8’);

 

 

 

 


 

 

 


 

 

 

 

문자 처리 함수 : 

 

 

INSTR  : 

 

         - >          지정한 위치부터 지정한 숫자 번째로 나타나는 문자의 시작 위치를 반환 

 

INSTR(STRING,STR, [POSITION,[OCCURRENCE]])

 

STRING : 문자 타입 컬럼 또는 문자열 

STR : 찾으려는 문자열 

POSITION : 찾을 위치 시작 값(기본 값 1)

OCCURRENCE : SUBSTRING이 반복될 때 지정하는 빈도(기본 값 1), 음수 사용 불가능하다

 

POSITION이 0보다 작으면 STRING 시작부터 끝 방향으로 찾는다 

반대로 POSITION  0보다 크면 시작부터 끝 방향을 찾는다.  

 

NUMBER를 리턴한다 

 

 

 

LPAD/RPAD :

주어진 컬럼, 문자열에 임의의 문자열을 왼쪽/오른쪽에 덧붙여 길이 N의 문자열을 반환한다. 

 

LPAD(STRING, N, [STR]) / RPAD(STRING, N, [STR])

 

* STRING : 문타 타입 컬럼 또는 문자열 

* N : 반환할 문자(열)의 길이(바이트), 원래 STRING의 길이보다 작다면

  N만큼 잘라서 표시 

* STR : 덧붙이려는 문자(열), 생략 시 공백문자 

 

 

LTRIM/RTRIM  : 

주어진 컬럼, 문자열의 왼쪽/오른쪽에서 지정한 STR에 포함된 

모든 문자를 제거한 나머지 반환 

 

 

 

 

 

 

 

SUBSTR : 

 

컬럼이나 문자열에서 지정한 위치부터 지정한 개수의 문자열을 잘라내여 반환 

 

SUBSTR(STRING, POSITION, [LENGTH] )

 

STRING : 문자 타입 컬럼 또는 문자열 

POSITION : 문자열을 잘라낼 위치로 양수면 시작방향에서 

지정한 수만큼, 음수면 끝 방향에서 지정한 수만큼의 위치 

 

LENGTH : 반환할 문자 개수(생략 시 문자열의 끝까지 의미, 음수면 NULL 리턴)

 

 

LOWER / UPPER / INITCAP : 

컬럼의 문자 혹은 문자열을 소문자/대문자/첫 글자만 대문자로 변환하여 반환 

 

CONCAT : 

 

컬럼의 문자 혹은 문자열을 두 개 전달 받아 하나로 합친 후 반환 

CONCAT(STRING, STRING)

 

 

REPLACE : 

 

컬럼의 문자 혹은 문자열에서 특정 문자(열)을 지정한 문자(열)로 바꾼 후 반환 

 

REPLACE(STRING,STR1, STR2)

 

STRING : 문자 타입 컬럼 또는 문자열 

STR1 : 변경하려고 하는 문자 혹은 문자열 

STR2 : 변경하고자 하는 문자 혹은 문자열 

 

 


 

숫자 처리 함수 : 

 

 

 

 

ROUND : 

 

인자로 전달 받은 숫자 혹은 컬럼에서 지정한 위치부터 반올림하여 값 반환 

 

ROUND(NUMBER)

ROUND(NUMBER,POSITION)

 

 

 

CEIL : 

인자로 전달 받은 숫자 혹은 컬럼을 올림 후 반환 

 

 

FLOOR : 

인자로 전달 받은 숫자 혹은 컬럼에서 소수점 자리의 수를 버림 후 반환 

 

 

TRUNC : 

인자로 전달 받은 숫자 혹은 컬럼에서 지정한 위치부터

소수점 자리의 수를 버리고 반환 

 

TRUNC(NUMBER, POSITION) 

NUMBER : 숫자 혹은 숫자 데이터 컬럼 

POSITION : 버릴 위치 (생략 시 기본값 0)

 


날짜 처리 함수  

 

 

 

 

 

 

MONTHS_BETWEEN : 

 

인자로 날짜 두 개를 전달받아 개월 수 차이를 숫자 데이터형으로 반환

 

MONTHS_BETWEEN(DATE1,DATE2)

 

DATE1 : 기준이 되는 날짜 

DATE2 : 개월 수를 구하려는 날짜 

 

 

ADD_MONTHS : 

 

인자로 전달 받은 날짜에 인자로 받은 숫자만큼 개월 수를 더하여 특정 날짜 반환 

ADD_MONTHS(DATE,NUMBER)

 

 

 

NEXT_DAY : 

인자로 전달받은 날짜에 인자로 받은 요일이 가장 가까운 날짜 반환 

NEXT_DAY(DATE,STRING[OR NUMBER])

 

 

 

 

 

LAST_DAY : 

인자로 전달받은 날짜가 속한 달의 마지막 날짜 반환 

 

 

 

 

 

* EXTRACT    :  자주 사용함

년, 월, 일 정보 추출하여 반환 

 

EXTRACT(YEARFROM DATE)

EXTRACT(MONTH FROM DATE)

EXTRACT(DAY FROM DATE)

 

* DATE : 기준이 되는 날짜

 

 

 

 

 

TO_CHAR : 

날짜 혹은 숫자형 데이터를 문자형 데이터로 변환하여 반환 

 

TO_CHAR(HIRE_DATE, 'YYYY-MM-DD'),

TO_CHAR(HIRE_DATE, 'YY/MON, DAY, DY')

 

 

TO_CHAR(SALARY, ‘L999,999,999’),

TO_CHAR(SALARY, ‘000,000,000’)

 

 

 

 

TO_DATE  :  

 

숫자 혹은 문자형 데이터를 날짜형 데이터로 변환하여 반환 

 

TO_DATE(CHARACTER[, FORMAT])

TO_DATE(NUMBER[, FORMAT])

 

- EMPLOYEE테이블에서 2000년도 이후에 입사한 사원의 사번, 이름, 입사일 조회

  SELECTEMP_NO, EMP_NAME, HIRE_DATE FROMEMPLOYEE

  WHERE HIRE_DATE  >  TO_DATE(20000101, ‘YYYYMMDD’);

 

-- FORMAT 형식을 지정해야한다. 

 

 

TO_NUMBER : 

문자형 데이터를 숫자형 데이터로 변환하여 반환 

 

SELECTTO_NUMBER('1,000,000', '99,999,999') -TO_NUMBER('550,000', '999,999')

FROMDUAL;

 

 


 

NULL 처리 함수 : 

NVL : NULL로 되어 있는 컬럼의 값을 인자로 지정한 숫자 혹은 문자로 변경하여 반환 

 

 

NVL(P1,P2)

P1 : NULL 데이터를 처리할 컬럼명 혹은 값 

P2 : NULL값을 대체하고자 하는 값 

 

 

SELECT EMP_NO,

EMP_NAME,

SALARY,

NVL(BONUS, 0),

(SALARY + (SALARY * NVL(BONUS, 0)))*12

FROM EMPLOYEE;

 

 

 


선택 함수 :

DECODE : 

비교하고자 하는 값 또는 컬럼이 조건식과 같으면 결과 값 반환 

 

DECODE(표현식, 조건1, 결과1, 조건2, 결과2 .... DEFAULT)

 

 

SELECT EMP_ID, EMP_NAME, EMP_NO,
    DECODE(SUBSTR(EMP_NO, 8, 1), '1', '남', '2','여', '중성')
FROM employee;

 

 

 

CASE :

CASE WHEN 조건1THEN 결과1

WHEN 조건2THEN 결과2

WHEN 조건3THEN 결과3

ELSE 결과N

 

END

 

-- END가 꼭 들어가야 된다. 

 

 

 

 

 

 

 


그룹 함수 : 

 

SUM : 

해당 컬럼 값들의 총합 반환한다.

 

SELECT SUM(SALARY)

 

AVG : 해당 컬럼 값들의 평균 반환 

 

SELECT ROUND(AVG(NVL(BONUS, 0)), 2)

FROMEMPLOYEE;

 

* NVL을 하지 않을 시 NULL 값을 가진 행은 평균 계산에서 제외되어 계산

 

 

 


 

ORDER BY : 

SELECT한 컬럼에 대해 정렬을 할 때 작성하는 구문으로 

SELECT 구문의 가장 마지막에 작성하며 실행 순서 역시 가장 마지막에 수행됨

 

 


 

GROUP BY : 

그룹 함수는 단 한 개의 결과 값만 산출하기 때문에 그룹이 여러 개일 경우 오류 발생

여러 개의 결과 값을 산출하기 위해 그룹 함수적용될 그룹의 기준을 

GROUP BY절에 기술하여 사용

 

 

 

 

 

 

 

 

 

 

HAVING : 

 

그룹 함수로 값을 구해올 그룹에 대해 조건을 설정할 때 HAVING절에 기술

WHERE절은 SELECT에 대한 조건 

 

 

 

 

 

 

 


 

집합 연산자 : 

여러 개의 SELECT 결과물을 하나의 쿼리로 만드는 연산 

 

UNION :  여러 개의 쿼리 결과를 합치는 연산자로 중복된 영역은 제외하여 합침 

 

 

 

 

 

 

UNION ALL : 

여러 개의 쿼리 결과를 합치는 연산자로 중복된 영역 모두 포함하여 합침 

 

 

INTERSECT : 

 

여러 개의 SELECT 결과에서 공통된 부분만 결과로 추출(교집합)

 

MINUS : 

 

선행 SELECT 결과에서 다음 SELECT 결과와 겹치는 부분을 제외한 나머지 부분 추출(차집합)

 

 


조인문 :

 

JOIN : 

하나 이상의 테이블에서 데이터를 조회하기 위해 

사용하고 수행 결과는 하나의 Result Set으로 나옴

 

 

 

오라클 전용 구문 : 

 

 

FROM절에  ','  구분하여 합치게 될 테이블 명을 기술하고 

 

WHERE절에 합치기에 사용할 컬럼 명 명시 

 

SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE 

FROM EMPLOYEE, DEPARTMENT 

WHERE DEPT_CODE = DEPT_ID;

* 연결에 사용할 두 컬럼 명이 다른 경우 그 자체로 사용 가능 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

INNER JOIN과 OUTER JOIN : 

기본적으로 JOIN은 INNER JOIN이며 

두 개 이상의 테이블을 조인할 때 일치하는 값이 없는 행은 조인에서 제외됨

 

 

 

OUTER JOIN은 일치하지 않은 값도 포함이 되며 반드시 OUTER JOIN 명시

 

 

 

 

 

 

 

 

 


 

 

SUBQUERY : 

 

SELECT 문장 안에 포함된 또 다른 SELECT 문장으로 메인 쿼리가 실행되기 전 

한 번만 실행됨 비교 연산자의 오른쪽에 기술해야 하며 반드시 괄호로 묶어야 함 

서브쿼리와 비교할 항목은 반드시 

서브쿼리의 SELECT한 항목의 개수와 자료형을 일치시켜야된다 

 

 

 

 

 

 

다중 행 서브쿼리 : 

서브쿼리의 조회 결과 값의 행이 여러 개인 서브쿼리 

다중 행 서브쿼리 앞에는 일반 비교 연산자 사용 불가능다 

 

 

 

 

 

 

 

 

 

 

 

 

스칼라 서브쿼리 : 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DDL : 데이터 정의 언어 

 

오라클에서 제공하는 객체를 새로 만들고 (CREATE)

구조를 변경하고 (ALTER)

구조 자체를 삭제(DROP)하는 언어 

 

-- > 실체 데이터가 아닌 규칙을 정의하는 언어 

 

오라클에서의 객체 (구조) : 

테이블, 뷰, 시퀀스, 

인덱스, 패키지, 트리거, 프로시져, 함수, 동의어, 사용자

 

 

 

* CREATE : 객체를 새로 생성하는 구문

 

테이블 생성하기 : 

- CREATE TABL 테이블명 

 

* 문자 => 반드시 크기 지정을 해줘야 함!
                + CHAR(바이트크기)    : 고정길이 (고정된 길이의 데이터를 담을 경우)
                                       -> 지정한 길이보다 작은 값이 들어올 경우 공백으로 채워서 저장
                                       최대 2000바이트까지 지정 가능
                                       
                + VARCHAR2(바이트크기): 가변길이 (데이터의 길이가 정해져있지 않는 경우)
                                      -> 저장되는 데이터 길이만큼만 공간 크기가 사용됨
                                      최대 4000바이트까지 지정 가능

 

 

 * 숫자 : NUMBER
 * 날짜 : DATE

 

 

CREATE TABLE MEMBER (
    MEM_NO NUMBER,
    MEM_ID VARCHAR2(20),
    MEM_PWD VARCHAR2(20),
    MEM_NAME VARCHAR2(20),
    GENDER CHAR(3),
    PHONE CHAR(13),
 EMAIL VARCHAR2(50),
    JOIN_DATE DATE
);

 

컬럼에 설명 추가하기 

 

 

COMMENT ON COLUMN 테이블명.컬럼명 IS '설명내용'; 

예시) 

 

- COMMENT ON COLUMN MEMBER.MEM_NO IS '회원번호';

 

테이블 삭제하기 : DROP TABLE 테이블명; 

 

-- 테이블에 데이터 추가하기 : INSERT INTO 테이블명 VALUES(값, 값, 값, ....)

INSERT INTO MEMBER VALUES (1, 'sjlim', '1234', '임여진', '여', '010-1234-1234', 'sjyih@gmail.com', sysdate);

 

제약조건 : 원하는 데이터값만 유지하기 위해서 특정 컬럼에 설정하는 제약 

데이터 무결성을 보장하기 위한 목적 

 

설정 방식 : 컬럼레벨방식 / 테이블레벨방식 

* 종류 :

 NOT NULL, UNIQUE, CHECK, PRIMARY KEY, FOREIGN KEY

 

 

 NOT NULL : 제약 조건 

: 해당 컬럼에 반드시 값이 존재해야 하는 경우 설정하는 제약 

=> 절대로 NULL 값이 저장되면 안되는 경우 

 

 데이터 추가(삽입)/수정 시 NULL값을 허용하지 않음!
        * 컬럼 레벨 방식으로만 설정 가능

 

 

CREATE TABLE MEMBER_NOTNULL (
    MEM_NO NUMBER NOT NULL,
    MEM_ID VARCHAR2(20) NOT NULL,
    MEM_PWD VARCHAR2(20) NOT NULL,
    MEM_NAME VARCHAR2(20) NOT NULL,
    GENDER CHAR(3),
    PHONE CHAR(13),
    EMAIL VARCHAR2(50),
    JOIN_DATE DATE
);

 

 

 UNIQUE 제약 조건

: 해당 컬럼에 중복된 값이 있을 경우 제한하는 제약조건 

 

* 데이터 추가(삽입)/수정 시 기존에 있는 데이터 값 중에 중복되는 값이 있을 경우 

오류를 발생시킨다 

 

MEM_ID VARCHAR2(20) NOT NULL UNIQUE,    -- 컬럼 레벨 방식

 

 

 

 

 

CREATE TABLE MEMBER_UNIQUE (
    MEM_NO NUMBER NOT NULL,
    MEM_ID VARCHAR2(20) NOT NULL UNIQUE,    -- 컬럼 레벨 방식
    MEM_PWD VARCHAR2(20) NOT NULL,
    MEM_NAME VARCHAR2(20) NOT NULL,
    GENDER CHAR(3),
    PHONE CHAR(13),
    EMAIL VARCHAR2(50),
    JOIN_DATE DATE
    
    -- , UNIQUE (MEM_ID)    -- 테이블 레벨 방식
);

 

 

 

 

제약 조건명 설정하기 

 

*컬럼 레벨 방식 

 

        CREATE TABLE 테이블명 (
            컬럼명 자료형 [CONSTRAINT 제약조건명] 제약조건
        );

 

* 테이블 레벨 방식
        
        CREATE TABLE 테이블명 (
            컬럼명 자료형,
            컬럼명 자료형,
            
            [CONSTRAINT 제약조건명] 제약조건 컬럼명
        );

 

 

 

'ORACLE SQL' 카테고리의 다른 글

ORACLE SQL DDL_02  (0) 2024.07.28
ORACLE SQL DDL_01  (0) 2024.07.27
ORACLE SQL 2회독 문제 풀이  (0) 2024.07.25
SQL 집합 연산자 , JOIN  (0) 2024.07.24
SQL_함수 모음 NULL 처리 함수, 선택 함수  (0) 2024.07.23