전체 글
-
8장 SQL의 순서DB & SQL/SQL 레벨업 2023. 8. 8. 11:16
23. 레코드에 순번 붙이기 - 최근 SQL은 순서와 순번을 다루기 위한 기능들을 추가하고 있다. ㆍ예를 들어 시퀀스 객체 또는 ID 필드와 같은 순번을 붙일 수 있는 기능을 비롯해, 지금까지 사용해왔던 윈도우 함수 역시 이러한 요구에 대응한 기능이다. 1. 기본 키가 한 개의 필드일 경우 윈도우 함수 사용 # 기본 키가 한 개의 필드일 경우(ROW_NUMBER) SELECT student_id, ROW_NUMBER() OVER (ORDER BY student_id) AS seq FROM Weights; 상관 서브쿼리를 사용 - MySQL처럼 ROW_NUMBER 함수를 사용할 수 없는 환경에서는 상관 서브쿼리를 사용해야 한다 # 기본 키가 한 개의 필드일 경우(상관 서브쿼리) SELECT student_..
-
7장 서브쿼리DB & SQL/SQL 레벨업 2023. 8. 8. 11:10
21. 서브쿼리가 일으키는 폐해 - 서브쿼리란 SQL 내부에서 작성되는 일시적인 테이블이다 - SQL은 테이블과 서브쿼리를 같은 것 취급한다. ( 기능적인 관점에서 ) - 테이블, 뷰, 서브쿼리의 차이점 ㆍ테이블 : 영속적인 데이터를 저장 ㆍ뷰 : 영속적이지만 데이터는 저장하지 않음, 따라서 접근할 때마다 SELECT 구문이 실행됨 ㆍ서브쿼리 : 비영속적인 생존 기간(스코프)이 SQL 구문 실행 중으로 한정 1. 서브쿼리의 문제점 - 서브쿼리의 성능적 문제는 결과적으로 서브쿼리가 실체적인 데이터를 저장하고 있지 않다는 점에서 기인한다. 연산 비용 추가 - 실체적인 데이터를 저장하고 있지 않다는 것은 서브쿼리에 접근할 때마다 SELECT 구문을 실행해서 데이터를 만들어야 한다는 뜻이다 - 따라서 SELEC..
-
6장 결합DB & SQL/SQL 레벨업 2023. 8. 8. 11:07
18. 기능적 관점으로 구분하는 결합의 종류 - SQL에는 '결합'이라는 이름이 붙은 연산이 굉장히 많다. ㆍ크로스 결합 ㆍ내부 결합 ㆍ외부 결합 ㆍ자기 결합 ㆍ등가 결합/비등가 결합 ㆍ자연 결합 - 기능적인 관점으로 분류한 것이 크로스 결합, 내부 결합, 외부 결합이다. - 등가 결합/비등가 결합은 결합 조건으로 등호(=)를 사용하는지, 이 이외의 부등호를 사용하는지의 차이를 의미한다. - 자연결합은 가장 자주 사용하는 '내부 결합이면서 등가 결합'이라는 조합을 간단하게 작성하는 것이다. SELECT * FROM Employees NATURAL JOIN Departments; SELECT * FROM Employees E INNER JOIN DEpartments D ON E.dept_id = D.dep..
-
5. 세 번째 요구사항 추가하기 - 책 통계Kotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 8. 10:34
32. 책 통계 보여주기 - 프로덕션 코드 개발 1. SQL의 다양한 기능들 ( sum, avg, count, group by, order by)을 이해한다. 2. 간결한 함수형 프로그래밍 기법을 사용해보고 익숙해진다. 3. 동일한 기능을 애플리케이션과 DB로 구현해보고, 차이점을 이해한다. 33. 책 통계 보여주기 - 테스트 코드 개발과 리팩토링 34. 다양한 SQL을 알아보자! - 살펴볼 SQL 종류 : sum / avg / count / group by / order by 35. 애플리케이션 대신 DB로 기능 구현하기 @Transactional(readOnly = true) fun countLoanedBook(): Int { // return userLoanHistoryRepository.findA..
-
5장 반복문DB & SQL/SQL 레벨업 2023. 8. 7. 10:18
14. 반복문 의존중 - 관계 조작(SQL)은 관계 전체를 모두 조작의 대상으로 삼는다. ㆍ이러한 것의 목적은 반복을 제외하는 것이다. ㆍ최종 사용자의 생산성을 생각하면 이러한 조건을 만족해야 한다. ㆍ그래야만 응용 프로그래머의 생산성에도 기여할 수 있을 것이다. 1. 내부적으로는 반복문 사용 15. 반복계의 공포 - 여러 행을 한꺼번에 처리하는 SQL을 포장계라고 부른다. 1. 반복계의 단점 - 한 다미로 설명한다면 '성능'이다. ㆍ같은 기능을 구현한다고 가정하면, 반복계로 구현한 코드는 포장계로 구현한 코드에 성능적으로 이길 수가 없다. - 처리하는 레코드 수가 적을 때는 반복계와 포장계에 큰 차이가 없다. SQL 실행의 오버 헤드 - SQL을 실행할 때는 데이터를 검색하거나 연산하는 실제의 SQL ..
-
4장 집약과 자르기DB & SQL/SQL 레벨업 2023. 8. 7. 10:13
12. 집약 - SQL의 특징적인 사고방식 중에, 레코드 단위가 아닌 레코드의 '집합' 단위로 처리를 기술하는 것이다. ㆍ이런 사용 방식을 집합 지향(set-oriented)라고 불린다. - 이러한 특징이 가장 잘 드러나는 때가 GROUP BY 구, HAVING 구와, 그것과 함께 사용하는 SUM 또는 COUNT 등의 집약 함수를 사용하는 때이다. - SQL은 이러한 집합 조작이 굉장히 잘 구현되어 있어서, 절차 지향 언어에서 반복문 또는 분기를 여러 번 사용해야 하는 복잡한 처리를 굉장히 간단한 코드로 작성할 수 있다. - SQL에는 집합 함수(aggregate function)가 있다. ㆍCOUNT ㆍSUM ㆍAVG ㆍMAX ㆍMIN - 함수들의 이름 앞에 '집약'이라는 접두사가 붙은 이유는 문자 그..
-
3장 SQL의 조건 분기DB & SQL/SQL 레벨업 2023. 8. 7. 10:09
8. UNION을 사용한 쓸데없이 긴 표현 - SQL 에서 조건 분기를 할 때 UNION을 사용해도 좋을지 여부는 신중히 검토해야 한다. 1. UNION을 사용한 조건 분기와 관련된 간단한 예제 SELECT item_name, year, price_tax_ex AS price FROM Items WHERE year = 2002; - 문제점 ㆍ1. 쓸데없이 길다. ㆍ2. 성능이 좋지 않다. - UNION 쿼리는 Items 테이블에 2회 접근하고 있다. ㆍ이 두번도 TABLE ACCESS FULL 이 발생하므로, 읽어들이는 비용도 테이블에 크기에 따라 선형으로 증가 - 정확한 판단 없이 SELECT 구문 전체를 여러 번 사용해서 코드를 길게 만드는 것은 쓸데없이 테이블 접근을 발생시키며 SQL의 성능을 나쁘..
-
4. 두 번째 요구사항 추가하기 - 도서 대출 현황Kotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 7. 10:03
25. 유저 대출 현황 보여주기 - 프로덕션 코드 개발 1. join 쿼리의 종류와 차이점을 이해한다. 2. JPA N + 1 문제가 무엇이고 발생하는 원인을 이해한다. 3. N + 1 문제를 해결하기 위한 방법을 이해하고 활용할 수 있다. 4. 새로운 API를 만들 때 생길 수 있는 고민 포인트를 이해하고 적절한 감을 잡을 수 있다. Controller를 구분하는 3가지 기준 1. 화면에서 사용되는 API 끼리 모아 둔다. - 장점 ㆍ화면에서 어떤 API가 사용되는 한 눈에 알기 용이하다 - 단점 ㆍ한 API가 여러 화면에서 사용되면 위치가 애매하다. ㆍ서버 코드가 화면에 종속적이다. 2. 동일한 도메인끼리 API를 모아둔다. - 장점 ㆍ화면 위치와 무관하게 서버 코드는 변경되지 않아도 된다. ㆍ비슷한..