728x90
728x90

오라클 기반으로 데이터베이스 수업을 들으면서 문법규칙, 명령어, 키워드를 정리해보았습니다. 검색은 ctrl + F 로 찾아주세요.

 

 

ORACLE SQL 문법 규칙

 

오라클 SQL은 숫자, 따옴표, 대소문자를 구분합니다.

문장의 마지막은 ; 세미콜론 입력

WHERE에서 표현식 (=리터럴,상수,문자)에 ' ' 빼먹으면 에러

컬럼 별칭 : " ", AS, 한칸 뛰고 이어서

 

산술연산은 그대로 쓰면 됨, 괄호 우선

>=의 순서이며 공백이 들어가면 안됨.

함수는 단일행 / 복수행 함수가 있다.

단일행 : 문자, 숫자, 날짜, 변환(묵시적데이터, 명시적데이터 변환), 일반 함수

날짜의 경우 윈도우와 리눅스는 표현 순서가 다르다.

 

ORACLE SQL KEYWORD

show user : 접속중인 사용자 조회 (SET sqlprompt "_USER>" 앞쪽에 계속 이름이 나온다.)

DESC : 테이블에 존재하는 컬럼들 조회

SELECT : 열(column) 조회

FROM : 테이블 조회

* : all

WHERE : 행의 조건. 문자는 ' ' 붙여서 조회

COL a FOR 9999 / FOR a8 / LINE 200 / PAGES 60 : 칼럼 길이 조절

& : 값을 입력받으라는 뜻

SET verify OFF : 입력받는 곳에 일부 과정 안보이게 하기.

BETWEEN a AND b = a 이상 b 이하. 작은 값을 앞에 씀. 부등호를 권장함

IN (a,b,c) = a or b or c 에 속하는 것. 속도가 빠름

LIKE 특정 패턴의 것. (% : 글자수 제한없음 _ 한글자 표현. 그러나 속도가 느려짐)

IS NULL / IS NOT NULL : 값을 모를 경우. = 연산 사용 불가. 0은 null 아님. null에 어떤값을 더해도 결과는 null

AND : 조건 동시 만족. and가 or보다 항상 먼저 수행됨, 괄호 사용 가능

OR : 한 가지 이상의 조건 만족

DISTINCT : 중복제거. 속도가 느려짐

CONCAT : 연결(합성) 연산자. 문자열 합치기. || 랑 같음. 칼럼끼리 붙여서 출력.

ORDER BY : 정렬. 기본값은 ASC(오름차순). DESC (내림차순). 속도가 느려짐

UNION : 중복값 제거 후 합쳐서 정렬 후 출력. 속도가 느려짐. DECODE나 CASE 추천.

UNION ALL : 중복값 제거 없이 합쳐서 정렬없이 출력

INTERSECT : 교집합 결과 출력, 정렬

MINUS : 차집합 결과 출력, 정렬. 큰 거 작은 거 순.

INITCAP() : 첫번째만 대문자, 나머지 소문자

UPPER() : 다 대문자

LOWER() : 다 소문자

LENGTH() : 문자열 길이값

LENGTHB() : 문자열 길이 바이트값 (영어는 1)

SUBSTR(0,a,b) : ~부터 ~까지. 특정 길이의 문자 추출. -를 붙이면 오->왼으로 검색

[ 0이라는 문자의 a번째부터 시작하는 b개까지 ]

SUBSTRB : 문자에서 특정 바이트만 추출

INSTR(0,a,b) : 특정 문자의 위치 조회

INSTRB : 문자에서 특정 위치 바이트 값

LPAD : 문자열에서 왼쪽부터 특정 문자를 채운다 // RPAD : 오른쪽부터

LTRIM : 왼쪽부터 제거 // RTRIM : 오른쪽부터

REPLACE : 특정 문자 대체

 

--[  RPAD 퀴즈  ]
--아래 화면과 같이 emp 테이블에서 deptno가 10번인 사원들의 이름을 총 9자리로 출력하되 
--오른쪽 빈자리에는 해당 자릿수에 해당되는 숫자가 출력되도록 하시오.

SELECT ename, RPAD(ename, 9, SUBSTR('123456789', LENGTHB(ename)+1)) "RPAD"
FROM emp
WHERE deptno=10;

 

* 정규식 함수 : 패턴과 관련

