본문 바로가기

웹개발

2022-09-19 국비지원 웹개발 25일차

<강사님>

면접관이 join을 해봤냐고 물었을 때, 단순하게 "해봤다." 보다는

"학생 정보 테이블, 성적 테이블이라는 사례를 통해 equi join, self join, outer join 등을 사용해 봤습니다."처럼

잘 포장해서 말하는 것도 중요해요.


정규화, join, subquery, view 등에 대해 배웠다.


1. 정규화

 

위 사진에서 T1의 학번은 프라이머리 키(PK)다.

중복이 불가하고, Null 값이 불가하다.

 

T2의 학번은 포린 키(FK)다.

외래키라고도 하며, PK를 참조해서 만든다. (RDBMS: 관계형 데이터베이스 시스템)

PK가 아닌건 생길 수 없고 포린 키가 존재하면 해당 PK를 지울 수 없다.

데이터의 무결성을 지키기 위한 방법이다.

 

정규화의 목적은 3가지다.

(1) 중복 데이터 발생을 최소화.

(2) Null 발생을 최소화.

ex. 정규화 전 *T 학생 성적 테이블에 아직 시험을 치지 않은 B1을 입력한다면 시험일자, 시험구분, 과목, 성적이 모두 Null이 된다.

(3) 하나의 칼럼에 중복된 의미의 데이터를 배제.

ex.

학번  성명  과목

A1     에이  C, C++   ->   하나의 칼럼에 중복된 데이터가 있다.

B1     비      자바

 

정규화 하면

학번  성명  과목

A1     에이   C

A1     에이   C++

B1     비      자바

이렇게 바뀐다.

 

정규화의 최종 목표는 비정규화다. (데이터를 다시 합친다.)

 

2. join

 

 

 

 

3. subquery

 

 

 

4. view

 

view는 가상의 테이블을 만드는거라 생각하면 편하다.

 

view의 사용목적:

(1) 보안: 보안 사항을 제외하고 view로 만들어서 사용.

(2) 자주 사용하는 쿼리를 사용하기 편하게 만들어준다.

복잡하고 긴 쿼리를 간단하게 사용 가능하다.

 

 

5. 기타

 

(1) 카디션 곱:

T1  join  T2

a            1

b            2

c

-> a1, a2, b1, b2, c1, c2 들이 나온다.

따라서 3x2 = 6개의 행이다.

 

(2) crossjoin: 키 값(조건)이 없이 죄다 선택하는거라 잘 안쓴다.

equi join(등가조인): 일반적인 조인.

non-equi join: 서로 같지 않은걸 찾는 방법을 기반으로 하는데 잘 안쓴다.

inner join(self join): 같은 테이블을 마치 다른 테이블처럼 각각 이름을 주고 join.

(left) outer join: 한 쪽 테이블의 데이터를 무조건 조회한다.

ex. 아직 시험을 안본 학생의 정보도 조회한다.

left만 사용해도 문제가 없는게 customers c left outer join orders o에서 orders 테이블의 자료를 무조건 조회하려면

left를 right로 바꾸지 않아도 orders를 customers랑 바꾸면 된다.

 

(3) merge는 행병합니다.

 

(4) subquery where 절:

서브쿼리의 반환값이 1개라면 =,>,<같은 비교연산자 사용가능.

서브쿼리의 반환값이 여러개면 비교연산자만 단독으로 사용 불가능하고 in 이나 all등을 사용한다.

in은 서브쿼리의 반환값 안에 있는 것과 비교.

exists는 메인쿼리의 반환값을 서브쿼리에 대입해 비교.

 

>any(10, 20, 30): 10보다 크거나, 20보다 크거나, 30보다 크거나.

최소값을 반환한다. 즉, 10보다 크다. (any = 이거나)

<any(10, 20, 30): 최대값을 반환한다. 즉, 30보다 작다.

>all(10,20,30): 10보다 크고, 20보다 크고, 30보다 크다.

최대값을 반환한다. 즉, 30보다 크다. (all = 그리고)

<all(10,20,30): 최소값을 반환한다. 즉, 10보다 작다.

 

(5) where 절: select 하기전 모든 row를 대상으로 필터.

having 절: group 지어진 안에서 필터.