17일차!

오늘은 이론으론 알고 있었지만 처음해보는 서브쿼리에 대한 내용을 배웠다.
내용 자체는 JOIN을 다르게 사용하는 느낌이라 어렵진 않았지만 헷갈리는 느낌..?
하지만 데이터가 많아질수록 데이터를 조회하는데 있어 그만큼 시간이 많이 소요되기 때문에
코딩을 하는데 있어 이러한 자원을 적게 사용할 수 있는 명령어를 사용하거나 코드를 잘 짜야한다.
서브쿼리의 경우도 JOIN으로 충분히 가능하지만 데이터가 많아질 경우
자원을 많이 사용할 수 있어 이를 서브쿼리를 이용해 더 빠르게 조회할 수 있도록 돕는다.
서브쿼리에 대한 내용을 이론으로만 배웠는데 오늘은 다양한 예제를 통해 실습해볼 수 있어 좋았다.
특히 서브쿼리를 사용하여 구현하는 것과 JOIN을 사용하여 같은 내용을 구현해보면서
테이블이 구현된 과정을 더욱 잘 이해할 수 있었다.
오늘의 내용이 익숙하지 않고 많이 사용해보지 않았던 내용이라 쉬운 것은 아니었는데
다양한 예제와 함께 배워보며
개념을 더욱 잘 이해할 수 있어 좋았던 것 같다👍
Part 2. SQL _ 데이터 생성과 조회 2
04. 서브쿼리
: 메인 쿼리 안에 내포되어 있는 쿼리
- 서브쿼리를 Join 구문으로 변경 가능
→ 그럼 왜 사용하는가?
테이블의 일부 데이터만 가져와서 Join하고자 할 때,
인라인 뷰에 조건절을 부여하여 그룹핑을 통해 데이터의 범위를 줄인 후 그 데이터를 메인 테이블과 연결하여 사용
but Join은 많은 양의 데이터를 Join한 후 그룹핑이 이루어지므로 성능의 차이가 발생할 수 있음
1. 스칼라 서브쿼리
: 컬럼 대신에 대입해서 쓸 수 있음, 주로 select절에 등장
+ 스칼라=단일값 ⇒ 스칼라 서브쿼리는 반드시 하나의 값만 출력되도록 작성
// 실습 테이블
-- 실습 테이블 1 --
create table customers (
id varchar(50),
name varchar(30),
grade_code int
);
insert into customers values ('angel1004', '소요정', 1);
insert into customers values ('soso94', '나적당', 2);
insert into customers values ('nobuy20', '안사요', 3);
-- 실습 테이블 2 --
create table grade_info (
code int,
name varchar(30)
);
insert into grade_info values (1, 'VIP');
insert into grade_info values (2, 'GOLD');
insert into grade_info values (3, 'SILVER');
- customers 테이블의 grade_code를 grade_info의 name을 바꾸고 데이터 매칭시켜 바꾸기
+ customers 기준으로 매핑되는 등급의 이름을 add해준 것이므로 customers 테이블 기준으로 한 Outer Join과 같은 결과
- Where절에서 메인 쿼리와 연관관계 有 ⇒ 연관 서브쿼리
+ 비연관 서브쿼리
- 스칼라 서브쿼리의 값 = null이면 null인 상태로 출력
2. 인라인 뷰
: from절에 들어가는 서브쿼리, table 대신에 대입
* 주의
- 메인 쿼리에서 필요한 컬럼인데 서브쿼리의 select절에서 누락 X
- 너무 많은 서브쿼리는 SQL문의 의도를 알 수 없게 할 수 있으므로 성능면에서 적절히 사용할 것
// 실습 테이블: 자료 Part 6의 idol.sql
1) 인라인 뷰를 이용한 JOIN_ 1:N 매핑
- 인라인 뷰
- JOIN
- 실제로 없는 테이블을 인라인 뷰로 가상의 데이터와 연결시킬 수 있음
2) 1:N의 관계인 두 테이블 1:1 매핑
- 인라인 뷰
- JOIN
3) 테이블로 존재하지 않는 가상의 데이터를 JOIN
3. 중첩 서브쿼리
: WHERE, HAVING과 같은 조건절에서 사용하는 서브쿼리
→ 조건절에서 사용, 메인 테이블과 비교
1) 비연관 서브쿼리
- = 조건: 서브쿼리 리턴값이 여러 개라면 오류 발생 ⇒ in 조건 사용
2) 비연관, 다중행(서브쿼리의 리턴 값이 여러 개) 서브쿼리
3) 연관 중첩 서브쿼리
- melon_chart의 singer 컬럼을 idol_member의 name 컬럼과 like 조건으로 비교
→ melon_chart의 idol_member를 출력, 이때 name 컬럼이므로 그룹이 아닌 솔로 가수를 출력
- exists를 사용할 때 select 1은 해당 데이터의 유무만을 확인하기 위함(실무에서는 'X'도 多 사용)
→ 조건에 해당하는 데이터는 1을 리턴
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Challange' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 19일차 미션 (2월 19일) : 데이터 분석 Master Class 강의 후기 (2) | 2024.02.19 |
---|---|
패스트캠퍼스 환급챌린지 18일차 미션 (2월 18일) : 데이터 분석 Master Class 강의 후기 (0) | 2024.02.18 |
패스트캠퍼스 환급챌린지 16일차 미션 (2월 16일) : 데이터 분석 Master Class 강의 후기 (0) | 2024.02.16 |
패스트캠퍼스 환급챌린지 15일차 미션 (2월 15일) : 데이터 분석 Master Class 강의 후기 (0) | 2024.02.15 |
패스트캠퍼스 환급챌린지 14일차 미션 (2월 14일) : 데이터 분석 Master Class 강의 후기 (0) | 2024.02.14 |