본문 바로가기
카테고리 없음

[스프링부트-jpa-sns] 조인과 스칼라 서브쿼리

by moonstal 2022. 3. 19.

쿼리의 중요성을 깨달았다.

복잡한 쿼리는 한번도 접해보지 못했는데

하나씩 생각해서 조합하는 연습을 해야겠다.

 

-- 1로 로그인 --2의 구독정보 보기
-- 1번과 3번의 정보(toUserId)가 구독 모달에 출력
SELECT * FROM subscribe;

SELECT * FROM user;
SELECT * FROM subscribe WHERE fromUserId=2;

SELECT * FROM user WHERE id= 1 OR id =3;

-- 조인 (user.id=subscribe.toUserId)
SELECT u.id, u.username, u.profileImageUrl
FROM user u INNER JOIN subscribe s
ON u.id = s.touserId
WHERE s.fromUserId =2;

-- 로그인(1), 화면(1,3) 1번이 3번을 구독했는가?
SELECT true FROM subscribe WHERE fromUserId=1 AND toUserId=1;
SELECT true FROM subscribe WHERE fromUserId=1 AND toUserId=3;

-- 가상칼럼을 추가
SELECT u.id, u.username, u.profileImageUrl, 1 subscribeState
FROM user u INNER JOIN subscribe s
ON u.id = s.touserId
WHERE s.fromUserId =2;

-- 스칼라 서브쿼리 (select절에 select추가, 단일행 리턴)
SELECT u.id, u.username, u.profileImageUrl, 
(SELECT COUNT(*) FROM user) subscribeState
FROM user u INNER JOIN subscribe s
ON u.id = s.touserId
WHERE s.fromUserId =2;

-- 구독여부 완성쿼리
SELECT u.id, u.username, u.profileImageUrl, 
(SELECT true FROM subscribe WHERE fromUserId=1 AND toUserId=u.id) subscribeState
FROM user u INNER JOIN subscribe s
ON u.id = s.touserId
WHERE s.fromUserId =2;

SELECT true FROM subscribe WHERE fromUserId=1 AND toUserId=3;

-- 동일 유저인지 판단쿼리
SELECT u.id, u.username, u.profileImageUrl, 
if((SELECT 1 FROM subscribe WHERE fromUserId=1 AND toUserId=u.id),1,0) subscribeState,
if((1=u.id),1,0) equalUserState
FROM user u INNER JOIN subscribe s
ON u.id = s.touserId
WHERE s.fromUserId =2;

 

https://easyupclass.e-itwill.com/course/course_view.jsp?id=27&cid=28 

 

이지업클래스 | 모두를 위한 IT CLASS

쉽게 배우고 알차게 쓰는 온라인 IT 클래스

easyupclass.e-itwill.com