1. 유저 피드 조회 쿼리 설계
Datagrip 들어가기

User 테이블에서 +버튼을 눌러 행을 추가해 준다.
더미 데이터를 만들어 주자. (테스트를 위한 데이터 > 더미 데이터)

데이터를 채워넣어주고 화살표 모양의 저장 버튼을 누르면 DB에 반영이 된다.
그럼 이제 USER 테이블을 데이터를 채웠으니, POST 테이블의 데이터도 추가해보겠다!!

데이터를 얼추 채워넣었으니 쿼리문을 작성해볼것이다.
쿼리문을 작성할 때에는 화면을 잘 봐야한다. > 화면에 나온 데이터들을 쿼리문에 담아야하기 때문


쿼리문으로 User 테이블을 가지고 와봤다.
-- 기본 데이터 조회하기
SELECT * FROM [테이블명];
특정 유저의 데이터를 가져오는 조건을 걸어보자 .

인스타그램을 만들 때 우리가 필요한 데이터는 유저아이디, 유저이름, 프로필 사진, 소개글, 웹사이트 주소이다. 따라서 SELECT 뒤에 *을 위와 같이 바꿔줬다.

아아앗,, 근데 데이터를 추가할 때 name하고 nickname의 데이터를 거꾸로 넣었다... 그래서 바꿔 줬다. ... 뭐 별거 아니지만 혹시나 이 글을 보고 계시다가.. . 갑자기 혼란스러우실까바 알려드립니다아../ㅎ

다음으로는 게시물에 필요한 데이터를 뽑아보았다.
count 함수를 이용해 2번 유저가 쓴 게시물 개수도 가져와보자.

[ 테이블끼리 합치기 ]
이제 유저 테이블과 포스트 테이블을 합쳐 보자.
* 쿼리 두 개를 합치는 방법 -- join함수
** join에서 조건을 처리하는 방법 -- on
조건은 post에서의 useridx와 user에서의 useridx가 같을 때 && 게시물의 status가 active 일 때로 지정해줄 것이다.

[ 쿼리문 합치기 ]
아까 작성한 두 쿼리문을 join의 게시물의 개수를 가져와 보겠다.
join 옆에오는 ()안 에 있는 것을 '서브쿼리' 라고 한다. 서브쿼리에는 항상을 이름을 붙여줘야한다. 그래야 오류가 나지 않음!!
이름은 p라고 해보겠다.

* COUNT(postIdx)를 postCount로 별칭
* GROUP BY는 WHERE에서 선택된 데이터를 그룹화
참조 > https://extbrain.tistory.com/56
[MySQL] 그룹화하여 데이터 조회 (GROUP BY)
▶MySQL 그룹화하여 데이터 조회 (GROUP BY) ▶설명 하나, 예를 들어보겠습니다. MySQL에서 유형별로 갯수를 가져오고 싶은데, 단순히 COUNT 함수로 데이터를 조회하면 전체 갯수만을 가져옵니다. 이렇
extbrain.tistory.com
유저에게 게시물이 없다면 어떻게 될까? 게시물이 없는 유저르 ㄹ추가해 확인해 보겠다.

당연하게도 postCount의 값은 null이 나온다.
하지만 인스타그램에서는 게시물의 개수가 없을 때 게시글 개수가 null이 아니라 0으로 나온다.

IF문을 이용해 조건을 추가해주었다.
If(조건, 조건에 해당할 경우 출력할 값, 조건에 해당하지 않는 경우 출력할 값)
여기서 left join과 join의 차이점은 join은 조건에 맞는 데이터가 없을 때 아예 아무것도 출력을 하지않고, left join은 null로 처리한다는 것이다.
이제 팔로우 개수와 팔로잉 개수를 가져와 보는 쿼리를 작성해보자.

[ 게시물을 조회하는 쿼리문 ]

우선 PostIdx를 가져오는 쿼리문이다.
게시물을 눌렀을 때 게시물의 이미지를 가져와야 하므로 포스트 이미지 데이터를 추가해줫따. \


1번 유저가 작성한 게시물의 데이터를 가져와 보았다.
다음으로 사진을 그룹화 해보겠다.

가장 최근의 게시물이 먼저 보이게 해보자. ... > 결과 정렬하기 > order by
* 내림차순 desc

2. Challenge 과제
[ 인스타그램 메인화면 쿼리문 짜기 ]

