전체적인 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 |
최근댓글