본문 바로가기

DB

오라클 책 정리

오라클 SQL 정리

1. 네이밍 규칙 (접두어/표기법)

  • DB 이름: 첫 자만 대문자 (예: Study)
  • 키워드: 모두 대문자 (SELECT, CREATE 등)
  • 테이블: t 접두어, 첫 자 대문자 (예: tCity, tMember)
  • 필드: 모두 소문자, 여러 단어일 경우 어근만 대문자 (예: name, orderDate)

2. 주요 데이터 타입

  • INT : 정수
  • DECIMAL : 실수
  • CHAR : 고정 길이 문자열
  • VARCHAR : 가변 길이 문자열
  • DATE : 날짜

CHAR vs VARCHAR

  • CHAR(10) : 값이 3글자면 나머지 7자리를 공백으로 채워 반환
  • VARCHAR(10) : 들어간 값만 저장
  • CHAR → 속도 빠름 (길이가 일정한 데이터에 적합: 주민등록번호, 우편번호)
  • VARCHAR → 용량 유리 (길이 일정치 않은 데이터에 적합: 영화 제목, 댓글)

3. 테이블 생성 예제

CREATE TABLE tStudy (
    name CHAR(10) PRIMARY KEY,
    area INT NULL,
    popu INT NULL,
    metro CHAR(1) NOT NULL,
    region CHAR(6) NOT NULL
);

INSERT INTO tStudy VALUES ('서울', 605974, 'y', '경기');
  • F11 → Commit
  • DROP TABLE tStudy;

4. MySQL vs Oracle 차이

  • MySQL → CREATE DATABASE, USE DB명 필요
  • Oracle → DB 인스턴스가 이미 있음, 로그인하면 바로 Schema 단위 사용
    → 일반 유저는 CREATE DATABASE 거의 안 씀, 바로 CREATE TABLE 가능

5. Oracle 계정 구조

  • SYS : 최상위 관리자 (관리 전용)
  • SYSTEM : 일반 DBA 용도
  • 일반 유저 (예: SCOTT) : 실무/업무 테이블 생성
  • 실무에서는 SYS 안 쓰고 SYSTEM/일반 계정 사용

6. 별명 (Alias)

SELECT name AS 도시명,
       area AS "면적(제곱 km)",
       popu * 1000 AS "인구(명)"
FROM tCity;
  • 별명은 AS로 지정
  • 공백, 특수문자, 괄호 포함 시 반드시 큰따옴표 사용

7. DUAL 테이블

  • 오라클은 단순 계산용 더미 테이블 DUAL 제공
SELECT 60*60*24 AS "하루" FROM dual;

8. 비교 / 패턴 연산자

  • LIKE '%천%' : "천"이 포함된 도시
  • LIKE '천%' : "천"으로 시작
  • LIKE '%천' : "천"으로 끝
    → Oracle은 CHAR 타입 뒤에 공백 채움 → '%천 ' 이렇게 공백 맞춰야 함
  • 와일드카드 자체 검색 시 ESCAPE 사용
WHERE sale LIKE '%30#%' ESCAPE '#';

9. IN 연산자

SELECT * FROM tCity WHERE region IN ('경상', '전라');

10. DISTINCT

SELECT DISTINCT region FROM tCity;

11. 의사 컬럼 (Pseudo Column)

  • ROWNUM : 일련번호
  • ROWID : 고유 식별자
SELECT * FROM (SELECT * FROM tCity ORDER BY area DESC) WHERE rownum <= 4;

→ 반드시 서브쿼리로 정렬 후 잘라내야 원하는 결과 가능


12. OFFSET / FETCH

SELECT * 
FROM tCity 
ORDER BY area DESC 
OFFSET 2 ROWS FETCH NEXT 3 ROWS ONLY;

13. 집계 함수

  • COUNT() : 레코드 수
  • SUM() : 합계
  • AVG() : 평균
  • MIN() : 최소값
  • MAX() : 최대값
  • STDDEV() : 표준편차
  • VARIANCE() : 분산

NULL 처리

  • 대부분 집계 함수는 NULL 제외
  • 단, COUNT(*) 는 NULL도 포함 (레코드 수 기준)

14. GROUP BY

SELECT depart, AVG(salary)
FROM tStaff
GROUP BY depart;
  • 그룹 기준 필드와 집계함수만 같이 출력 가능
  • 집계 없는 일반 필드 단독 출력 불가

15. HAVING

SELECT depart, AVG(salary)
FROM tStaff
GROUP BY depart
HAVING AVG(salary) >= 340
ORDER BY AVG(salary);
  • HAVING 은 그룹핑된 결과에 대한 조건
  • WHERE 은 행(row) 조건

요약

  • Oracle 은 Schema 중심 구조 (MySQL 과 다름)
  • SYS 계정은 관리 전용, 업무는 SYSTEM/일반 계정 사용
  • 별명 지정 시 큰따옴표 필요
  • ROWNUM, ROWID 는 Oracle 특수 컬럼
  • 집계 함수는 NULL 처리 주의
  • GROUP BY + HAVING 은 반드시 구분해서 사용해야 함