REGEXP_REPLACE (위치, '바꿀 조건', '바꿀 것) : 특정 패턴을 치환

* [[:digit:]] 0-9, [[:alpha:]] : [A-Za-z]

REGEXP_REPLACE(text, '([0-9])', '\1-*') : 숫자를 찾아서 뒤에 -* 추가

REGEXP_REPLACE('aaa bbb','( )', '{2, }', '') : 공백 2칸 이상 제거

REGEXP_INSTR : 특정패턴의 시작 위치를 반환

REGEXP_SUBSTR : 특정 패턴을 반환

REGEXP_LIKE : 특정 패턴과 매칭되는 결과 조회

REGEXP_COUNT : 특정패턴 횟수 반환

REGEXP_COUNT(text, 'c', 1, 'i' ) : i는 대소문자 구분 없이 출력

REGEXP_COUNT(text, 'aa' )

REGEXP_COUNT(text, 'a{2}' )

REGEXP_COUNT(text, '(a)(a)'' ) 같은 표현

* 정규식 기호

^ : 해당 문자로 시작하는 라인

$ : 해당 문자로 끝나는 라인

. : a로 시작해서 b로 끝나는 라인 . 1글자

* : 모든, 0포함

[] : 해당문자의 한 문자

[^] : 해당 문자에 해당하지 않는 한 문자

 

ROUND : 반올림 후 출력

TRUNC : 버림

MOD(a,b) : 나눈 후 나머지

CEIL : 올림

FLOOR : 가장 근접한 작은 정수

POWER(a,b) : 숫자 a의 숫자 b승

SYSDATE : 시스템의 현재 날짜와 시간

MONTHS_BETWEEN

ADD_MONTHS

NEXT_DAY : 찾고자 하는 기준이 돌아오는 첫 번째 (남은 날 중 가장 빠른 월요일 등)

LAST_DAY : 주어진 날짜가 속한 달의 마지막 날짜

CHAR : 2천바이트, 유일한 고정길이 문자

VARCHAR2 : 4천바이트, 가변길이문자

NUMBER (정수, 소수점이하 들어갈 자리수) : 정수 1~38자리, 소수는 -84~127까지 가능

DATE : 7바이트

LONG

CLOB

BLOB

RAW

LONG RAW

BFILE

* 형변환함수

TO_CHAR(a,b) : 명시적 형변환함수. 날짜에서 문자, 숫자에서 문자

TO_NUMBER : 형변환함수

TO_DATE : 형변환함수 * 년도에서 50 기준 낮으면 4자리 사용할 것.

 

NVL (칼럼명, 바꿀값b) : null 값을 b로 대체

NVL2 (a,b,c) : a가 null이 아니면 b, null이면 c

DECODE : IF문과 비슷. 오라클에서만 사용. 함수 중첩 가능. 동격인 값 처리

ex: DECODE (A, B, DECODE(C,D,',null))

 

CASE : CASE 조건 WHEN 결과 THEN 출력 ELSE 출력 END "컬럼명"

DECODE보다 CASE문 지향

 

 

복수행 함수

 

COUNT() : 개수를 세어줌 (COUNT(*) ; 모두)

SUM() : 합계, AVG() : 평균

MAX() : 최대, MIN() : 최소

GROUP BY : 컬럼명으로 그룹화. Alias x

HAVING : 그룹함수의 조건* where절은 그룹함수를 비교조건으로 쓸 수 없음.

분석 함수, 윈도 함수

 

ROLLUP : 소계, 빨라짐

CASE : 소계와 합계도 출력

PIVOT : 행을 열 단위로 변경

UNPIVOT : 열을 행 단위로 변경

SUM() OVER : 누계

RANK(조건값) WITHIN GROUP (ORDER BY 컬럼명 [ASC]) : 순위 출력

RANK(조건값) OVER GROUP (ORDER BY 컬럼명 [ASC]) : 전체순위 출력

DENSE_RANK : 동일 순위를 하나의 건수로 취급. 한국에서 많이 쓰임. (1,2,2,3,)

ROW_NUMBER : 동일값도 고유 순위 부여 (1,2,3,4,)

*RANK OVER, DENSE_RANK, ROW_NUMBER 차이

 

CREATE AS FROM : 테이블 복사

PARTITON BY : 그룹핑할 구문

ex. RANK() OVER (PARTITON BY deptno ORDER BY sal DESC)

alnum : 알파벳과 숫자

\ : 메타캐릭터의 의미를 제거하는 탈출 문자. ?, *, ' 등과 같이 쓰임

 

 

JOIN : JOIN은 Oracle JOIN, ANSI JOIN 문법이 있다.

 

1) Oracle JOIN

SELECT table1.col1, table2.col2
FROM table1 alias1, table2 alias2
WHERE table1.col2 = table2.col2;

 

2) ANSI JOIN  

* 선행 테이블은 조회할 적은 데이터의 테이블, 기준이 되는 테이블로 선택할 것.

SELECT a.col1, b.col1
FROM table 1 a [INNER] JOIN table2 b
ON a.col2 = b.col2;

 

카티션 곱 :

Equi Join : 등가 조인 (where에서 =)

Non-Equi Join : 비등가 조인

SELF JOIN : 테이블 안의 데이터 합쳐서 출력

INNER JOIN : 교집합 <-> OUTER JOIN : 없어도 보여줌

1) Oracle OUTER JOIN : null 쪽에 (+)

SELECT s.name "A", p.name "B"
FROM student s, professor p
WHERE s.profno(+) = p.profno;

 

2) ANSI OUTER JOIN : 데이터가 존재하는 쪽에 LEFT/RIGHT/FULL OUTER JOIN표시

