Schema.sql에서 만들었던 user와 content의 테이블이 있을 것이다. mysql에 접속하여 데이터가 어떻게 되어 있는지 확인해보자.
mysql> select * from content;
+----+-----------------+------------------+---------------------+--------+
| id | title | body | created_at | userId |
+----+-----------------+------------------+---------------------+--------+
| 1 | database sprint | database is easy | 2022-03-08 11:09:08 | 1 |
| 2 | deploy sprint | deploydeploy | 2022-03-08 11:09:08 | NULL |
| 3 | first project | happyhacking | 2022-03-08 11:09:08 | NULL |
+----+-----------------+------------------+---------------------+--------+
3 rows in set (0.00 sec)
mysql> select * from user;
+----+--------------+-----------------------------+
| id | name | email |
+----+--------------+-----------------------------+
| 1 | duhyunkim | duhyun.kim@codestates.com |
| 2 | seunghwanoh | seunghwan.oh@codestates.com |
| 3 | junhongpark | junhong.park@codestates.com |
| 4 | jinsukjeong | jinsuk.jeong@codestates.com |
| 5 | 김아무개 | abcd@naver.com |
+----+--------------+-----------------------------+
5 rows in set (0.00 sec)
SELECT * FROM user
SELECT name FROM user
INSERT INTO user(name, eamil) VALUES('김아무개', 'ABCD@naver.com')
SELECT * FROM user WHERE name='duhyunkim'
SELECT * FROM user WHERE name<>'duhyunkim'
SELECT title FROM content
⇒ 위의 데이터베이스를 보았을 때, user와 content는 Foreign Key와 Primary Key로 연결되어 있다.
SELECT content.title, user.name FROM content LEFT JOIN user ON content.userId=user.id
content를 기준으로 Left Join을 한다. user.name의 값이 NULL이여도 content의 title이 존재하면 모두 가져올 수 있기 때문이다.
SELECT content.title, user.name FROM content JOIN user ON content.userId=user.id
위의 상황과 반대의 입장이지만, 사실 생각해보면 title도 있고 user.name 모두 있는 경우를 말하는 것이겠다. 그래서 따로 Right, Left Join을 따로 쓰지 않고 일반 join인 inner Join을 사용한다.
UPDATE content SET body='database is very easy' WHERE title='database sprint'
INSERT INTO content (title, body, userId) VALUES('참', '재미있네', 1)
mysql> select * from content;
+----+-----------------+------------------+---------------------+--------+
| id | title | body | created_at | userId |
+----+-----------------+------------------+---------------------+--------+
| 1 | database sprint | database is easy | 2022-03-08 11:09:08 | 1 |
| 2 | deploy sprint | deploydeploy | 2022-03-08 11:09:08 | NULL |
| 3 | first project | happyhacking | 2022-03-08 11:09:08 | NULL |
+----+-----------------+------------------+---------------------+--------+
3 rows in set (0.00 sec)
사실 맨처음에 생각한 부분은 user와 join을 해야하는 부분에 고민이 많았다. 하지만, content에는 userId를 참조하고 있는 Foreign Key가 있기 때문에 content의 userId에 값만 추가 해주면 되는 것이었다.