SELECT *
FROM emp a , emp b
WHERE a.empno = b.mgr
AND a.empno BETWEEN 7369 AND 7698
질문 : 우선 기본이 되는 자식이 있고 자식한테 맞춰주는 부모 열이 있는데
지금 여기서는 a는 자식열이고 b 는 부모열이고
a의 메니저의 번호에 따라서 b는 메니저의 이름이 ename이 되고 나머지도 메니저의 이름이 ename이 된것을 따라서 뒤에 COLUMN이 전부 따라서 바뀌게 되는데
그럼 a의 테이블과 b의 테이블이 서로 자리 배열을 할 때 a,b 이렇게 나오는 경우도 있고 b,a 이렇게 나오는경우도 있네...
WHERE 절에서 앞뒤가 자리가 바껴도 정렬순서는 바뀌지 않는다 ( 여기서말하는거는 데이터자체내용이아니라 A, B 의 정렬
--> 여기서 그러니까 b 두번째 있는 애의mgr이니까 원래 기본으로 되는건 mgr이 왼쪽에 있는 정렬이었고 a가 그 왼쪽 자식 테이블에 mgr에 대한 empno 를 구하는 거기 때문에 여기서는 자식이 b 테이블이고 a는 자식에게 맞춰주는 부모 테이블이다.
그래서
SELECT *
FROM emp a , emp b
WHERE a.empno = b.mgr
AND b.empno BETWEEN 7369 AND 7698
여기서 and 뒤에 empno 의 범위를 정할때 a가 아니라 자식배열인 b가 오는 것이다.
두번째 질문 : join with using 이랑 join with on 에서 using 이랑 on 뒤에 괄호 () 를 안써도
되는건가?
using 에는 항상 쓰고 on 에는 괄호를 안써도 됨.
중요한 것 :
SELECT *
FROM emp a JOIN emp b
ON ( m.mgr = s.empno ) ;
여기서는 열이 13열만 나오는데
자식인 emp 배열에서 mgr이 없었던 king 이라는 애는 둘이 join 을 했을때 사라지게
된다. 즉 join을 한 뒤 자식배열이 늘 원래의 데이터테이블처럼 뽑아져 나오는 것은 아니다.
원래 emp 테이블
salgrade와 emp 테이블을 조인한 테이블
emp 테이블과 salgrade 테이블이 합쳐졌는데
emp 테이블에 있는 ename을 보면 king 이 사라져 있음
질문 4.
SELECT a.ename, b.ename mgr
FROM emp a, emp b
WHERE a.mgr = b.empno
여기서 보면 자식 테이블이었던 첫번째의 ename에 있는 애들이 전부 순서를
바꿔서 b.ename 즉 부모 테이블에 있던 ename이 별칭으로 변한 mgr 테이블의
동일한 이름이 묶여서 정렬이 되? 자동으로? 늘 ?
부모테이블의 mgr 테이블에 맞춰서 정렬이 되네????
질문 5
SELECT empno, ename, emp.deptno , dname
FROM emp JOIN dept ON ( emp.deptno = dept.deptno )
ORDER BY emp .deptno
여기에서는 deptno 숫자대로 정렬이 안되니까
order by 로 써줘야하는데....!!
질문 6
JOIN WITH USING과 NATURAL JOIN 은 한정자를 써주면 안되고
JOIN WITH ON 은 한정자를 써줘야 하는건가
질문 8
FROM 절에서 한정자를 붙인뒤
WHERE 절에서 한정자 대신 EMP, DEPT 처럼 이렇게 사용이 안되네???
댓글
댓글 쓰기