생활코딩 Oracle 강의를 듣고 정리한 내용입니다
PRIMARY KEY
식별자가 되기 위해서는 중복되면 안된다
->id값이 같을 경우 검색이 어렵기 때문이다
가급적이면 처음부터 추가하는게 좋다
(토픽) 테이블 삭제
DROP TABLE topic;
실제로는 WHERE을 지정해서 삭제해야한다
CONSTRAINT 제약조건
CONSTRAINT PK_TOPIC PRIMARY KEY(id)
제약조건 : 프라이머리 키 이름 어디에 제약을 걸 것인가?
CREATE TABLE topic (
2 id NUMBER NOT NULL,
3 title VARCHAR2(30) NOT NULL,
4 description VARCHAR2(4000),
5 created DATE NOT NULL,
6 CONSTRAINT PK_TOPIC PRIMARY KEY(id)
7 );
PRIMARY KEY를 지정하면 지정한 값은 유일무이해진다
지정되어있는 데이터는 검색을 쉽게 만들어주기 때문에,
필수는 아니지만 되도록 쓰는게 좋다
SEQUENCE
CREATE SEQUENCE SEQ_TOPIC
시퀀스를 생성 자동으로 1씩 증가하는 값을 만들 수 있다
SEQ_TOPIC.NEXTVAL //id값 대신에 사용
기존값이 있으면 충돌하기에 id 값을 지워준다
시퀀스의 현재 값 조회
SELECT SEQ_TOPIC.CURRVAL FROM topic;
SELECT SEQ_TOPIC.CURRVAL FROM DUAL;
PRIMARY KEY – SEQUENCE를 같이쓰면 더 좋다
서버와 클라이언트
host = 데이터베이스 서버의 ip나 도메인
server = oracle server
client = sqlplus
명령어 만으로는 데이터베이스를 제어하기 어렵기 때문에
gui 방식으로 사용하는 SQL Developer를 써준다
**SQL Developer외에도 client가 존재한다 자신에게 맞는 것을 사용하면 된다
강의에서는 접속유형을 로컬로 했지만,
로컬로 하다가 오류가 나서 찾아보니 그냥 기본값으로 접속하면 된다고 한다
아이디와 비밀번호 값은 강의 초반에 생성한 데이터베이스 아이디와 비밀번호를 입력하면 된다
관계형 데이터베이스
데이터의 입력의 편의를 위해서 테이블을 분리한다.
테이블을 분리하면 쓰기가 좋아지고 읽기는 불편해진다
->'JOIN'을 통해서 테이블들을 결합하여 보기 편하게 만든다.
**입력의 편의 외에도 데이터베이스에서 테이블에 정보가 너무 많은 경우(컬럼이 많은 경우), 데이터 베이스의 연산 능력이 저하될 수 있기에 데이터베이스를 여러 개의 테이블로 쪼개게 된다.
SELECT * FROM topic LEFT JOIN author
왼쪽을 기준으로 오른쪽 테이블 연결
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;
왼쪽을 기준으로 오른쪽 테이블 연결하고 id 값을 합쳐준다
SQL Developer 실습
DDL => sql문으로는 어떤 형태인지 보여준다
author 테이블 생성
topic테이블 더블클릭 후 colums 의 수정버튼(흰 종이에 연필) 클릭
시퀀스 생성 SEQ_AUTHOR
sql 워크시트 열기
INSERT INTO author (id, name, profile) VALUES(SEQ_AUTHOR.nextval, 'egoing', 'developer');
INSERT INTO author (id, name, profile) VALUES(SEQ_AUTHOR.nextval, 'duru', 'DBA');
INSERT INTO author (id, name, profile) VALUES(SEQ_AUTHOR.nextval, 'taeho', 'data scientist');
워크 시트에 입력 후 topic 테이블의 author id 값 변경
조인하기
SELECT * FROM topic
LEFT JOIN author ON topic.author_id = author.id
;
중복된 값이 있을 경우 ambiguous 출력
->topic.id author.id로 구분해준다
topic.id TOPIC_ID //별명 부여
SELECT topic.id TOPIC_ID, title, name FROM topic T
LEFT JOIN author ON topic.author_id = author.id ;
같은 의미이다
SELECT T.id TOPIC_ID, title, name FROM topic T
LEFT JOIN author ON T.author_id = author.id ;
하나의 행을 가져오기
SELECT
T.id TOPIC_ID
title,
name
FROM topic T
LEFT JOIN author A
ON T.author_id = A.id
WHERE
I.id = 1
;
-> 이후 index를 미리 공부하기를 추천받았다
'백엔드 > Database' 카테고리의 다른 글
TIL 정리_113(데이터베이스&SQL 문법) (0) | 2022.06.29 |
---|---|
TIL 정리_55(인덱스) (0) | 2022.04.12 |
TIL 정리_43(Oracle) (0) | 2022.03.30 |
TIL 정리_35 (0) | 2022.03.22 |
TIL 정리_34(MySql) (0) | 2022.03.21 |