본문 바로가기

기타

얕고 넓은 데이터베이스 지식

Mysql 기준으로 작성되었습니다.

용어 정리

스키마: DB, 테이블의 정의 내역

외래키: 어떤 테이블의 기본키가 다른 테이블의 컬럼에 들어 있는 경우

NoSql: 검색보다 저장속도가 중요한 경우에는 별도로 다루는 NoSQL과 같은 시스템을 고려할 수 있다.

DML: 테이블의 데이터를 조작 (CRUD)

DDL: 테이블의 스키마를 정의, 수정 (create, drop, alter)

DCL: 테이블 접근 권한 (grant, revoke)

join

inner join: null값을 허용하지 않음

Left join: join의 왼쪽 테이블의 null값을 포함

right join: join의 오른쪽 테이블의 null값을 포함

view

생성

create view 뷰이름 as 셀렉트구문

삭제

drop view 뷰이름

select into, insert into

select into: select한 값으로 테이블을 만든다.

create table 테이블이름 셀렉트구문

insert into: 셀렉트의 결과를 테이블에 데이터를 추가

insert into 테이블이름 셀렉트구문

case

조건문

case 
    when 조건 then 행동  
    when 조건 then 행동 
    end

like 검색: 패턴 매칭

select 컬럼이름 from 테이블이름 where 컬럼명 like *패턴

패턴예시 ('%', '_' 활용)

예시1) '%k' - k로 끝나는 문자

예시2) 'k%' - k로 시작하는 문자

예시3) 'k__' - k로 시작하는 3글자

주의! Like 검색은 DBMS에 부담이 많이 가서 or같은 논리연산자를 함께 사용하는 것은 자체하는 것이 좋다.

null 함수

컬럼이 Null일 경우 이를 어떻게 처리할지 명시하는 함수 Mysql에는 ifnull / coalesce 이 있다.

sum같음 함수에는 null의 처리가 내장되어 있다.

group by / having

group by: 보통 집합 함수와 함께 사용되어 그룹별 연산을 적용할 수 있다.

having: group by의 결과에 조건절을 걸 때 사용

ALL / ANY

ALL

select
	Name 
from  
	city 
where  
	Population > ALL(select Population from city where CountryCode = 'KOR')

=> CountryCode가 'KOR'인 도시 인구의 최댓값보다 많은 인구 수를 가진 도시의 이름을 출력하게 된다.

ANY

select 
    Name 
from 
    city 
where  
    Population > ANY(select Population from city where CountryCode = 'KOR')

=> CountryCode가 'KOR'인 도시 인구의 최솟값보다 많은 인구 수를 가진 도시의 이름을 출력하게 된다.

EXISTS

where in의 서브쿼리 버전이라고 생각하면 쉽다.

사용: where exists (서브 쿼리)

select * from  
    Customers c 
where exists  
    (select 
    	* 
    from 
    	Orders o
    where 
    	c.CustomerId = o.CustomerId and o.OrderDate = '1996-08-14')

 

=> 결과적으로 1996-08-14 에 상품을 주문한 고객의 목록을 출력

UNION

합집합의 표시

사용: select 문 UNION select 문

※ 기본적으로 distinct가 적용되어 있기 때문에 중복을 허용하고 싶다면 UNION ALL 을 활용할 것

자료형

1. 정수형

TINYINT 
INT 
BIGINT

2. 실수형

FLOAT
DOUBLE
DECIMAL

3. 문자열

CHAR (고정 길이) 
VARCHAR (가변 길이)

4. 텍스트

TEXT (최대 약 6만 글자) 
MEDIUMTEXT (최대 약 1600만 글자)  
LONGTEXT (최대 약 40억 글자)

5. BLOB (동영상같은 바이너리 데이터)

BLOB 
MEDIUMBLOB 
LARGEBLOB

6. 시간 관련

DATA (년월일) 
TIME (시분초) 
DATETIME (년월일 시분초) 
TIMESTAMP (년월일 시분초 형태이나 1970-01-01 이후 경과한 시간을 표시해줌)

Index

인덱싱을 하면 검색이 빨리진다. 하지만 데이터 입력, 수정, 삭제 시에는 더 퍼포먼스가 떨어진다. 이를 감안하여 적용을 결정해야 한다.

기본키는 자동으로 인덱스가 설정된다.

 

인덱스 추가 방법: create index 인덱스 이름 on 테이블명(컬럼명)

create index Card_index on Card(card_number);

스토리지 엔진

데이터베이스가 데이터를 CURD 할 때 사용하는 기본 컴포넌트

Myisam과 InnoDB 가 있다.

Myisam: 상대적으로 높은 성능
InnoDB: 상대적으로 높은 안정성 (mysql은 기본적으로 InnoDB 사용)
반응형