ORACLE
업데이트:
[생활코딩 - DATABASE - ORACLE]내용입니다.
ORACLE
ORACLE에 대한 소개
ORACLE은 RDMBS(관계형 데이터베이스 관리 시스템)의 가장 오래된 강자.
관계형 DB란 행(row)과 열(column)로 표현한 표(table)와 행과 열의 상관관계로 정의하는 관계 모델에 의한 데이터 베이스.
사용자(USER)와 스키마(SCHEMA)
스키마란 서로 연관된 표를 그룹핑 하는 일종의 디렉토리.
쉽게 말해 스키마 내의 속한 TABLE을 설명하는 것.
➡️ PJT 진행 간 늘어나는 테이블을 체계적으로 관리하기 위해 중요함.
사용자란 스키마를 관리하는 주체를 말함.
DB가 설치된 PC에 네트워크로 접속하여 작업을 하기 때문에 여러 사용자가 존재할 수 있음.
테이블
테이블 생성하기
CREATE TABLE topic (
id NUMBER NOT NULL
title VARCHAR2(50) NOT NULL
description VARCHAR2(4000)
created DATE NOT NULL
);
NOT NULL : 공백을 허용하지 않음
테이블 목록 조회하기
SELECT table_names
FROM all_tables
WHERE OWNER = 'EGOING'
행추가
INSERT INTO topic
(id,titile,descrption,created)
VALUES
(1,'ORACLE','ORACLE is ...', SYSDATE);
INSERT INTO topic
(id,titile,descrption,created)
VALUES
(2,'MySQL','MySQL is ...', SYSDATE);
SQL
관계형 데이터베이스를 제어하는 컴퓨터 언어를 SQL(Structured Query Language)이라고 한다.
행 읽기
어떤 데이터를 가져올 것인가가 핵심
- 모든 행/열을 가져온다
SELECT * FROM topic;
- 특정 컬럼만 가져온다.
SELECT id, title, created FROM topic;
- 특정 조건을 만족하는 행을 가져온다.
SELECT * FROM topic WHERE id = 1;
- 특정 컬럼에서 조건을 만족하는 행을 가져온다.
SELECT id, title, created FROM topic WHERE id = 1;
- 조회되는 결과를 정렬하기
SELECT * FROM topic ORDER BY id DESC;
- 조회되는 데이터 양을 제한하기
SELECT * FROM topic OFFSET 1 ROWS;
OFFSET 이라는 것은 0번째 이후에 나오는 행들을 가져온다.
즉, OFFSET1은 1이후의 행을 가져온다.
SELECT * FROM topic
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;
0번째 행부터 1개의 행을 불러와라
행 수정 & 삭제
id가 3인 행을 수정하고 싶을 때
UPDATE topic
SET
title = "MSSQL",
description = "MSSQL is ..."
WHERE
id = 3;
UPDATE(수정)시 WHERE이 없으면 뭔가 잘못되고 있을 수 있다,,,
id가 3인 행을 삭제하고 싶을 때
DELETE FROM topic WHERE id = 3;
테이블을 삭제하고 싶을 때
DROP TABLE topic;
primary key
id라는 항목에 키를 거는 경우
CREATE TABLE topic(
id NUMBER NOT NULL,
title VARCHAR(50) NOT NULL,
description VARCHAR2(4000),
created DATE NOT NULL,
CONSTRAINT PK_TOPIC PRIMARY KEY(id) /* (id,title)*/
);
sequence
primary와 패밀리.
INSERT INTO topic
(id, title, descrption, created)
VALUES
(4,'MongoDB','MongoDB is ...', SYSDATE);
/*기존에는 이렇게 비어있는 행을 생각해서 4라고 입력을 해줬어야 하나*/
CREATE SEQUENCE SEQ_TOPIC;
INSERT INTO topic
(id, title, description, created)
VALUES
(SEQ_TOPIC.NEXTVAL, 'MongoDB','MongoDB is ...', SYSDATE);
/*추가한 seq의 . NEXTVAL을 사용해서 자동으로 기입 가능하다*/
/*seq의 현재 값을 알려면*/
SELECT SEQ_TOPIC.CURRVAL FROM topic;
서버와 클라이언트
오라클은 비싸다..
인터넷을 통해서 오라클이 설치된 PC의 오라클을 제어할 수 있으면 어떨까?
인터넷에 연결된 컴퓨터 한대 한대를 Host 라고 부른다.
Host가 뭐냐 IP 혹은 도메인이라 할 수 있음
정보를 요청하는 Host는 Server
정보를 응답하는 Host는 Client
네트워크로 연결된 PC에 sqlplus를 설치한 Client로 Server에 오라클에 접속한다!
오라클 제어를 편하게 하기 위해 GUI 형식으로 오라클을 제어하는 sqldeveloper를 사용하기도 한다!
표를 분해하고, 조립하기 - JOIN
egoing이 2개가 아닌 1억개가 있다고 하자..
egoing의 profile를 manager가 아닌 DBA로 바꾼다 할 때
1초씩 걸린다하면 3년이 걸린다.
여기서 topic 테이블을 두 개로 나눈다고 하자.
단 author 테이블을 생성하되 topic에 author_id라는 컬럼을 추가하자.
이렇게 나누면 만약 아까와 같이 profile을 수정하고자 할때 author에 있는 값만 수정되면 된다.
그리고 한번도 책을 쓰지도 못한 taeho도 author에 존재할 수 있다.
또한 egoing이 정보가 똑같다 하더라도 다른 사람으로 존재할 수 있다.
JOIN이란?
관계형 데이터베이스에서는 중복 데이터를 피하기 위해서 데이터를 쪼개 여러 테이블로 나눠서 저장하는데 이렇게 분리하여 저장한 데이터에서 원하는 결과를 다시 도출하기 위해 여러 테이블을 조합할 필요가 있습니다.
이때 조인(JOIN) 연산자는 관련 있는 컬럼 기준으로 다시 행을 합쳐 주는 굉장히 powerful한 연산자입니다.
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;
author테이블의 id와 topic테이블의 author_id가 같은 것끼리 붙인다.
끝-!
댓글남기기