패스트캠퍼스 백엔드 부트캠프 3기/6주차

[패스트캠퍼스 백엔드 부트캠프 3기] 6주차

다름임 2025. 1. 25. 16:03

1. 기본 개념 

PK : 데이터의 코드화 --> 변경에 유리 

FK : 다른 테이블의 PK ( 테이블간 관계 표현)

ROW : 객체 (iv 집합) 

COLUMN : 객체 배열

Fk 없으면 관계를 알 수 없다 

 

DB ~= HashMap(객체배열) + TreeSet

Tree와 hashmap 의 장점을 연결 (11장이 중요한 이유) 

 

RDB는 Map과 비슷한 형태이다. Map : key 중복 x, 순서 x , 객체 배열 형태 

SQL : RDB에게 질문하는 언어 

DB(데이터의 그룹화, 2차원 배열 여러개): 고정형 DB -----중복 제거: 테이블 쪼개서 관계 형성------> RDB (그룹 + 관계) : 고정형 DB ----보완----> NoSQL (유연, 비정형 DB) 

 

테이블 쪼개면 관계가 생긴다. 왜? 원래 하나였으니까 

 

 

 

* 디자인패턴 

 

* 분리 : 변하는것과 변하지 않는것 나누기 (분리대상 : 변하는것) 

변하지 않는것 : 템플릿 -- 건들지 않기

바꾸고 싶으면 상속해서 쓰거나 포함해서 쓰라는 것이 기본 목적  

방법 3개 

1. Template method :분리 후 상속으로 결합 ------- 상속이므로 자손에 기능추가 가능 

2. Strategy  : 분리 후 포함으로 결합         ---- 포함이므로 기능추가 가능

3. Bridge : 분리 후 상속과 포함으로 결합

 

==  OCP : 상속엔 open(가능하다), 변경엔 close(불가능)

 

 

* Singleton, FlyWeight,Prototype,TemplateMethod,Bridge,Iterator,Decorator,Future(비동기 -- 기다리기 싫어서 빈박스 주기)

 

 

 

 

2. 날짜 다루기 -- 직접 형변환하기

 

비추천 : 자동형변환 

추천 : 직접 목적에 맞게 형변환하기 

 


* 날짜에서 이번달 마지막 날 구하기

== 다음달 1일에서 -1 하기 

 

 

 

3. 평균 구할때 Null 처리 방법 

 

 

4. NON - EQUI 조인은 누적계산에 유리 (적합)

 

 

 

 

 

 

 

5. JOIN( EQUJOIN)이 where절에 = 연산자로 사용한다.

 


Oracle 설치 오류로

Docker + SQLdeveloper 사용함

 

 

실습 

(틀린 부분 있을 가능성 有)

 

1) Group by를 사용하는 이유 == 그룹함수 사용하기 위해서

 

일단 묶어 놓아야 그룹에 적용할 수 있기 때문에 사용한다. 

SQL문에서 GROUP BY 옆에 그룹함수를 사용하지 못하는 이유가,

그룹함수로 묶는게 아닌 다른 컬럼으로 묶어서 그룹함수를 적용하는 것이기 때문이다. 

그리고 그룹함수는 where절에 사용할 수 없다. (왜 ? WHERE 절은 모든 레코드에 대해서 조건을 적용한다. HAVING절은 GROUP BY절을 통해 만들어진 GROUP들에만 조건을 적용한다. 그래서 WHERE 조건절에는 집계함수를 쓸 수 없는것이다. ) *인용1



예시를 들어서 설명해보면

 

이렇게 그룹을 만들어 놓고

 

 

 

그다음에 함수를 적용하는 것이다

 

 

 

 

2) OUTER JOIN의 +의 위치  :  데이터가 더 작은쪽에 보통 + 를 붙인다. 

+의 위치에 따른 차이를 두가지 예시로 비교해보면

 

 

이 예제를 JOIN으로 하면 E가 가진 직원 번호와 C가 가진 고객 번호가 일치하는 것만 출력된다.

OUTER JOIN은 일치 하지 않는것까지 함께 볼 수 있게 한다. 그러면 고객또는 직원이 배정되지 않거나 일치하지 않는 것까지 볼 수 있다.

 

JOIN할 데이터가 더 작은쪽에 (+) 연산자를 붙인다고 했다.

그러면 첫번째 사진은 c에 +를 붙였으므로 E 쪽이 더 큰 데이터이다.

그러면 C는 일치하는 부분만 나오고 , E는 일치하지 않는 부분까지 나오므로 

고객이 배정되지 않은 직원들도 나오게 된다. 

--> 놀고 있는 직원 찾기 

 

두번째 사진은 E에 +를 붙였으므로 C쪽이 더 큰 데이터이다. 

그러면 E는 일치하는 부분만 나오고, C는 일치하지 않는 부분까지 나오므로 

직원이 배정되지 않은 고객도 나오게 된다 

--> 신규 고객 찾기

 

 

 

