데이터베이스 이론정리
DDL : 데이터 정의어
- create
- alter
- drop
DML : 데이터 조작어
- select
- update
- insert
- delete
DCL : 데이터 확정어
- rollback
- commit
- 서브쿼리를 사용할 수 있는 곳
select
from
where
order by
insert 문의 values
update 문의 set
if(조건문,true참일때값,false거짓일때값)
ifnull(column_name, 대체할 값)
: 해당필드의 값이 null을 반환할 때 지정한 값으로 대체하여 출력해준다
isnull(column_name,value)
: null인경우 value값을 출력
null이 아니면 지정한 column의 데이터 출력
union연산자
: 2개 이상 테이블에 존재하는 같은 성격의 값을 한번의 쿼리로 출력
- union 을 사용할때 컬럼의 이름이 같아야함
(같지 않다면 as를 통해 같게 만들어야함)- 대응되는 컬럼의 데이터 타입이 같아야한다
중복제거하고 값 추출 > union
중복 허용하고 모든 값 추출 > union all
- 테이블의 동작속도를 높여주는 자료 구조이다
- 인덱스로 데이터의 위치를 빠르게 찾아주는 역할
- 데이터의 저장성능을 희생하여 데이터의 읽기 속도를 높임
- 인덱스는 데이터의 양이 천만개 이상일때 효과가 있다 그 이하는 크게 차이가 없음
- select 검색속도를 크게 향상시킨다.
- 인덱스 생성시 DB크기의 약 10%정도되는 추가 공간이 필요함
- 인덱스 생성시 시간이 걸린다
- insert, update, delete와 같은 데이터 변경이 자주 일어나면 오히려 성능이 감소된다.
- 데이터 조회에는 good, 변경에는 bad
- 형식 : CREATE INDEX 인덱스명 on 테이블명(인덱스를 걸 컬럼명);
: 특정 레코드를 유일하게 식별하기 위해 사용되는 필드. 각테이블에는 반드시 있어야함
- 각레코드에 대해 고유하다(unique)
- null값허용안됨
- 레코드식별하는데 사용 테이블당 하나의 기본키만 지정가능
: 하나의 테이블에서 다른 테이블의 기본키를 참조하는 키
데이터베이스에서 무결성을 유지하는데 중요한 역할
- 데이터 무결성 외래키를 사용하면 데이터베이스에서 참조무결성을 유지할 수 있음
- 자식테이블의 레코드를 삭제하거나 업데이트 할 때 부모테이블의 기본키를 참조하지 않으면 데이터베이스에서 오류를 발생시킨다
- 데이터 일관성 유지 : 외래키를 사용하면 부모테이블에서 레코드를 업데이트 하거나 삭제할 때 자식테이블에서도 일관성을 유지할 수 있음
- 관계정의 : 외래키를 사용하면 데이터베이스에서 테이블 간의 관계정의 가능 이를 통하여 두개 이상의 테이블에서 데이터를 쉽게 검색하고 조인할 수 있다
- (inner) join : 조인하는 테이블의 on절 조건이 일치하는 결과만 출력
- left/right outer join : 두 테이블이 합쳐질 때 왼쪽이 기준이 되는 테이블이다 > left
오른족이 기준이 되는 테이블이다 > right
outer join은 조인하는 테이블의 on절의 조건 중 한족의 데이터를 모두 가져온다
outerjoin은 right left full이렇게 3가지가 있다
대부분 left를 사용 full은 성능상 거의 사용불가능
원하는 정보가 3개의 테이블에 분산되어 있는 경우
outer join을 3번 연속으로 사용하면 된다
먼저 2개 조인하고 조인한 테이블을 한번더 조인
: 해커에 의해 조작된 SQL쿼리문이 데이터베이스에 그대로 전달되어 비정상적인 명령을 실행시키는 공격기법