[TIL] JOIN, SubQuery

TIL / / 2021. 9. 8. 08:43

전체적인 DB 사용 순서  1. DB Connect  ( Java에선 Connection 이라고 부름)2. SQL 실행 준비 (Statement객체: Connection으로 DB에 연결하는 길을 열어 놨으면 그 길로 명령을 나르고 값을 받아오는 차가 Statement 객체이다. )3. SQL 실행4. DB disconnect

 

출처 :https://calm1.tistory.com/12

 


-INNER JOIN (EQUI JOIN) : 교집합을 의미한다. 

옵티마이저가 알아서 테이블이 앞에 오건 뒤에오건 상관없이 최적으로 조인 연산 수행함.

 

 

-OUTER JOIN : 어느 한쪽 테이블에는 해당하는 데이터가 존재하는데 다른쪽 테이블에는 데이터가 존재하지 않을 경우 그 데이터가 검색되지 않는 문제점을 해결하기 위해 사용함.

mysql 에서는 Outer Join 으로 Left Outer, Right Outer Join 만 제공한다. (Full Outer 는 제공안함 --> left join UNION right Join 으로 해결하자)

 

 

Insert into JTUSER (USER_ID,USER_NAME) values ('user_id_1','user_name_1'),
                                              ('user_id_2','user_name_2'),
                                              ('user_id_3','user_name_3'),
                                              ('user_id_4','user_name_4'),
                                              ('user_id_5','user_name_5');

Insert into JTHISTORY (history_id, user_id,product_name) values (1, 'user_id_1','product_1'),
                                                                (2, 'user_id_2','product_2'),
                                                                (3, 'user_id_2','product_3'),
                                                                (4, 'user_id_6','product_4'),
                                                                (5, 'user_id_4','product_5');

Left JOIN 결과

Right JOIN 결과

 

-None Euqi Join  :  테이블의 pk,fk가 아닌 일반 칼럼을 조인 조건으로 지정한다.

select e. employee_id, e.first_name, e.salary, s.grade
from employees e join salgrades s
on e.salary >= s.losal
and e.salary <= hisal
order by s.grade desc;

물론 >= <= 대신에 between and 구문을 사용해도 된다.

 


-Subquery  : 다른 쿼리 내부에 포함되어 있는 SELECT 문을 의미한다.

서브쿼리는 비교연산자의 오른쪽에 기술해야하고 반드시 괄호()로 감싸져 있어야만 한다.

 

서브쿼리의 종류 ( 서브쿼리에 위치에 따라 구분)

  • 중첩 서브쿼리 ( WHERE 절에 있음)

 단일 행 ( =, >, <  ...)

 다중 행  ( in , any, all..)     any : 하나라도  all : 모든 것   in :  = 이면서 다중행일때 사용

 다중 컬럼 : selected 2개 이상 서브쿼리

  • 인라인 뷰 ( FROM 절에 있음
  • 스칼라 서브쿼리( SELECT절에 있음)

 

서브쿼리를 모른다면 어쩔수 없이 조인을 이용해야 한다.

JOIN의 경우 쿼리가 복잡해지거나 카테시안곱으로 인한 속도 저하가 올수 있다. (물론 케바케) 

서브쿼리 최적화 요건이 충족되면 서브쿼리가 좋은 성능을 낼 수 있지만 일반적으로는 조인이 좋은 성능을 낸다.

 

※상호 연관 서브쿼리

 

 

 

 

'TIL' 카테고리의 다른 글

[TIL] DB 이상현상  (0) 2021.09.09
[TIL] 인덱스, 뷰  (0) 2021.09.09
[TIL] RDBMS  (0) 2021.09.06
[TIL] 코딩테스트에 많이 쓰이는 함수들(JAVA)  (0) 2021.09.02
[TIL] ajax  (0) 2021.09.02
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기