sql-instagramDB

 


위와 같은 테이블을 보고 질문에 답하시오,


1. 댓글을 가장 많이 작성한 유저는?  1번


select count(user_id), user_id from comments

group by user_id

order by count(user_id) desc ;

2. 사진을 게시한 유저는 모두 몇명? 2 명

select count(distinct user_id) from photos ;  


3. 3번 댓글이 달린 사진은? cat-on-road.jpg

select p.file_name from comments c

left join photos p

on c.photo_id = p.photo_id

where 

    c.id = '3'


이렇게 조회해보니 아래와 같이 p.photo_id 칼럼이 없다고 나온다.



라고 작성하다가..photos 테이블에 photo_id 란 컬럼 값이 없다는것을 문득 깨달음

병신인가.;;;

select p.file_name, c.id from comments c

left join photos p

on c.photo_id = p.id

where 

    c.id = '3' ; 

이렇게 조회하니 잘 조회됨


4. 5번 댓글이 달린 사진의 게시자는? 1번 사용자

select p.user_id from comments as c

left join photos as p

on c.photo_id = p.id

where

c.id = 5 ; 




참고 

자동으로 부여되는 경우 SERIAL 값을 이용한다. 

단, SERIAL 로 설정하는 경우 PRIMARY KEY 선언필요하다. 


FK로 선언할 경우에는 PK의 컬럼 타입을 확인하고 

REFRENCES 테이블명(컬럼값)을 이용해 관계를 선언한다. 


-- users 테이블

CREATE TABLE users(

id SERIAL PRIMARY KEY,

nickname VARCHAR(50),

email VARCHAR(100)

) ; 


-- users 레코드 등록

INSERT INTO 

users(nickname, email)

VALUES

('cloudstudying_kr', 'mail@cloudstudying.kr'),

('hongpark_cs', 'sehongpark@cloudstudying.kr'),

('haesamq', 'haesamq@naver.com')

;


-- users 조회

select * from users ; 


-- photos 테이블

create table photos(

id SERIAL PRIMARY KEY,

file_name VARCHAR(255),

user_id INTEGER REFERENCES users(id) -- FK : 사진게시자의 PK로 연결

)

;


-- photos 레코드 등록

insert into

photos(file_name, user_id)

values

('cat-on-road.jpg', 1),

('sunset-over-the-ocean.jpg', 1),

('andromeda-galaxy.jpg' , 1),

('white-tiger.jpg', 2),

('nero-the-black-cat.jpg', 2 )

;


-- photos 레코드 조회

select * from photos ; 


-- comments 테이블 생성

create table comments(

id SERIAL PRIMARY KEY,

body VARCHAR(1000),

user_id INTEGER REFERENCES users(id), --FK 댓글 작성자

photo_id INTEGER REFERENCES photos(id) -- FK 댓글이 달린 사진 

);


-- 댓글 등록

insert into 

comments (body, user_id, photo_id)

values 

('meow', 1, 1),

('냐옹', 2, 1),

('냐냐옹', 3, 1),

('갑니다.', 1, 2),

('안녕하세요.', 2, 2),

('이쿠이쿠', 1, 3),

('오이시', 3, 3)

;


-- 코멘트 테이블 조회 

select * from comments ; 

댓글