목록분류 전체보기 (279)
HwangHub
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dK0uwF/btsyzbtb0Yx/qKPGQYtJhyl9zQ3r8FY9xK/img.png)
관계 대수를 학습하던 중, semi join이 궁금해서 찾아본 후, 간단하게 정리해둔다. 관계 대수( Relational Algebra )란? DB의 쿼리는 데이터를 처리 요구를 표현하는 질의문이다. 이러한 쿼리 연산을 이해하는 방식 중에서, 데이터 처리 과정을 순서대로 기술하는 절차적 언어(procedural language)를 관계 대수라 한다. 관계 대수 (Relational Algebra) 와 관계 해석(relational calculus)은 SQL과 같은 데이터 처리 언어가 유용한지를 검증하는 기준으로 사용된다. 오늘날 일반적으로 우리는 대부분의 데이터베이스 쿼리를 SQL로 수행하기 때문에, 관계 대수와 관계 해석에 대해서 이론적으로만 학습할 뿐, 실제 업무에서 사용할 일은 극히 드물다. 그냥...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b7oS3V/btsyueEfCjl/vvy2YgoV7OG6H1lm9OaBwK/img.png)
SQL을 통해 테이블에서 데이터를 일반적으로 조회할 때에는 필요하지 않지만, 만약 count(), avg(), sum()과 같은 집계 함수를 특정 기준으로 조회하도록 사용하기 위해서는 group by가 반드시 필요하다. 대표적인 집계함수 1. count(attr or *) : 특정 애트리뷰트 또는 전체 튜플(*)의 개수를 세어줌 2. avg(attr) : 특정 애트리뷰트의 평균을 내어줌 3. min(attr) : 특정 애트리뷰트의 최솟값을 반환함 4. max(attr) : 특정 애트리뷰트의 최댓값을 반환함 5. sum(attr) : 특정 애트리뷰트의 총 합을 반환함. Group by 가령, 근로자의 전체 수를 구하는 sql은 select count(*) from employee; 과 같이 전체 테이블에 ..
뷰(view)란? 하나 이상의 기본 테이블 또는 다른 뷰를 이용하여 생성되는 가상 테이블이다. 뷰의 목적 주로 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 사용된다. 예를 들어, 회사 내에 직급 또는 권한에 따라 조회할 수 있는 데이터의 레벨이 다른 경우에, 뷰를 활용하여 이를 구현할 수 있다. 뷰를 적절히 이용하면 복잡한 질의문을 단순화하여 활용할 수 있으며, 데이터의 중복성을 최소화할 수 있다. 뷰의 특징 뷰는 '가상 테이블'이기 때문에, 한번 생성해두면 이를 테이블과 같이 활용 가능하다. 기본 테이블들은 디스크에 공간이 할당되어 데이터가 저장되지만, 뷰는 데이터 딕셔너리 테이블에 뷰에 대한 정의를 나타내는 SQL문 만이 저장된다. 즉, 디스크 별도로 뷰를 위한 저장 공간이 할당되지 않..
차이가 없다. what's up? 과 wassup의 차이 정도이다. 즉, 줄여 쓰는 표현이다. inner join이 join과 동치되는 개념이듯이, left outer join은 left join과 동일하다. 이는 기능상 차이는 없으니 작업하는 팀 사이에서 컨벤션으로 맞춰나가야 하는 부분으로 보인다. 근데 개인적인 생각도 그렇고, 대체적으로는 줄여서 left join, join으로 사용하는 것으로 보인다. 참고 : https://streetdeveloper.tistory.com/23
https://www.codetree.ai/missions/2/problems/puyo-puyo?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 코드트리 Intermediate Low 단계의 BFS 유형을 모두 푼 김에, DFS의 테스트 문제를 다시 한번 풀어보았다. 오랜만에 푸니까 조금 헤맸지만 그래도 풀어냈음에 의의를 가지고 싶다. 문제 해석 이 문제는 BFS로도 풀 수 있을 것 같은데, 핵심은 그래프 알고리즘으로 푼다는 것이다. 인접한 칸을 하나의 블록으로 인지하는 것이고, 이어..
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 문제 해석 가중치가 일정한 상황에서 각 귤에 도달되는 시간을 숫자로 표현하는 문제이므로 BFS 문제임을 알 수 있다. 상한 귤들은 시작점이 되고, 인접한 귤로만 이동하면서 time을 1초씩 추가하면 된다. 이를 기록하는 배열은 별도로 선언한다. 그 외에 -1, -2 와 같은 결과 출력 양식을 맞춰주기 위해서는 출력 단계에서 조건문으로 처리해주면 깔끔하다. 문제 풀이 public class 상한_귤 { private static class Pair { private int x, y; private Pair..
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 문제 해석 위 문제는 가중치가 1로 동일한 경우에서의 최단 거리를 묻는 문제이므로 BFS를 돌리면 된다고 느낄 수 있다. 대표적인 유형의 문제인 걸로 느껴지는데, 지금 뇌가 정지한건지 도저히 내가 어디가 틀린지 모르겠다... 일단 내 풀이는 맞을 가망이 없었고, 아무리 봐도 모르겠어서 일단은 답안을 이해한 뒤에 내 방식대로 고쳐서 작성해 보았다. 내 풀이(틀린 풀이) 나는 인간이 있는 좌표로부터 최단거리에 있는 대피소를 BFS로 찾고, 그 최단 거리를 ans라는 정답 배열의 인간 좌표에 입력해주는 방식으..
기존 구현 postId와 parentCommentId를 둘 다 body로 받아서 대댓글 생성. 문제점 parentComment가 가진 postId와 childComment가 가진 postId가 불일치하진 않는지 체크해야 한다. 이는 불필요한 로직을 추가적으로 양산하며, 클라이언트가 postId까지 신경쓰도록 반영해야 하므로 서버에서 parentComment가 가진 postId를 뽑아서 반영해주는 로직이 더 깔끔할 것이라 보았다. 결과 로직 private Comment childCommentBy(CommentCreateChildServiceDto request) { Comment comment = Comment.builder() .post(getPostFromParentComment(request)) .a..
문제 상황 @Data @Builder @AllArgsConstructor public class CommentLikeCreateRequestDto { private Long commentId; } 위와 같이 설정한 채로 commentLike를 수행하는 api를 테스트하던 중 아래와 같은 에러메시지를 만날 수 있었다. org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of likelion.univ.like.commentlike.dto.CommentLikeCreateRequestDto (although at least one Creator exists): ca..
문제 쿼리는 다음과 같다. public List findAll(Long postId) { return queryFactory .select(commentDetailResponseDto()) .from(comment) .join(comment.author, user) .leftJoin(comment.parentComment, comment) .leftJoin(comment.commentLikes, commentLike) .where(comment.post.id.eq(postId)) .orderBy(comment.createdDate.asc()) .fetch(); } parentComment를 join하여 조회하기 때문에 발생한 문제로 보았다. 즉, 내가 쿼리에 대한 이해가 부족하여 아예 잘못 짠 것이다. ..