table의 곱집합 교집합 등의 data를 뽑아내는 것은 select, from, join을 사용하여 구하면 됩니다. 하지만 이것만을 가지고 table 한칸 안에 여러개의 값을 넣을 수는 없더라고요...
그래서 공부해봤습니다.
비밀의 database를 공개하겠습니다.. (연예인 이름을 이용했지만 전혀 관련 없습니다.)
user 과 post / 사용자와 게시물로 table을 만들어 보았습니다.
users의 posts 값들을 뽑아볼까요? left join을 해서 지저분한 값을 제외하고 값을 뽑아 볼게요.
각 user가 쓴 게시글들을 확인 할 수 있습니다. 하지만.... 이렇게 되면 너무나도 많은 row들이 확인됩니다.
따라서, 중복이되는 값을 또 삭제하기 위해 유저하나에 유저가 쓴 모든 게시글을 넣어보려고 합니다.
하지만... 게시물을 하나로 묶는 것은 쉬운일이 아니었습니다...
group by 와 group_concat 혹은 JSON_ARRAYAGG 를 이용해서 구현해야합니다.
concat은 concatenate 입니다.
먼저 concat을 사용해서 볼까요?
JSON_ARRAYAGG를 사용해볼까요?
agg는 aggregate 입니다.
차이점이 보이시나요?
네, 맞습니다. 배열로서 json 파일로 표현된 것을 확인하실 수 있습니다.
그렇지만... 저희의 욕심은 끝이 없습니다.
포스팅의 제목 컨텐츠 이미지 모두 한 행에 넣어버리고 싶은 것이 인간의 욕심 아니겠습니까!
그래서 사용하는 것이 sub query문 입니다.
Sub- Query
sub query 문을 이용하면 이렇게 json 파일로 한 유저의 모든 포스트를 보고 싶은 데이터만 볼 수 있게 데이터를 정제할 수 있습니다.
더 자세하게 설명드리고 싶지만 각자의 table이 있고 합치고 싶은 것들이 달라서 저의 데이터 테이블을 보고 연습을 하셔도 되고, 이 글을 읽으시는 분들은 어느정도 데이터베이스에 대한 기초 지식이 있다고 생각하기 때문에 직접 query문을 작성하면서 console 값을 찍어보면서 학습하면 될 것 같습니다.
저도... 따라쓰기하면서 겨우겨우 알게되었습니다.
정리하자면 group by 와 group_concat 혹은 JSON_ARRAYAGG 및 sub query 문을 이용하여 데이터 정제하기였습니다.
'코딩 개발' 카테고리의 다른 글
암호화의 종류 (0) | 2022.11.07 |
---|---|
Session & Token (0) | 2022.11.07 |
인증과 인가 (0) | 2022.11.06 |
API Documentation (0) | 2022.11.06 |
MySQL - table 작성 (0) | 2022.11.01 |