DataBase
in Programming on SQL
Oracle(비쌈), MySQL(이제 더이상 update안됨), MariaDB(MySQL과 비슷하다), Postgre
SQL : Structured Query Language
기본 개념
데이터 : 어떤 필요에 의해 수집했지만 아직 특정 목적을 위해 평가하거나 정제하지 않은 값
정보 : 수집한 데이터를 어떠한 목적을 위해 분석하거나 가공하여 가치를 추가하거나 새로운 의미를 이끌어 낼 수 있는 결과
L자형 테이블 : Null 있는 사람들이 위에 있는 것. 근데 이렇게 하면, 불편해서
테이블 수평분할: 아예 자기에 맞춰서 표를 따로 만든다. 예를들어 차가 없는 사람은 따른 테이블에..
근데 일케되면, 차를 사고 팔고 하는 것들을 표현하는 것에 시간이 많이 든다.
테이블 수직분할: 고객에 대한 정보, 차에 대한 정보를 나누어서 표에 나타냄.
관계형성: primary key를 가지고 관계 형성. 부모 테이블이 주체적인 역할 담당. primary key는 유일한 값이어야한다.
primary key: 해당 테이블의 각각의 레코드를 유일하게 구분할 수 있는키(not duplicated, not null)
foreign key: 자식 테이블에서의 프라이머리 키를 foreign key 라고 한다. null 도 가능, 중복 가능
다른 테이블(부모 테이블)의 PK 가 전이되어 현재 테이블의 컬럼으로 들어온 컬럼
foreign key 를 가진 것은 항상 부모다.
RDBMS : 부모 자식간에 관계를 가지는 테이블
NoSQL : Not only SQL (SQL 만 있는게 아니다. 빅데이터를 처리하기 위한 툴 ) , mongoDB
객체 :user, table, index, View, Synonym, sequence(일련 번호를 자동으로 발생시켜주는 객체)
RDBMS의 제약조건
관계를 맺게 되면 몇가지 제약 조건이 생기게 된다.
제약 조건 5개 : PK, FK, CHECK, NOT NULL, UNIQUE
무결성: 전체 테이블의 신뢰도
on delete cascade:
부모 테이블에서 정보를 지울경우, 자식 테이블에서 문제가 생긴다. foreign key는 부모테이블을 참조하고 있기 때문이다. 그래서 못지우게 막거나, 자식 테이블에 있는 것도 함께 지워버린다 (자식테이블에 걸어두면 된다.)
on update casecade:
프라이머리키가 바뀌면 자식테이블의 포레인키도 바꾼다. (on update cascade)
자식테이블의 데이터를 입력 시, foreign key가 부모테이블에 있는지 확인
NN(Not Null): 데이터가 꼭 입력되어야한다(Nullable = false)
Check: 값의 범위를 한정시키는 것이다. 정해진 값만 or 특정 범위 이내만…
Unique: primary key는 아니지만, 전체 데이터에서 unique 해야한다.
DDL(Database Definition Language)
object를 관리하기 위한 것들을 합쳐서 DDL(Data Definition Language)이라고 부른다.
create :
객체 생성 (create table, create index, create user…)
--table 만들기, tableName 가 테이블 이름. CREATE TABLE tableName( 컬럼명1 데이터타입 [제약조건], 컬럼명2 데이터타입 [제약조건] );
- 제약 조건 5개 : PK, FK, CHECK, NOT NULL, UNIQUE
- 데이터타입 vachar2[바이트], char[바이트], number(자리수),date…
CREATE TABLE emp ( empid number(5), ename varchar2(50), hiredate date, salary number(7) );
alter :
객체를 수정할 때 사용한다.
cmd 창이 아니라 start db 창
conn system/system alter user hr identified by hr account unlock; conn hr/hr
drop :
삭제
DROP TABLE emp;
DML(Data Manipulation Language)
insert
데이터를 삽일할 때 사용한다.
주의) 오라클에서는 문자열을 ‘ ‘(작은 따옴표)안에 넣는다.
INSERT INTO emp (empid, ename, hiredate, salary) VALUES (12345,'박핀','20-12-23',380000); --컬럼전체 다 넣을때 위 두번째 줄 생략 가능 INSERT INTO emp VALUES (12345,'박핀','20-12-23',380000);
update
레코드 수정
UPDATE 테이블명 SET 컬럼명 = 값, 컬럼명 = 값, WHERE 조건절; ------------------------ UPDATE emp SET hiredate = '20-10-12' WHERE empid = 12347;
delete
select
기본 사용 방식
select 컬럼명1,컬럼명2,컬럼명3 from 테이블명; select first_name, last_name from employees; select * from employees; -- 모든 컬럼을 다 보겠다.
**옵션 : ** where, distinct , order by, and, desc
select first_name, last_name from employees where department_id=80; select distinct department_id from employees; -- 중복없는 데이터만 select first_name, last_name from employees where department_id=80 order by first_name; --오름차순으로 정렬할 때 select first_name, last_name from employees where department_id=80 order by first_name desc; --내림차순으로 정렬할 때 -- 급여가 오천불 이상 만불 미만인 직원의 부서번호, 이름, 급여 : and, or select first_name, last_name, salary from employees where salary >=5000 and salary<10000 order by salary desc;
기타
- ROLLBAKC; – 되돌리기, DDL 전까지 모든 DML을 다 날려버린다.(하나의 트랜잭션을 날린다.)
- COMMIT; –작업한 것 적용, SAVE와 비슷하다.
DCL
자료형
varchar2(길이) :
자바의 String 과 똑같다. 가변 문자열 (variable character) . 최대 varchar2(4000)이 최대
ex. varchar2(50)
char(50) :고정문자열
char(30)에 10 바이트가 들어가면 30바이트가 쓰여서 메모리가 낭비된다.
varchar2(30)에 10 바이트 짜리가 들어간다면, 20바이트가 다른데 쓰여서 메모리가 절약된다.
그래서 보통 varchar2를 쓴다.
date :
‘20-12-23’ 이런 식으로 사용한다.
BLOB:
Byte 단위로 처리되어야하는 데이터. java에서 stream으로 처리하는 것과 비슷하다.
CLOB:
Character 단위로 처리되어야하는 데이터.
bfile
number(p,s) : 정수 실수 다 합쳐서 넘버라고.