21.5.4

PostgreSQL 따라해보기

1. 컬럼에 데이터 추가 및 모든 데이터 보기

photos에 데이터 null 값을 추가하고 유저네임과 url을 함께 출력하는 것

  1. 데이터 추가

  2. url과 username 출력 : 사용한 개념은 right join


2. url과 댓글만 가져오기

(join & where)
1. 정답

  1. 내가 이해한 데이터 모델 :
  • contents의 user_id와 photo의 user_id 연결
  • contents의 photo_id와 photo의 pk 연결

3. url, contents, username 모두 가져오기

  1. 접근 : 앞에서 contents & username, url & contents를 순서대로 가져왔으니 이걸 조인하면 되지 않을까 하는데서 접근

  2. 답안1
    : 조인을 한 번만 썼다.

  3. 답안2
    : 조인을 두 번 써야 한다.

4. wrap-up

  1. Task 1. DB 구축
CREATE TABLE authors(
  id SERIAL PRIMARY KEY,
  name VARCHAR(50)
);
 
CREATE TABLE books (
  id SERIAL PRIMARY KEY,
  title VARCHAR(50),
  author_id INTEGER REFERENCES books(id) ON DELETE CASCADE
);
 
CREATE TABLE reviews (
  id SERIAL PRIMARY KEY,
  rating INTEGER,
  reviewer_id INTEGER,
  book_id INTEGER REFERENCES books(id) ON DELETE CASCADE
);
 
INSERT INTO authors (name) 
VALUES 
  ('Stephen King'),
        ('Agatha Christie'),
        ('JK Rowling');
        
INSERT INTO books (title, author_id)
VALUES
('The Dark Tower', 1),
('Affair At Styles', 2),
('Chamber of Secrets', 3);
 
 INSERT INTO reviews(rating, reviewer_id, book_id)
 VALUES
 (3, 1, 2),
 (4, 2, 1),
 (5, 3, 3);
  1. Task2 :
    각 book 의 title, author 의 name, review 의 rating 을 반환하는 쿼리문을 작성해주세요. 단, book 의 author 가 review 를 작성한 author 와 같은 경우만 반환해주세요.
  • 내 풀이 : 앞에 4번에서 푼 것 활용. 사실상 거의 짝맞추기 수준으로 풀이함. 해설이 필요.

  • 그래도 어떻게 맞췄는지?

    마찬가지로 reviews에서 겹치는 부분을 찾음.

  • 내 결과

-> 정답은 JK Rowling만 나와야 하는데 다 나옴. 뭔가 문제가 있다.

접근법을 달리했다.

authors-> reviews <- books

동기 분 팁 : select 절에 컬럼 대신 *을 넣고, 단계별로 조인을 할때 나오는 출력화면을 보시면 어느 부분에서 문제가 있는지 확인하기 더 쉬울거같아요. 실제 조인이 되야하는 컬럼들이 맞는지...
일종의 console.log, print같은 것.

좋은 웹페이지 즐겨찾기