다음에서 설명하는 테이블에서 모든 회원의 이름과 추천인의 이름을 함께 … | [7급 국가직 데이터베이스론] 25년 1회차 기출문제 상세 페이지
1[7급 국가직 데이터베이스론] 25년 1회차
다음에서 설명하는 테이블에서 모든 회원의 이름과 추천인의 이름을 함께 출력하기 위한 SQL문은? (단, 추천인이 없는 경우 추천인의 이름은 NULL 값으로 출력한다)○ ‘회원’ 테이블의 속성은 (아이디, 이름, 등급, 추천인아이디)이다.
○ 밑줄 속성은 기본키이고 추천인아이디는 ‘회원’ 테이블의 아이디를 참조하는 외래키이다.
○ 추천인아이디를 제외한 나머지 속성은 NOT NULL로 정의된다.
○ 추천인이 없는 회원인 경우 추천인아이디 속성은 NULL로 저장된다.
1
SELECT e.이름, s.이름 AS 추천인이름
FROM 회원 e LEFT OUTER JOIN 회원 s
ON e.추천인아이디 = s.아이디;
2
SELECT e.이름, s.이름 AS 추천인이름
FROM 회원 e, 회원 s
WHERE e.추천인아이디 = s.아이디;
3
SELECT 이름, 추천인이름
FROM 회원 e
WHERE EXISTS
(SELECT 이름 AS 추천인이름
FROM 회원
WHERE e.아이디 = 추천인아이디);
4
SELECT e.이름, s.이름 AS 추천인이름
FROM 회원 e, 회원 s
WHERE e.추천인아이디 = s.아이디
AND e.추천인아이디 IS NOT NULL;
해설
추천인이 없는 회원까지 출력하려면 회원 테이블을 자기 자신과 LEFT OUTER JOIN해야 한다.
e를 왼쪽에 두고 e.추천인아이디 = s.아이디로 외부 조인하면 짝이 없는 회원도 남고 s.이름은 NULL로 채워진다.
- FROM 회원 e, 회원 s의 동등 조인: 내부 조인이라 추천인아이디가 NULL인 회원이 결과에서 빠진다.
- EXISTS 서브쿼리: 추천인이름은 바깥 질의에서 참조할 수 없는 별칭이고, EXISTS는 존재 여부만 판정할 뿐 추천인 이름을 가져오지 못한다.
- IS NOT NULL 조건을 더한 동등 조인: 추천인이 없는 회원을 명시적으로 제외하므로 요구와 반대다.
오류나 개정된 내용이 보이면 알려주세요