[DB] SQL JOIN

김태준·2023년 11월 12일

데이터베이스

목록 보기
3/4

도메인

-- users 테이블

CREATE TABLE users (
id SERIAL PRIMARY KEY,
nickname VARCHAR(50),
email VARCHAR(100)
);

-- photos 테이블

CREATE TABLE photos (
id SERIAL PRIMARY KEY,
filename VARCHAR(255),
user_id INTEGER REFERENCES users(id)
);

-- comments 테이블

CREATE TABLE comments (
id SERIAL PRIMARY KEY,
body VARCHAR(1000),
user_id INTEGER REFERENCES users(id),
photo_id INTEGER REFERENCES photos(id)
);

-- settings 테이블

CREATE TABLE settings (
id SERIAL PRIMARY KEY,
private BOOLEAN,
adding_photos VARCHAR(15),
user_id INTEGER UNIQUE REFERENCES users(id)
);

-- likes 테이블 생성(사용자와 사진을 다대다 연결)

CREATE TABLE likes (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
photo_id INTEGER REFERENCES photos(id)
);

INNER JOIN

INNER JOIN은 교집합

1. "사진 #1"에 달린 모든 댓글 내용과 작성자 닉네임을 조회하시오.

SELECT 
 comments.body,
 users.nickname
FROM
 comments
JOIN users ON
 users.id = comments.user_id
WHERE
 comments.photo_id = 1;

2. "사진 #2"를 좋아요한 사용자 닉네임과 대상 사진의 파일명을 조회하시오.

 SELECT 
 users.nickname,
 photos.filename
FROM 
 likes
JOIN users ON
 users.id = likes.user_id
JOIN photos ON
 photos.id = likes.photo_id
WHERE
 photos.id = 2;

아웃터 조인

- FULL OUTER JOIN

- LEFT OUTER JOIN

- RIGHT OUTER JOIN

INNER JOIN는 교집합만 조회한다면 아웃터 조인은 +LEFT , RIGHT에 따라 기준 테이블을 기준으로 전부 조회한다.

3. 모든 사진의 "파일명"을 조회하시오. 게시자가 있다면 "닉네임"도 함께 가져올 것.

SELECT
 photos.filename,
 users.nickname
FROM
 photos
LEFT JOIN users ON
 users.id = photos.user_id;

4. 모든 댓글 "내용"을 조회하시오. 단, 댓글이 달린 사진의 "파일명"도 함께 가져올 것

SELECT
 comments.body,
 photos.filename
FROM 
 comments
LEFT JOIN photos ON
 photos.id = comments.photo_id;

profile
Java_Spring_JPA_DB

0개의 댓글