


예제코드
SELECT 직원ID, 이름, 부서ID,부서명
FROM 직원, 부서;
-- 위 코드를 아래코드로
SELECT 직원.직원ID, 직원.이름, 부서.부서ID, 부서.부서명
FROM 직원, 부서; --FROM적은 AS사용불가.
SELECT A.직원ID, A.이름, A.부서ID, B.부서명
FROM 직원 A, 부서 B -- 직원 테이블을 A라고 하고, 부서 테이블을 B라고 지정.
-- FROM절은 AS사용불가.
WHERE A.부서ID = B.부서ID; -- 둘이 같외 회사의 데이터라는걸 연결해 줘야한다.
--A테이블에도 있고, B테이블 에도 있는 컬럼 으로 뽑는다.




카티션 조인 두 테이블의 갯수의 곱의 모든 경우의수.


예제코드
-- JOIN
SELECT A.직원ID, A.이름, A.부서ID, B.부서명
FROM 직원 A, 부서 B -- FROM절은 AS사용불가.
WHERE A.부서ID = B.부서ID; -- 직원테이블의 부서ID와 부서테이블의 부서ID가 일치하는 것을 뽑아온다.
-- 카티션 조인 두 테이블의 갯수의 곱의 모든 경우의수.

나의 풀이
1).
SELECT *
FROM 직원 A, 부서 B
WHERE A.부서ID = B.부서ID;
-- 직원테이블의 부서ID와 부서테이블의 부서ID가 동일한 칼럼이니 연결한다.
-- 두개의 테이블이 필요하면 바로 JOIN이 필요하다.


나의 풀이
SELECT *
FROM 직원 A, 직원연락처 B
WHERE A.직원ID = B.직원ID
AND B.직원ID IS NOT NULL;
-- 두 테이블에서 동시에 찾아야하기에 직접 테이블에서 공통된 칼럼을 찾아서 뽑도록 해준다. => FROM절에 JOIN이 필요함.

나의 풀이
SELECT A.직원ID, A.이름, B.주소 -- 각각의 어떤 테이블의 컬럼 인지 정의 해주자.
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID
AND B.직원ID IS NOT NULL; -- 써도 되고 안써도 되고 없으면 알아서 안나옴.
SELECT A.직원ID, A.이름, B.주소 -- 각각 소속테이블의 칼럼이라고 써줘야함.
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID
AND B.주소 IS NOT NULL; -- 써도 되고 안써도 되고 없으면 알아서 안나옴.
동일한 답이 나옴.
그외 예제 코드
SELECT *
FROM 직원 A, 부서 B
WHERE A.부서ID = B.부서ID;
-- AND B.부서ID IS NOT NULL; -- 문혈철씨는 부서ID가 없기 때문에 자동으로 안나옴.
-- 현재 직원 10명, 6개 부서 코드 있음.
-- 문혈철씨 까지 나오게 한다고??.

현재 직원 10명, 6개 부서 코드 있음(D006)까지. 문현철씨는 부서ID가 없으므로 위조건에 나오질않음. but 직원이니까 나오게 하려면??.


그럼 문현철까지 나오게 하려면 아래 코드처럼.
SELECT *
FROM 직원 A, 부서 B
WHERE A.부서ID = B.부서ID; -- 현재 문현철은 나오질 않음. 부서ID가 없기때문에
-- AND B.부서ID IS NOT NULL; -- 문혈철씨는 부서ID가 없기 때문에 자동으로 안나옴.
-- 현재 직원 10명, 6개 부서 코드 있음.
-- 문햔철씨 까지 나오게 하려면 아래처럼 작성.
SELECT *
FROM 직원 A, 부서 B
WHERE A.부서ID = B.부서ID(+); -- 기준이 직원테이블임.
-- 반대 부서 테이블 기준으로 하면 인프라서비스 부까지 나온다.
-- 기준은 (+)기호의 반대편, 기준되는 직원테이블의 데이터는 모두 출력하고
-- 반대편 테이블 부서의 없는 칼럼은 NULL로 채운다.
-- 테이블은 직사각형으로 나와야하므로 중간에 빈칸 있으면 안됨.
-- 양쪽 (+)기호는 에러남.
OUTER JOIN (+)기호가 있으면 아우터 조인.
(+)기호가 없으면 INNER JOIN.



나의 풀이
SELECT A.직원ID AS 직원_직ID, A.성별, A.나이, B.직원ID AS 부서_직ID, B.구분코드, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID;
-- 아래 그림보고 코드 잘써라.

나의 풀이
SELECT A.직원ID AS 직원_직ID, A.성별, A.나이, B.직원ID AS 부서_직ID, B.구분코드, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID
AND A.직원ID = 'A0007'; -- 항상 컬럼 명시

나의 풀이
SELECT A.직원ID AS 직원_직ID, A.이름, A.연봉, B.직원ID AS 부서_직ID, B.구분코드, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID(+);
-- 직원주소에는 5명만 주소가 있으므로 나머지 직원들은 NULL이라도
-- 출력 되게 하려면 직원 테이블이 기준이 되야함. OUTER JOIN

나의 풀이
SELECT A.직원ID AS 직원_직ID, A.이름, A.연봉, B.직원ID AS 부서_직ID, B.구분코드, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID(+)
AND B.주소 IS NULL;

나의 풀이
SELECT A.직원ID, A.이름, A.나이, B.주소, C.연락처
FROM 직원 A, 직원주소 B, 직원연락처 C
WHERE A.직원ID = B.직원ID
AND B.직원ID = C.직원ID; -- DB는 삼항연산자가 안된다. 요래 작성해야함.


나의 풀이
그림과 테이블을 잘봐야함. ㅠㅠ
SELECT A.직원ID, A.이름, A.입사일시, B.연락처
FROM 직원 A, 직원연락처 B
WHERE A.직원ID = B.직원ID -- 둘이 같외 회사의 데이터라는걸 연결해 줘야한다.
AND B.직원ID IN ('A0001', 'A0002', 'A0003')
-- B테이블인 직원연락처 테이블 보면 같은 직원ID가 두개씩 있음. 조건 잘걸러서 요기서 폰번호만 뽑아내야함.
-- AND B.직원ID BETWEEN 'A0001' AND 'A0003' -> 도 가능.
AND B.구분코드 = '휴대폰'; -- 폰 번호만 나왔으니 조건을 하나더 추가해준다.

나의 풀이
그림 잘보면 직원 정보와 부서 정보가 나왔으니 직원, 부서 테이블이 필요함.
SELECT A.직원ID, A.이름, A.부서ID, B.부서명
FROM 직원 A, 부서 B -- 직원 테이블을 A, 부서 테이블을 B라고 지정한다.
WHERE A.부서ID = B.부서ID; -- A테이블에도 있고, B테이블 에도 있는 컬럼 으로 뽑아 연결한다.