1013 TIL mySQL(3)

sprint 의문점들

Q 4-7 content의 title과 그 컨텐츠를 작성한 user의 name을 찾기 위한 SQL을 작성해주세요.- 저자가 없더라도, 켄턴츠의 title을 모두 찾아야합니다.

const PART4_7 = `SELECT content.title, user.name FROM user
                 RIGHT JOIN content ON content.userid = user.id`;


왜 RIGHT JOIN을 사용해야하는건지 헷갈렸었다. 사실 LEFT JOIN으로도 풀 수 있다.

const PART4_7 = `SELECT content.title, user.name FROM content
                 LEFT JOIN user ON content.userid = user.id`;


RIGHT JOIN을 해서 왼쪽에 user가 있고 오른쪽에 content가 있는데 왜 content.title이 표의 왼쪽에 있는거지?착각했었다. 왼쪽,오른쪽 위치는 벤다이어그램 상의 위치이고 content.title이 왼쪽에 있는건 내가 title을 먼저 뽑아냈기 때문이다.

const PART4_7 = `SELECT user.name,content.title FROM user
                 RIGHT JOIN content ON content.userid = user.id`;

이렇게 name을 먼저 뽑아내면 name이 title보다 먼저 나온다.

Q 4-10. content의 데이터를 추가하기 위한 SQL을 작성해주세요.
- duhyunkim이 작성한 컨텐츠를 추가해주세요. 제목과 본문은 자유입니다. (참고: duhyunkim의 아이디는 1입니다.)

INSERT INTO 사용법

1. INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...)
   VALUES (데이터값1, 데이터값2, 데이터값3, ...)

2. INSERT INTO 테이블이름
   VALUES (데이터값1, 데이터값2, 데이터값3, ...)
const PART4_10 = 
`INSERT INTO content
 VALUES(default,'bye','byebye',SYSDATE(),1)`;

나는 위의 코드로 작성했는데 필드이름을 주면 default값이 존재하는 데이터값은 작성하지 않아도 된다고한다.

const PART4_10 = 
`INSERT INTO content(title, body, userId)
 VALUES('bye', 'byebye', 1)`;

Q 5 content_category 테이블의 의미를 테이블 관계로서 이해하고 있는지 점검해주세요.
-> content 테이블과 category 테이블의 관계가 N:N 의 관계여서 그 두테이블을 연결하기 위해서 존재하는 테이블이다.

JOIN

교집합을 나타낸다.
JOIN === (inner)JOIN

InnerJOIN과 NaturalJOIN

두 테이블이 갖는 공통 컬럼에 대해서 Inner Join은 별개의 컬럼으로 나타내지만, Natural Join은 하나의 컬럼으로 나타낸다.

예를 들어 id랑 userId가 있으면 사실상 공통 칼럼이지만 naturalJOIN은 걍 다 합치는거라서 이름이 달라도 다른 칼럼으로 취급하고 각각으로 합친다는 말이다. 그리고 naturalJOIN은 ON을 사용하지 않는다.

GROUP BY

MySQL에서 유형별로 갯수를 가져오고 싶은데, 단순히 COUNT 함수로 데이터를 조회하면 전체 갯수만을 가져온다.
유형별로 갯수를 알고 싶을 때, 컬럼에 데이터를 그룹화 할 수 있는 GROUP BY를 사용한다.

특정 컬럼을 그룹화 하는 GROUP BY결과에 조건을 걸때는 HAVING을 사용한다.
WHERE과 HAVING의 차이는 WHERE는 그룹화 하기 전의 조건이고, HAVING은 그룹화 후에 조건이다.

컬럼의 그룹화

SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;

조건 처리 후에 컬럼 그룹화

SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼;

컬럼 그룹화 후에 조건 처리

SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼 HAVING 조건식;

참조

GROUP BY
JOIN

좋은 웹페이지 즐겨찾기