목록프로그래밍/SQL (67)
쌓고 쌓다
아래의 Dockerfile을 만들어 주자. FROM openjdk:17 ARG JAR_FILE=build/libs/spotServer-0.0.1-SNAPSHOT.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] COPY : ${JAR_FILE}를 도커 이미지의 ./app.jar 경로에 복사한다. ENTRYPOINT : Docker 컨테이너가 시작될때 실행되는 명령을 지정한다. 그리고 로컬에서 빌드한다. 테스트 코드는 빌드에서 제외하기 위해 -x test를 추가해주었다. ./gradlew build -x test 빌드한 파일은 JAR_FILE 경로에 존재하게 된다. 그리고 다음 명령어를 실행하자. docker build --platf..
원하는기능은 다음과 같았다. 게시글과 댓글은 일대다 관계이고 작성한 댓글의 게시글을 중복없이 최근에 작성한 댓글의 게시글이 먼저 오도록 정렬하는 QueryDSL을 작성하길 원했다. 처음에 QueryDSL을 사용하다가 다음과 같은 코드를 작성했었다. List posters = jpaQueryFactory .select(new QPosterResponse( poster.id, poster.writer.id, poster.writer.name, poster.title, poster.content, poster.regDate, ExpressionUtils.as( JPAExpressions .select(posterLike.count()) .from(posterLike) .where(posterLike.poste..
특정 게시글에 달린 댓글 개수와 좋아요 개수를 구하는 쿼리를 작성하고자 했다. 먼저 poster_id가 61인 게시글에 달린 댓글들을 보자. 댓글 id가 25, 26, 34번으로 3개의 댓글이 존재한다. 여기서 게시글과 댓글을 LEFT JOIN하여 결과를 보자. select * from poster LEFT JOIN comment ON poster.id = comment.poster_id; 게시글 정보와 댓글 정보가 붙어 출력된다. 그럼 게시글에 달린 댓글 개수를 세보자. select poster.id, COUNT(comment.id) from poster LEFT JOIN comment ON poster.id = comment.poster_id GROUP BY poster.id; 61번 게시글에 달린 ..
MySQL로 좋아요 개수 쿼리를 공부하다가 Count의 인자로 뭘 넘겨주느냐의 차이를 정리하면 좋겠다싶어 정리한다. 먼저 장소(location)과 장소 좋아요(location_like)의 관계는 1:N이며 left join 했을때 결과는 다음과 같다. 왼쪽의 id가 장소의 PK인 id이고, 오른쪽의 id는 좋아요PK인 id이다. 장소 id 1에 좋아요 2개, 장소 id 2에 좋아요 1개, 장소 Id 3, 4에는 좋아요가 없는 상황이다. 이때 GROUP BY로 장소 id로 그룹을 묶고 count(*)를 해보자. 장소 3, 4에 좋아요가 없음에도 불구하고 1이 카운트된다. COUNT(Column)인 Count(location_like.id)를 해보자. ( 좋아요PK를 count ) 좋아요가 없는 장소는 0으..
테이블을 만드는데 장소의 타이틀, 주소는 VARCHAR로하고 설명은 왜 TEXT로 하는게 좋을까? 궁금증이 생겼다. CREATE TABLE location ( id BIGINT AUTO_INCREMENT PRIMARY KEY, latitude DOUBLE, longitude DOUBLE, title VARCHAR(255), address VARCHAR(255), description TEXT ) https://medium.com/daangn/varchar-vs-text-230a718a22a1 VARCHAR vs TEXT 개요 medium.com 위의 글을 참고하여 간단히 언제 맞게 써야할지 정리하자면 VARCHAR는 최대 길이가 크기 않는 경우! TEXT는 최대 길이가 큰 경우! 왜 VARCHAR를 크게..
13장 -- (1) -- SQL명령문의 처리 속도를 향상 시키기 위해 필요하며 랜덤 액세스하여 저장된 데이터를 찾는다. -- (2) -- 고유 인덱스, 비고유 인덱스, 단일 인덱스, 결합 인덱스, DESCENDING INDEX, 함수 기반 인덱스 -- (3-1) CREATE INDEX idx_regdate ON member(regdate); -- (3-2) CREATE INDEX idx_userid ON board(userid); -- (3-3) CREATE INDEX idx_interest_username ON member(interest, username); -- (3-4) CREATE INDEX idx_userid_upper ON member(UPPER(userid)); -- (4) ALTER IN..
(1) 데이터의 정확성과 일관성을 보장하기위해 테이블의 각 칼람에 정의하는 조건을 말한다. 무결성 제약조건 종류 설명 NOT NULL 해당 칼럼 값은 NULL을 포함할 수 없다. 고유 키 테이블 내 해당 칼럼의 값은 항상 유일해야하며 NULL 값을 허용한다. 기본 키 해당 칼럼의 값은 반드시 존재해야하며, 유일해야한다. 고유키, NOT NULL 제약조건을 결합한 형태이다. 참조 해당 칼럼의 값은 참조되는 테이블의 칼럼 값 중의 하나와 일치하거나 NULL이여야 한다. CHECK 해당 칼럼에 저장 가능한 값의 범위나 조건을 지정한다. (2) CREATE TABLE member( userid VARCHAR2(10) CONSTRAINT member_userid_pk PRIMARY KEY, username VAR..
계층적 질의문 관계형 데이터 베이스에서 데이터간의 부모 자식 관계를 표현할 수 있는 칼럼을 계층적인 관계로 표현 SELECT 명령문에서 START WITH와 CONNECT BY 절을 이용 출력 형식은 top-down 또는 bottom-up SELECT [LEVEL], column, expression ... FROM table_name WHERE conditions START WITH conditions CONNECT BY PRIOR conditions; LEVEL : 계층적 질의문에서 검색된 결과에 대해 계층별로 레벨 번호 표시, 루트 노드는 1, 하위 노드는 1씩 증가 START WITH : 계층적인 출력 형식을 표현하기 위한 최상위 행을 설정 CONNECT BY PRIOR : 계층 관계의 데이터를 ..