
테이블이 n개가 나오면 조인조건은 적어도 N-1개 나와야 함
내부조인은 (자료의 양이 적은)조건에 맞는 것만 내보냄
외부조인은 (자료의 양이 많은)조건에 맞지 않으면 NULL을 채워서 내보냄(되도록 쓰지 않음)
SELECT [테이블별칭 | 테이블명 ].컬럼명,
:
FROM 테이블명1 [별칭1], 테이블명2 [별칭2], 테이블명3 [별칭3]...n
WHERE 별칭1.컬럼명 연산자 별칭2.컬럼명 --조인조건
[AND 일반조건]
SELECT [테이블별칭 | 테이블명 ].컬럼명,
:
FROM 테이블명1 [별칭1], 테이블명2 [별칭2], 테이블명3 [별칭3]...n
WHERE 별칭1.컬럼명[(+)] 연산자 별칭2.컬럼명[(+)] --외부조인조건
--일반 조건 기술할수없음
SELECT [테이블별칭 | 테이블명 ].컬럼명,
:
FROM 테이블명1 [별칭1]
INNER JOIN 테이블명2 [별칭2] ON(조인조건)[AND 일반조건]
:
[INNER JOIN 테이블명n [별칭n] ON(조인조건)[AND 일반조건]
[ WHERE 일반조건]
--앞의 조인결과와 뒤의 조인이 다시 합쳐짐
SELECT [테이블별칭 | 테이블명 ].컬럼명,
:
FROM 테이블명1 [별칭1]
LEFT|RIGHT|FULL OUTER JOIN 테이블명2 [별칭2] ON (조인조건)[AND 일반조건]
:
LEFT|RIGHT|FULL OUTER JOIN 테이블명n [별칭n] ON (조인조건)[AND 일반조건]
--왼쪽이 더크면 LEFT 오른쪽이 더 크면 RIGHT 둘다 부족하면 FULL
WHERE [일반조건]
SELECT 컬럼정의
FROM 테이블명1
CROSS JOIN 테이블명2 [ON(조인조건)]
:
SELECT COUNT(*) "상품 행의 수"
FROM PROD;
SELECT COUNT(*) "장바구니 행의수"
FROM CART;
SELECT COUNT(*) "매입테이블 행의수"
FROM BUYPROD;
SELECT *
FROM PROD, CART, BUYPROD;SELECT COUNT(*)
FROM PROD
CROSS JOIN CART
CROSS JOIN BUYPROD;SELECT [테이블명 | 별칭] 컬럼명 [AS 별칭]
:
FROM 테이블명 [별칭], 테이블명 [별칭],...
WHERE 일반조건
AND 조인조건
--사용 예
--HR계정에서 급여가 15000이상인 사원을 조회하시오
--Alias 사원번호, 사원명, 부서명, 직무명, 급여이며
--부서코드 순으로 정렬하시오
SELECT A.EMPLOYEE_ID AS 사원번호,
A.EMP_NAME AS 사원명,
B.DEPARTMENT_NAME AS 부서명,
C.JOB_TITLE AS 직무명,
A.SALARY AS 급여
FROM HR.EMPLOYEES A, HR.DEPARTMENTS B , HR.JOBS C
WHERE A.SALARY >= 15000
AND A.DEPARTMENT_ID=B.DEPARTMENT_ID
ORDER BY A.DEPARTMENT_ID;
--ANSI
SELECT A.EMPLOYEE_ID AS 사원번호,
A.EMP_NAME AS 사원명,
A.DEPARTMENT_ID AS 부서코드,
B.DEPARTMENT_NAME AS 부서명,
A.SALARY AS 급여
FROM HR.EMPLOYEES A
INNER JOIN HR.DEPARTMENTS B ON (A.DEPARTMENT_ID=B.DEPARTMENT_ID)
WHERE A.SALARY >= 15000
ORDER BY A.DEPARTMENT_ID;ANSI 외부조인 형식
SELECT 컬럼기술
:
FROM 테이블명1 별칭1
LEFT|RIGHT|FULL OUTER JOIN 테이블2 별칭2 ON(조인조건 [AND 일반조건])
:
[WHERE 일반조건];
'LEFT' : FROM 절의 '테이블명1'의 자료가 '테이블명'의 자료보다 많은경우 -- 행의 수가 아니다
'RIGHT' : FROM 절의 '테이블명1'의 자료가 '테이블명'의 자료보다 적은경우
'FULL' : FROM 절의 '테이블명1'의 자료가 '테이블명'의 자료가 모두 부족한 경우