Page History
...
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 | ||||||
---|---|---|---|---|---|---|
| ||||||