<강사님>
면접관이 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 지어진 안에서 필터.
'웹개발' 카테고리의 다른 글
2022-09-21 국비지원 웹개발 27일차 (0) | 2022.10.02 |
---|---|
2022-09-20 국비지원 웹개발 26일차 (0) | 2022.09.26 |
2022-09-16 국비지원 웹개발 24일차 (0) | 2022.09.19 |
2022-09-15 국비지원 웹개발 23일차 (0) | 2022.09.16 |
2022-09-14 국비지원 웹개발 23일차 (0) | 2022.09.15 |