관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

집합 연산자와 계층형 질의 7 - 계층형 질의 2 : SQL Server/ MariaDB 본문

알고리즘 및 자료 관리/SQL

집합 연산자와 계층형 질의 7 - 계층형 질의 2 : SQL Server/ MariaDB

huenuri 2024. 10. 22. 20:54

이번에는 SQL Server와 MariaDB의 계층형 질의에 대해서 학습해보려고 한다.


 

 

 

 

이론 6 - 계층형 질의 2 : SQL Server/ MariaDB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

왼쪽이 member 테이블인데 어떤 결과값에 의해 계층형 질의가 생기고, 계층형 질의를 통해 레벨값을 추출한다. 가운데 쿼리가 마리아 DB에서 사용하는 계층형 질의이다. AS 안에 있는 쿼리는 CTE를 통해 재귀호출을 하겠다는 뜻이다.

이 안에 재귀호출되는 쿼리가 어떻게 동작하는지 이해하면 좋다. 

 

 

 

 

manager_id가 NULL인 즉 최상위 데이터를 찾겠다는 뜻이다. 최상위 데이터의 레벨값을 0으로 설정했다.

 

 

 

 

 

 

비어있는 것과 UNION ALL을 조인해서 CTE 테이블에 넣는다. 첫번째 순환을 해서 나오는 값이 이렇게 된다.

 

 

 

 

 

0에서 1을 더해서 1이 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

네 번의 순환을 통해 이 값들이 만들어졌다.


 

 

 

 

 

실습 10 - 계층형 질의

 

 


 

 

1. member 테이블 살펴보기

 

 

member 테이블에는 member_id와 manager_id가 있음을 볼 수 있다.


 

 

2. 계층형 질의 작성하기

 

계층형 질의 구문을 작성해준다. 처음에는 CTE 테이블에 아무런 값이 없다가 SELECT 문을 통해 최상위 하나의 데이터를 추출하게 된다. 즉 manager_id가 null인 값을 갖는다. 가져온 member_id와 manager_id를 출력하고 레벨값을 1 추가한다.

이제 순환을 통해 만들어진 값에 SELECT 문을 작성한다.

 

 

 

 

정말 어려운 문제였다. 아직도 구문이 이해가 잘 되지 않기도 하다.


 

 

 

 

 

퀴즈 7 - 계층형 질의 3

 

 

 


 

 

 

 

학습을 마치고

이번 단원은 솔직히 정말 어려웠다. 계층형 질의는 실무에서 그렇게 많이 사용되는 내용이 아니니 그냥 이런 게 있구나 하고 가볍게 넘어가기로 했다. 어제 이 공부를 진행하다가 과연 이렇게 어려운 수준의 공부를 하는 게 의미가 있을까 하는 약간의 회의가 들기도 했었다.

하지만 이 부분만 어렵고 나머지는 충분히 공부할만했다. 가끔은 이해가 되지 않더라도 그냥 끝까지 가야 할 경우가 있다. 정상까지 다 간 다음에 이후에 이해되는 경우도 있는 것이다.