본문 바로가기
부트캠프

[TIL] 유데미X사람인 취업 부트캠프 14일차 / SQL Group By~ Join

by 상똥 2024. 1. 3.

[1. 오늘 배운 것]

1. HAVING

- 집계가 이미 수행된 이후에 자료를 필터링하기 때문에 GROUP BY 뒤에 위치함

- 집계 결과를 필터로 사용할 수 있음

- SELECT문의 SUM은 HAVING에서 사용할 수 없음

- 즉, GROUP BY까지 실행된 결과를 HAVING으로 필터링하는 것!

 

2. 연습 문제

- 결제 건수가 40 이상인 고객에게 플래티넘 지위를 할당할 때 자격이 있는 고객 반환

- SELECT customer_id FROM payment GROUP BY customer_id HAVING COUNT(*) >= 40;

- 직원ID 2와의 결제 거래에서 100달러를 초과하여 사용한 고객의 고객id 반환

- SELECT customer_id, SUM(amount) FROM payment WHERE staff_id=2 GROUP BY customer_id HAVING SUM(amount) >100

 

3. 평가 시험

- ID가 2인 직원에게서 최소 110달러 이상을 결제한 고객의 ID

- SELECT customer_id, SUM(amount) FROM payment WHERE staff_id=2 GROUP BY customer_id HAVING SUM(amount)>=110;

- J로 시작하는 영화의 수

- SELECT COUNT(*) FROM film WHERE title LIKE "J%";

- 이름이 E로 시작하며 ID가 500 미만인 고객 중 ID번호가 가장 높은 고객

- SELECT first_name, last_name FROM customer WHERE first_name LIKE "E%" AND address_id<500;

 

4. AS

- 열이나 결과에 별칭(대체 이름) 부여

- 쿼리문의 가장 마지막에 실행됨

- 즉 GROUP BY와 WHERE에서는 AS연산자를 사용할 수 없다는 것

 

5. INNER JOIN

- JOIN : 여러 테이블을 하나로 결합하는 것

- 두 테이블을 모두 충족하는 레코드 세트를 결과로 출력

- 교집합

- 쿼리문에서 테이블의 순서를 서로 바꿔도 영향 없음

- SELECT * FROM TABLE A INNER JOIN TableB ON TableA.col = TableB.col;

 

6. FULL OUTER JOIN

- 결합되는 테이블 중 하나에만 표시되는 값을 처리하는 방식 지정

- 쿼리문에서 테이블의 순서를 서로 바꿔도 영향 없음

- 합집합

- 중복값 출력 X

 

7. LEFT OUTER JOIN

- 왼쪽 테이블에 있는 레코드 세트를 결과로 출력

- 오른쪽 테이블에서는 일치하는 레코드만 출력

- 비대칭이므로, 테이블의 순서가 중요

- 오른쪽 테이블에 값이 없으면 null로 채워짐

 

8. RIGTH OUTER JOIN

- 오른쪽 테이블에 있는 레코드 세트를 결과로 출력

- 왼쪽 테이블에서는 일치하는 레코드만 출력

- 비대칭이므로, 테이블의 순서가 중요

- 왼쪽 테이블에 값이 없으면 null로 채워짐

 

9. UNION

- 2개 이상의 SELECT문 결과 세트를 결합할 수 있음

- JOIN과의 차이점 : 두 결과를 직접 붙임

 

10. 연습 문제

- 고객들에게 이메일로 공지할 때 특정 지역에 살고 있는 고객의 이메일 반환

SELECT dstirct, email

FROM address

INNER JOIN customer ON address.address_id = customer.address_id

WHERE district = 'California';

- 닉 월버그가 나오는 모든 영화의 제목 반환

SELECT title, first_name, last_name

FROM film_actor.artor_id = actor.actor_id

INNER JOIN film ON film_actor.film_id. = film.film_id

WHERE first_name='Nick' AND last_name = 'Wahlberg';

 

11. 타임스탬프

- TIME : 시간만 포함

- DATE : 날짜만 포함

- TIMESTAMP : 날짜와 시간 포함

- TIMESTAMPZ : 날짜, 시간 그리고 표준시간대 정보

 

12. 연습문제

- 어떤 달에 지급이 이뤄졌는지 반환

- SELECT DISTINCT(TO_CHAR(payment_date, 'MONTH')) FROM payment;

- 월요일에 지급이 얼마나 이뤄졌는지 반환

- SELECT COUNT(*) FROM payment WHERE EXTRACT(dow FROM payment_date) = 1;

 

13. 수학 함수와 연산자

- / : 나누기

- ROUND(value, num) : 소수점을 num자리까지 반올림

- * : 곱하기

 

14. 문자열 함수와 연산자

- length(col) : 문자열 길이 반환

- col1 || col2 : 문자열 합치기

- UPPER(col) : 문자열 전체를 대문자로 변환

- Lower(vol) : 문자열 전체를 소문자로 변환

- LEFT(col, num) : 왼쪽에서 num개의 문자만 남김

 

15. 서브쿼리

- 첫 번째로 실행됨

- IN, EXISTS와 함께 사용하면 유용함

- 반의 평균 점수보다 더 높은 점수를 가진 학생과 성적을 반환

- SELECT student, grade FROM test_scores WHERE grade > (SELECT AVG(grade) FROM test_scores)

 

16. 셀프조인

- 표가 자체에 합쳐져있는 쿼리

- 같은 표 내에 여러 열 속 여러 값을 비교할 때 쓰임

 

[2. 오늘 잘한 점]

어제 스터디에서 MySQL과 MongoDB 비교하는 역할에 딱 걸려버렸는데 몇시간만에 (겨우겨우) 해냈다 내가 해냄 

 

[3. 개선해야할 점]

스터디시간에 각자 발표를 했는데 내가 몽고디비를 처음 공부해서 더듬거리느라 정확한 정보 전달이 어려웠다. ㅜㅜ 오타도 많았음 죄송합니다 앞으로는 정신 똑바로 차리겠습니다.