3) SELF JOIN은 언제 사용하는지 잘 모르겠다.  --아직 이해 못함

 

 

4) 

*SET 연산자 : 쿼리의 집합 

UNION : 합집합 

UNION ALL : 공통 고려 없이 이어 붙이기 (합집합+ 교집합) 

INTERSECT : 교집합

MINUS : 합집합

 

* UNION보다 UNION ALL 을 사용하는 것이 유리하다

이유 : 공통부분을 찾아야 함 --> 만약 겹치는것이 없으면 굳이 찾으려고 헛수고하는셈

 

 


 

 

SubQUERY

 

1. SINGLE-ROW SubQUERY

:전달되는 서브쿼리가 값인 경우 / 단일행연산자 사용 

예시 

 

 

 

이 예시의 '111' 부분을 서브쿼리로 바꾸면 single row 서브쿼리가 된다 

 

 

 

2.  MULTI -ROW SubQUERY 

이 경우는 값이 1개가 아닌 여러개인 경우 이다. 

IN이나 NOT IN같은 다중 행 연산자를 사용한다. 

 

 

예시를 보면, 첫번째 쿼리와 두번째 쿼리가 완전히 일치하는 쿼리임을 알 수 있다. 

 

 

 

 

 

3 . MULTI - COLUMN SubQUERY(Pair - wise)

 

위의 서브쿼리들은 한 컬럼을 가지고 비교했지만

MULTI -COLUMN 서브쿼리는 여러 컬럼을 동시에 비교하는 것이다

 

 

 

 

4 .From 절에서의 SubQuery  (INLINE VIEW)

 

FROM 절에 있는 ( ) 괄호가 직접 새로 테이블을 만들어 넣었다고 생각하면 된다 

이유 : 한 테이블에 데이터의 양이 많은 경우에 from 절에 테이블을 그냥 넣으면 효율이 좋지 않음 

FROM S_EMP , S_DEPT가 아닌 

 

새로 만든( 진짜 만들어진건 아님) 이 테이블을 S_EMP2라고 하면 

SELECT e.name, e.title, d.name
FROM s_emp2 e, s_dept d
WHERE e.dept_id = d.id;

 

와 동일해진다

 

 

 

 

5. HAVING 예제

 

HAVING 에 저렇게 값이 아닌,, FROM 서브쿼리를 활용한 테이블을 넣은 이유는 

평균급여를 직책별로 나눠서 계산하면 AVG (SALARY ) 가 여러개 나오기 때문이다. 그래서 

AVG_TABLE을 새로 만들었는데 

AVG_TABLE은  밑의 왼쪽 사진을 오른쪽으로 만든 테이블이라고 생각하면 쉽다

 

 

 

그래야 HAVING절에서 직책의 평균급여를 MIN(AVG(평균급여) 와 비교할 수 있다. 

 

 

 

 

 

 

 

6. CREATE 절에서의 SUBQUERY

이해 못함 ---

 

 

 

 

 

 

7. DML문에서의 SUBQUERY

 

 

 

 

 

 

 

 

* 아직 어려워서 이글은 정리가 좀 필요하다.

 

 

 


인용 1 : https://me-analyzingdata.tistory.com/entry/Database-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A7%91%EA%B3%84-HAVING


참고 1: 커밋 관련 사용법 

https://blog.naver.com/regenesis90/222213840145

 

[오라클/SQL] COMMIT, ROLLBACK : 커밋(작업 확정), 롤백(작업 취소) - 트랜잭션 제어 명령어

트랜잭션(Transaction)을 제어하는 명령어로는 다음의 세 가지가 있습니다. * 본 포스팅에서는 COMMI...

blog.naver.com

 

참고 2 : SQL Developer에서 검색 결과 엑셀로 내보내기

https://overit.tistory.com/entry/Oracle-SQL-Developer%EC%97%90%EC%84%9C-%EA%B2%80%EC%83%89-%EA%B2%B0%EA%B3%BC-Excel%EB%A1%9C-%EB%82%B4%EB%B3%B4%EB%82%B4%EA%B8%B0

 

[Oracle] SQL Developer에서 검색 결과 Excel로 내보내기

1. 검색 된 결과에서 오른 쪽 마우스를 클릭해서, "익스포트(E)"를 선택 합니다. 2. "형식(F)"을 아래와 같이 선택해 줍니다 3. "찾아보기(R)"을 눌러서, 저장 경로와 파일명을 설정 한 후, "저장" 버튼

overit.tistory.com

 

참고 3 : SQL Developer로 내보내기

https://ssunws.tistory.com/6

 

[Oracle] SQL Developer로 내보내기

1. Oracle에서 SQL문으로 뽑아내기 SQL Developer의 도구>데이터베이스 익스포트> insert문, excel, delimited 형식으로 내보내기 가능 1) insert문으로 뽑으면 sql창에서 @'절대경로\파일명.sql'로 실행가능 -> 데

ssunws.tistory.com