SELECT s.name "A", p.name "B"
FROM student s RIGHT OUTER JOIN professor p
ON s.profno = p.profno;

* 합칠 경우 오라클 JOIN은 UNION, ANSI JOIN는 FULL OUTER JOIN 사용.

 

 

DDL, DML

데이터베이스 내부에 데이터를 관리하기 위해 다양한 저장 객체Object 를 생성하고 이 중 데이터를 저장하기 위한 별도의 저장 공간Segment라 한다. 이런 오브젝트를 생성, 변경 관리하는 명령어가 DDL이다.

 

DDL (Data Definition Language) : CREATE(생성), ALTER(변경), TRUNCATE(잘라내기), DROP(삭제)

DML (Data Manipulation Language) : INSERT, UPDATE, DELETE, MERGE(병합)

DCL (Data Control Language) : GRANT(권한주기), REVOKE(권한뺏기)

TCL (Transaction Control Language) : COMMIT(확정), ROLLBACK(취소)

CREATE : 오브젝트나 스키마 생성. CREAT TABLE 테이블이름(칼럼 이름 형식(자리수) );

지정하지 않으면 null이나 DEFAULT 뒤에 붙은 값은 자동으로 넣을 수 있음

* 테이블 이름은 문자로 시작하며 30바이트까지 가능. 같은 계정 내 중복 불가.

 

CREATE TABLE tt02
(no     NUMBER(3,1)   DEFAULT 0,
name    VARCHAR2(10)  DEFAULT 'NO Name',
hiredate  DATE        DEFAULT SYSDATE);

CREATE GLOBAL TEMPORARY TABLE ( ) ON COMMIT delete ROWS; 임시테이블 생성하기

CTAS : 테이블 복사하기 : CREATE TABLE 테이블명 AS~ (where에 false식을 넣으면 테이블의 구조만 가져올 수 있다.)

ALTER : 컬럼 추가. 삭제, 이름 변경, 테이블이름변경

DELETE : 컬럼의 데이터 삭제

TRUNCATE : 차지하는 공간 삭제

DROP : 스키마, 테이블 모두 삭제 // 사용 시 주의

ALTER TABLE table1 read only; : 읽기전용

데이터 딕셔너리 : 데이터베이스를 운영하기 위한 정보를 모아둔 테이블. 중요해서 data dictionary view로만 조회 가능

base table은 데이터베이스 생성 시점 자동 생성되나 dictionary view는 catalog.sql이 수행되야 만들어짐

INSERT INTO table (column... ) VALUES (value...); (where에 false식을 넣으면 테이블의 구조만 가져올 수 있다.)

INSERT ALL WHEN ( ) THEN ( ) INTO ( ) VALUES ( ) WHEN ( ) THEN ( ) INTO ( ) VALUES ( )

UPDATE table SET column=value WHERE 조건;

 

 

제약조건

NOT NULL : NULL로 변경하는 것은 ALTER ~ MODIFY를 이용해서 변경

UNIQUE : 중복값이 없어야 함.

PRIMARY KEY : NOT NULL + UNIQUE의 특징을 가지며 테이블들끼리의 유일성을 보장하는 컬럼에 설정. 테이블당 1개만 설정 가능

FOREIGN KEY : 다른 테이블의 컬럼을 참조

CHECK : 설정된 값만 입력 허용

CASCADE : 부모 테이블과 자식 테이블 간의 참조 설정이 되어 있을 때 부모 테이블의 제약 조건을 비활성화하면 이를 참조하고 있는 자식 테이블의 제약 조건까지 같이 비활성화시켜 주는 옵션

728x90
728x90

'SQL > Oracle' 카테고리의 다른 글

맥OS Mojave에서 도커로 오라클 설치하기  (1) 2019.10.05
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v