[DB] 순수 관계 연산자: CROSS JOIN, SELF JOIN

젠니·2023년 6월 4일
0

데이터베이스

목록 보기
18/21

11. CROSS JOIN

거의 안쓰는 기능이다. 안의 내용을 안보고 그냥 있는거 다 붙이는거다.

Example
출력되는 튜플의 개수를 출력하라.

SELECT 	COUNT(*)
FROM 	(
        SELECT TEAM_ID, TEAM_NAME, TEAM.STADIUM_ID, STADIUM_NAME
        FROM TEAM CROSS JOIN STADIUM
        ORDER BY TEAM_ID
		) AS TEMP;

12. SELF JOIN

동일 테이블 사이의 조인이다.
recursive relationship을 가지는 테이블이다.
한 테이블에 자신의 PK를 참조하는 FK가 같이 존재한다.

Example

SELECT 	*
FROM 	employee;

직원과 직원의 상급자에 대해, 각각 주민번호와 이름을 출력하시오.

SELECT 	emp.Ssn,
        CONCAT(emp.Fname, ', ', emp.Minit, '. ', emp.Lname) AS Employee,
        mgr.Ssn,
        CONCAT(mgr.Fname, ', ', mgr.Minit, '. ', mgr.Lname) AS Manager
FROM 	employee emp JOIN employee mgr ON emp.Super_ssn = mgr.ssn;

직원 테이블과 상급자 테이블을 JOIN 시킨다. 만약, 사장도 포함시키고 싶으면 LEFT JOIN 하면 된다.

사원, 사원의 상위 관리자의 이름을 검색하라.

SELECT 	CONCAT(emp.Fname, ', ', emp.Minit, '. ', emp.Lname) AS Employee,
		CONCAT(mgr.Fname, ', ', mgr.Minit, '. ', mgr.Lname) AS Manager
FROM 	employee emp JOIN employee mgr ON emp.Super_ssn = mgr.ssn;

사원, 사원의 상위 관리자의 이름을 검색하라.
단, 상위 관리자가 없는 사원도 출력하라.

SELECT 	CONCAT(emp.Fname, ', ', emp.Minit, '. ', emp.Lname) AS Employee,
		CONCAT(mgr.Fname, ', ', mgr.Minit, '. ', mgr.Lname) AS Manager
FROM 	employee emp LEFT JOIN employee mgr ON emp.Super_ssn = mgr.ssn;

사원, 사원의 상위 관리자 및 차상위 관리자의 이름을 검색하라.
단, 상위 관리자 혹은 차상위 관리자가 없는 사원도 출력하라.

SELECT 	CONCAT(emp.Fname, ', ', emp.Minit, '. ', emp.Lname) AS Employee,
		CONCAT(mgr.Fname, ', ', mgr.Minit, '. ', mgr.Lname) AS Manager
		CONCAT(mgrOfMgr.Fname, ', ', mgrOfMgr.Minit, '. ', mgrOfMgr.Lname)
        AS ManagerOfManager
FROM 	employee emp
        LEFT JOIN employee mgr ON emp.Super_ssn = mgr.ssn
        LEFT JOIN employee mgrOfMgr ON mgr.Super_ssn = mgrOfMgr.ssn;

profile
젠니의 개발 라이푸우

0개의 댓글