2023/05 11

[programmers] JOIN

5월 식품들의 총매출 조회하기 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/131117 생산일자가 2022년 5월에 해당하는 식품의 ID, NAME, 총매출을 조회하는 SQL문을 작성 정렬: 총매출 내림차순 정렬, 식품 ID 오름차순 정렬 MySol) SELECT PRODUCT_ID, PRODUCT_NAME, SUM(PRICE * AMOUNT) TOTAL_SALES FROM FOOD_PRODUCT JOIN FOOD_ORDER USING (PRODUCT_ID) WHERE YEAR(PRODUCE_DATE) = 2022 AND MONTH(PRODUCE_DATE) = 5 GROUP BY PRODUCT_ID ORDER BY 3 DESC, 1 주문..

[programmers] String, Date

조건에 부합하는 중고거래 상태 조회하기- level 2 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/164672 Sol) SELECT BOARD_ID,WRITER_ID,TITLE,PRICE, CASE STATUS WHEN 'RESERVED' THEN '예약중' WHEN 'DONE' THEN '거래완료' WHEN 'SALE' THEN '판매중' END STATUS FROM USED_GOODS_BOARD WHERE CREATED_DATE = "2022-10-05" ORDER BY 1 DESC CASE 문 이용 대여 기록이 존재하는 자동차 리스트 구하기 - level 3 출처 - https://school.programmers.co.kr/le..

[programmers] SUM, MAX, MIN

가격이 제일 비싼 식품의 정보 출력하기 - level 2 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/131115 Sol) SELECT * FROM FOOD_PRODUCT WHERE PRICE = ( SELECT MAX(PRICE) FROM FOOD_PRODUCT ) where 절 서브 쿼리 가장 비싼 상품 구하기- level 1 출처 - https://school.programmers.co.kr/learn/courses/30/lessons/131697 Sol) SELECT PRICE MAX_PRICE FROM PRODUCT WHERE PRICE = ( SELECT MAX(PRICE) FROM PRODUCT ) 집합 함수 max() 최댓..

[programmers] IS NULL

이름이 없는 동물의 아이디 - level 1 출처 https://school.programmers.co.kr/learn/courses/30/lessons/59039 Sol) SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL 필드명 IS NULL: 필드명의 데이터가 NULL인 로우만 찾아온다. 경기도에 위치한 식품 창고 목록 출력하기 - level 1 출처 https://school.programmers.co.kr/learn/courses/30/lessons/131114 Sol) SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, COALESCE(FREEZER_YN, 'N') FROM FOOD_WAREHOUSE WHERE ADDRES..

[05월 3주차] querydsl JOIN 방법

에러 해결 axios 요청 응답이 null인 경우 오류 get 요청을 보낸 응답에서 데이터가 없는 경우, 오류가 발생했다. if 문을 만족하지 않으니까 태그 안 코드가 실행되지 않는 게 정상인데 계속해서 들어갔다. 원인 get 요청을 보낸 응답 데이터에 리스트가 비어 있는 경우, res.data 는 null 이 아니고 res.data.data가 null이다. 보통 axios로 요청을 보내면 응답 객체는 data, status, statusText, headers, ...와 같은 구조가 있다. 따라서, 뒤에 ".data"를 붙여야 실제로 필요한 데이터에 접근할 수 있다. 해결 다음과 같이 수정한다. ========== script ========== $axios .get( util.format($apiUr..

[05월 2주차] Vue.js 3 modal(모달, 팝업) 창 띄우기

Note 선택 불가능한 콤보 박스 만들기 - disabled Detail - 부모 "Detail"은 자식 컴포넌트를 의미한다. 자식 컴포넌트 Detail 에게 statusCdList2라는 데이터를 보내서 자식 컴포넌트의 변수 statusCdList1에 값을 전달한다. 코드 리스트는 statusCdList변수를 선언과 동시에 store에서 데이터를 가져와서 statusCdList에 저장한다. view 라는 컴포넌트가 DOM에 렌더링되자마자 실행되도록 onMounted() 메서드 안에 코드 리스트 가져오는 getCodeList()를 넣어줘야한다. // script onMounted(() => { getCodeList(); }); const getCodeList = () => store.dispatch("St..

Chapter 06. Spring Data JPA가 지원하는 querydsl 기능

인터페이스 지원- QuerydslPredicateExecutor 앞으로 살펴볼 Spring Data가 제공하는 기능은 제약이 커서 복잡한 실무환경에서 사용하기에는 부족하다. 어떤 한계점이 있을까? Ex) 리포지토리에 적용 Repo QuerydslPredicateExecutor public interface UserRepository extends JpaRepository, QuerydslPredicateExecutor { } Iterable result = userRepository.findAll( member.age.between(10, 40).and(member.username.eq("member1"))); Note) 한계점 묵시적 조인은 가능하나 leftjoin은 불가능하다. 클라이언트가 Query..

Chapter 05. 실무 활용 - 스프링 데이터 JPA와 Querydsl

Spring Data JPA repository 로 변경 Repository @Repository public interface MemberRepository extends JpaRepository { List findByUsername(String username); } test querydsl의 전용 기능인 search를 작성할 수 없다. 따라서 사용자 정의 리포지토리가 필요하다. @Test public void basicTest(){ Member member = new Member("member1", 10); memberRepository.save(member); Member findMember = memberRepository.findById(member.getId()).get(); assertT..

Chapter 04. 실무 활용 - 순수 JPA와 Querydsl

순수 JPA repository와 Querydsl Ex) 순수 JPA repository (Spring Data JPA가 아닌 쌩 JPA) @Repository public class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJpaRepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); } public void save(Member member) { em.persist(member); } public Optional findById(Long id)..

[05월 1주차] 프론트엔드 에러 해결 및 querydsl -BooleanExpression을 활용한 리팩토링

Note BooleanBuilder => BooleanExpression 리팩토링 기존에는 쿼리 클래스 안에 projection()이라는 메서드 안에 변수 BooleanBuilder search를 선언했다. 그 다음 쿼리의 where절에 넣고 싶은 조건을 search.and(조건) 형태로 여러 개 나열하는 방식이었다. 하지만, BooleanBuilder를 사용하면 predicate() 메서드가 길어져서 가독성이 떨어졌다. 그리고 해당 조건에 대해 재사용이 불가능하다는 단점이 있었다. 그래서 김영한 강사님께서 알려주신 BooleanExpression을 적용하기로 했다. Ex) 검색 조건 쿼리 - BooleanBuilder 를 사용한 이전 코드 public BooleanBuilder predicate(Mem..