Home
Hyeonsu Lim
Cancel

12. 서브 쿼리

쿼리 블록은 다른 쿼리 블록을 포함할 수 있다. 다른 쿼리 블록에 포함된 쿼리 블록을 서브 쿼리, 다른 쿼리 블록을 포함한 쿼리 블록을 메인 쿼리라고 한다. # 예) 급여가 평균 이상인 사원 조회 SELECT ename, sal FROM emp WHERE sal >= (SELECT AVG(sal) FROM emp); 서브 쿼리는 사용 위치에...

11. 조인

조인을 사용하면 하나의 쿼리로 다수의 테이블을 조회할 수 있다. 조인은 열 값으로 테이블 행을 연결한다. SELECT a.deptno, a.dname, b.empno, b.ename FROM dept a, emp b WHERE b.deptno = a.deptno ORDER BY 1, 3; 11.1 기본 원리 11.1.1 조인 조건 일반 조건이 열...

10. GROUP BY 절과 HAVING 절

GROUP BY 절은 행 그룹을 생성하고, HAVING 절은 조회할 행 그룹을 선택한다. GROUP BY 절은 WHERE 절 다음에 기술하며, WHERE 절이 수행된 후 수행된다. 10.1 GROUP BY 절 SELECT SUM(sal) AS c1 FROM emp WHERE sal > 2000 GROUP BY (); GROUP BY 절을 기술...

19. JPA 잠금 기법

01. 동시 접근과 잠금 [동시 접근을 올바르게 처리하지 않을 대 발생하는 데이터 불일치 문제] 위 그림을 보면 인출과 입금 이후에 실제 잔고는 800원이어야 하는데 남은 잔고는 500원이 된다. 이렇게 동시성 접근 문제를 막기 위한 가장 쉬운 방법은 DB 트랜잭션 격리 수준을 높이는 것이다. 단, 트랜잭션 격리 수준을 높이면 동시 사용자가 많...

18. 기타 매핑 설정

01. 상속 매핑 예) 시스템에 일반 이슈, 방문 예약, 민원의 세 가지 이슈 종류가 있다고 할 때 이 이슈 타입을 상속을 이용해서 설계할 수 있다. JPA에서는 같은 클래스 계층을 테이블과 매핑하는 다음과 같은 방식을 지원한다. 1-1. 클래스 계층을 한 개 테이블로 매핑 상속 관계의 엔티티를 매핑하는 가장 쉬운 방법은 클래스 계층을 한 테이...

17. 스프링데이터 JPA 소개

01. 중복 코드 @Repository public class UserRepository{ @PersistenceContext private EntityManager; public User find(String email) { return em.find(User.class, email); } public void save(...

15. 추가 쿼리 기능

01. 수정 쿼리와 삭제 쿼리 1-1. 수정 쿼리 Query query = em.createQuery( "update Hotel h set h.name = :newName where h.name = :oldName" ); JPQL의 update 쿼리를 사용하려면 트랜잭션 범위 안에서 실행해야 한다. 트랜잭션 범위 안에서 실행하지 않을 경우 excep...

14. 크리테리아 API를 이용한 쿼리

01. 크리테리아 API 크리테리아 API는 자바 코드를 이용해서 작성하는 쿼리이다. CritetiaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<User> cq = cb.createQuery(User.class); Root<User> root = cq.from(User.class);...

13. JPQL

01. JPQL JPQL은 JPA에서 사용하는 쿼리 언어이다. SQL의 쿼리 언어와 매우 유사하나 테이블과 칼럼 이름 대신 매핑한 엔티티 이름과 속성 이름을 사용한다는 점이 차이가 있다. //엔티티 이름과 엔티티 속성을 사용한다. select from Review r where r.hotel =:hotel order by r.id desc 02....

12. 연관 잘 쓰기

01. 연관의 복잡성 1.1 로딩 설정의 어려움 Order order = em.find(Order.class, orderId); List<OrderLine> orderLines = order.getOrderLines(); for(OrderLine ol: orderLines) { Content content = ol.getProduct()...