우선 필요한 데이터부터 정해보자.
필요한 데이터 : 프로필 사진, 아이디, 게시물 대표 사진, 게시물 내용, 작성 시간
여러 테이블에서 데이터를 추출하다보니,, 무턱대고 쿼리문을 짤 수 없을 것 같아 우선 각각의 테이블에서 데이터를 추출하는 쿼리문을 간단하게 작성해보았다.

그리고 이를 참고하여 쿼리문을 합쳐주었다.

그런데 데이터는 잘 추출되는데... 빨간 줄이 뜬다.. 뭘가. ...

GROUP BY (下) : 오류문 해결하기
여러분이 숙련된 SQL 사용자이든 이제 갓 SQL을 배우기 시작한 초보자이든 상관없이 쿼리를 실행하다 보면 각종 오류와 마주하게 됩니다. 오류 메시지를 읽으면 그걸 읽고 해결할 수 있어야 하는
kimsyoung.tistory.com
오호,, 다 한 줄 알았는데 영상에 나온 챌린지 과제랑 워크북 과제가 달랐다!!!!! 워크북 과제도 이어서 해보겠다.
[ 팔로잉하고 있는 유저들의 게시물 조회하기 ]


> 우선 사용자1이 사용자1과 사용자3을 팔로우 중이어서,,, 사용자1과 사용자3의 게시물을 볼수 있도록 데이터를 추가해주었다.

[ 게시물 올린 시간 조회하기 ]

[ 게시물 좋아요 개수 조회하기 ]
현재 좋아요 개수를 관리할 Heart테이블을 간단하게 만들었다.


1번 게시글은 좋아요 2개
2번 게시글은 좋아요 3개로 데이터를 입력해두었다.

성공,,,
'Server > UMC 2기 Server' 카테고리의 다른 글
[UMC] Server 7주차 Springboot 개발환경 구축하기 (0) | 2022.05.02 |
---|---|
[UMC] Server 6주차 Restful API와 프레임워크 (0) | 2022.04.30 |
[UMC] Server 5주차 Aquerytool로 인스타그램 erd 설계하기 (0) | 2022.04.07 |
[UMC] Server 4주차 *실습* AWS RDS 구축하기 / DataGrip로 RDS 에 접속하기 (0) | 2022.04.06 |
[UMC] Server 4주차 RDBMS / 데이터모델링 / 인스타그램 설계 예시 (0) | 2022.04.05 |
1. 유저 피드 조회 쿼리 설계
Datagrip 들어가기

User 테이블에서 +버튼을 눌러 행을 추가해 준다.
더미 데이터를 만들어 주자. (테스트를 위한 데이터 > 더미 데이터)

데이터를 채워넣어주고 화살표 모양의 저장 버튼을 누르면 DB에 반영이 된다.
그럼 이제 USER 테이블을 데이터를 채웠으니, POST 테이블의 데이터도 추가해보겠다!!

데이터를 얼추 채워넣었으니 쿼리문을 작성해볼것이다.
쿼리문을 작성할 때에는 화면을 잘 봐야한다. > 화면에 나온 데이터들을 쿼리문에 담아야하기 때문


쿼리문으로 User 테이블을 가지고 와봤다.
-- 기본 데이터 조회하기
SELECT * FROM [테이블명];
특정 유저의 데이터를 가져오는 조건을 걸어보자 .

인스타그램을 만들 때 우리가 필요한 데이터는 유저아이디, 유저이름, 프로필 사진, 소개글, 웹사이트 주소이다. 따라서 SELECT 뒤에 *을 위와 같이 바꿔줬다.

아아앗,, 근데 데이터를 추가할 때 name하고 nickname의 데이터를 거꾸로 넣었다... 그래서 바꿔 줬다. ... 뭐 별거 아니지만 혹시나 이 글을 보고 계시다가.. . 갑자기 혼란스러우실까바 알려드립니다아../ㅎ

다음으로는 게시물에 필요한 데이터를 뽑아보았다.
count 함수를 이용해 2번 유저가 쓴 게시물 개수도 가져와보자.

[ 테이블끼리 합치기 ]
이제 유저 테이블과 포스트 테이블을 합쳐 보자.
* 쿼리 두 개를 합치는 방법 -- join함수
** join에서 조건을 처리하는 방법 -- on
조건은 post에서의 useridx와 user에서의 useridx가 같을 때 && 게시물의 status가 active 일 때로 지정해줄 것이다.

[ 쿼리문 합치기 ]
아까 작성한 두 쿼리문을 join의 게시물의 개수를 가져와 보겠다.
join 옆에오는 ()안 에 있는 것을 '서브쿼리' 라고 한다. 서브쿼리에는 항상을 이름을 붙여줘야한다. 그래야 오류가 나지 않음!!
이름은 p라고 해보겠다.

