본문 바로가기

Back-end/MySQL

MySQL 기본

용어

Relation(Table)

  • cardinality: tuple의 개수
  • degree(차수): 전체 attribute의 개수

Keys

 

-  Primary Key(PK): tuple을 대표할 수 있는 key (학번, id, ...)

    - null 값을 가질 수 없다.

 

- Forien Key(FK): 현재 table에서 다른 table(부모 table)의 기본키를 참조할 때 해당 속성은 현재 table(자식 table)의 Forien Key가 된다.

    - 부모 table에 없는 값이 있을 수 있기 때문에 null 값을 가질 수 있다.

 

문법

 

select <...> from <...> where <...>

query 실행 순서


Example Query

1. emp table에서

2. job 속성의 값이 SALES인 tuple은 제외

3. job이 같은 값끼리 group으로 묶는다.

4. 묶인 group에서 sal의 합이 5000 초과인 group만 남긴다.

5. sal의 합계의 내림차순으로 정렬한다.

6. job과 sum(sal)을 급여합계로 select해 출력한다.

 

count, max, min, sum, avg 등의 집계함수를 사용할 때 select절에서 다른 속성을 선택할 수 없다. (여러 tuple들이 선택되며 연산이 진행되기 때문)
group by를 사용하면 tuple들이 group으로 묶이기 때문에
select 소속학과, count(주소) from 학생 group by 소속학과;
와 같이 각 group의 속성 값을 표시할 수 있다.
다음과 같이 having으로 나누어진 group 내에서 추가로 조건을 줄 수 있다.

select 소속학과, count(*) from 학생 group by 소속학과 having 소속학과 != '컴퓨터';
select 소속학과, count(*) from 학생 group by 소속학과 having count(*) > 2;

 


Inner Select

select * from 학생
where 학번 in(select 학번 from 수강 where 과목번호 = 'c002');

 

학생 안에서 in 괄호 안의 학번의 모든 속성을 select 할 것이다.

 

in 안은 수강 안에서 과목번호가 c002인 학번을 select 할 것이다. 

 

where절의 속성과 Inner select에서 select되는 속성이 같아야 한다.

Join (Natural Join)

1. 카티션 곱 (cartesian product) (cross join)

: 두 테이블에 카티션 곱을 적용하면 튜플의 총 개수는 두 테이블의 튜플의 개수 합, 속성의 총 개수는 두 테이블 속성의 개수 합이 된다.

select * from 학생, 수강;

 

2. 의미있는 튜플을 뽑아내기 위해 where로 한 테이블의 PK와 다른 테이블의 FK에대한 조건을 준다.

select * from 학생, 수강 where 학생.학번 = 수강.학번;

Inner Join

두 테이블에 공통적으로 존재하는 tuple에 대해 join한다.

Left Outer Join (Right Outer Join)

앞에 쓰인 테이블 기준으로 outer join한다.

 

기준 테이블의 tuble에 대해 join할 값이 없으면 뒤에오는 테이블에서 join할 값이 없으면 null로 채워진다.

Full Outer Join

left outer join과 right outer join의 결과를 이어서 보여준다. (cross join과 다름)

Self Join

테이블 별칭 사용해서 join한다.

 

값은 값을 사용하는 속성이 여러 개 있을 때 사용할 수 있다. (예를 들어 id와 상사id 속성)