Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

SQL문으로 처리하고 싶으면, 앞장에서 배운 @Query 어노테이션을 통해 쿼리문 수행이 가능합니다.

...



데이터 베이스를 사용하다보면, 자주 사용하는 Select문이 생기며 개발중에 읽기 전용으로 공유되어

...

==> addressViewRepo는 조회가능한 함수쿼리 작성만 가능합니다


서브쿼리



뷰에서 데이터 선택

select * from address_view;

서브 쿼리로 전개select * from (SELECT t.address_id ,t.name,t.phone_nbr FROM address t) as add;

위 두 쿼리는 결과적으로 수행결과 가 같습니다View와 서브쿼리를 한꺼번에 설명을 하기 위한 예제이며

View는 실제적으로 데이터가 없기때문에, 추가적인 Select구문을 실행하는 중첩(nested)구조가 됩니다.

결국 서브쿼리 형태로 작동됨을 의미를 하고 From 구 이후에 직접 Select하는 방식을 서브쿼리라고 불립니다.

뷰의 관점에서 서브쿼리와 동일한 작동과정이 수행되었지만, 둘의 사용목적은 완전하게 다릅니다.

서브 쿼리를 이용한 편리한 매칭조건 설정
No Format
select * from address_view av where av.name in( select name from vipUsers );

address를 조회하는 공통 뷰를 address_view라고 정의를 하였고, 이렇게 약속하였기때문에

어플리케이션에서는 address를 통해 직접 조회하기보다 view를 통해서만 조회만 가능합니다.

이것은 권한적으로도 어플리케이션 레벨에 특정한 정보(주민번호)를 은닉하여 정보조회를

보호하고자 할때또는, address에 대한 접근 권한 통제가 가능합니다. 

위 예제는 vip사용자의 이름이 별도로 관리되고 있고..( 이름이 유니크하다고 가정합시다)

address_view에서 where조건에 서브쿼리를 사용하여 특정테이블이 가진 데이터의 매칭 조건을 설정한 예입니다.


SQL은 서브쿼리부터 실행을 합니다. 그래서 SELECT에서의 서브쿼리가 아래와같은 상수로 변경이됩니다.

No Format
select * from address_view av where av.name in( '민수','영희' );

이것은  where조건이 하드코딩이냐?  특정 테이블의 설정화? 이냐 차이이며

이러한 서브쿼리는 하드코딩을 없앨수 있는 요소로 활용이 될수 있습니다.


Code Block
languagejava
themeEmacs
titleJPA에서 서브쿼리 사용하기