* COUNT(postIdx)를 postCount로 별칭
* GROUP BY는 WHERE에서 선택된 데이터를 그룹화
참조 > https://extbrain.tistory.com/56
[MySQL] 그룹화하여 데이터 조회 (GROUP BY)
▶MySQL 그룹화하여 데이터 조회 (GROUP BY) ▶설명 하나, 예를 들어보겠습니다. MySQL에서 유형별로 갯수를 가져오고 싶은데, 단순히 COUNT 함수로 데이터를 조회하면 전체 갯수만을 가져옵니다. 이렇
extbrain.tistory.com
유저에게 게시물이 없다면 어떻게 될까? 게시물이 없는 유저르 ㄹ추가해 확인해 보겠다.

당연하게도 postCount의 값은 null이 나온다.
하지만 인스타그램에서는 게시물의 개수가 없을 때 게시글 개수가 null이 아니라 0으로 나온다.

IF문을 이용해 조건을 추가해주었다.
If(조건, 조건에 해당할 경우 출력할 값, 조건에 해당하지 않는 경우 출력할 값)
여기서 left join과 join의 차이점은 join은 조건에 맞는 데이터가 없을 때 아예 아무것도 출력을 하지않고, left join은 null로 처리한다는 것이다.
이제 팔로우 개수와 팔로잉 개수를 가져와 보는 쿼리를 작성해보자.

[ 게시물을 조회하는 쿼리문 ]

우선 PostIdx를 가져오는 쿼리문이다.
게시물을 눌렀을 때 게시물의 이미지를 가져와야 하므로 포스트 이미지 데이터를 추가해줫따. \


1번 유저가 작성한 게시물의 데이터를 가져와 보았다.
다음으로 사진을 그룹화 해보겠다.

가장 최근의 게시물이 먼저 보이게 해보자. ... > 결과 정렬하기 > order by
* 내림차순 desc

2. Challenge 과제
[ 인스타그램 메인화면 쿼리문 짜기 ]

우선 필요한 데이터부터 정해보자.
필요한 데이터 : 프로필 사진, 아이디, 게시물 대표 사진, 게시물 내용, 작성 시간
여러 테이블에서 데이터를 추출하다보니,, 무턱대고 쿼리문을 짤 수 없을 것 같아 우선 각각의 테이블에서 데이터를 추출하는 쿼리문을 간단하게 작성해보았다.

그리고 이를 참고하여 쿼리문을 합쳐주었다.

그런데 데이터는 잘 추출되는데... 빨간 줄이 뜬다.. 뭘가. ...

GROUP BY (下) : 오류문 해결하기
여러분이 숙련된 SQL 사용자이든 이제 갓 SQL을 배우기 시작한 초보자이든 상관없이 쿼리를 실행하다 보면 각종 오류와 마주하게 됩니다. 오류 메시지를 읽으면 그걸 읽고 해결할 수 있어야 하는
kimsyoung.tistory.com
오호,, 다 한 줄 알았는데 영상에 나온 챌린지 과제랑 워크북 과제가 달랐다!!!!! 워크북 과제도 이어서 해보겠다.
[ 팔로잉하고 있는 유저들의 게시물 조회하기 ]


> 우선 사용자1이 사용자1과 사용자3을 팔로우 중이어서,,, 사용자1과 사용자3의 게시물을 볼수 있도록 데이터를 추가해주었다.

[ 게시물 올린 시간 조회하기 ]

[ 게시물 좋아요 개수 조회하기 ]
현재 좋아요 개수를 관리할 Heart테이블을 간단하게 만들었다.


1번 게시글은 좋아요 2개
2번 게시글은 좋아요 3개로 데이터를 입력해두었다.

성공,,,
'Server > UMC 2기 Server' 카테고리의 다른 글
[UMC] Server 7주차 Springboot 개발환경 구축하기 (0) | 2022.05.02 |
---|---|
[UMC] Server 6주차 Restful API와 프레임워크 (0) | 2022.04.30 |
[UMC] Server 5주차 Aquerytool로 인스타그램 erd 설계하기 (0) | 2022.04.07 |
[UMC] Server 4주차 *실습* AWS RDS 구축하기 / DataGrip로 RDS 에 접속하기 (0) | 2022.04.06 |
[UMC] Server 4주차 RDBMS / 데이터모델링 / 인스타그램 설계 예시 (0) | 2022.04.05 |