🌞 조인
두 개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는 작업
종류
cf) 데이터 베이스의 테이블은 중복과 공간 낭비를 피하고 데이터의 무결성을 위해 여러개의 테이블로 분리하여 저장한다. 분리된 테이블들은 서로 관계를 갖는다.
🌞 INNER JOIN
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인 될 조건>
[WHERE <검색조건>]
SELECT *
FROM buyTBL
INNER JOIN userTBL
ON buyTBL.userID = userTBL.userID
WHERE buyTBL.username = 'JYP';
SELECT B.userID, U.name, B.prodName, U.mobile1 + U.mobile2 AS '연락처'
FROM buyTBL B
INNER JOIN userTBL U
ON B.userID = U.userID
ORDER BY num;
as를 통해서 U.mobile1과 U.mobile2 항목을 '+' 연산한 결과의 컬럼명을 연락처로 변경하였다.
FROM과 JOIN 명령어를 작성 할 때 테이블 명 뒤에는 alias 값이 들어 올 수 있다.
ORDER BY num을 통해서 num컬럼에 의해서 정렬 되었다.
SELECT DISTINCT U.userID, U.name, U.addr
FROM userTbl U
JOIN buyTbl B
ON U.userID = B.userID
ORDER BY U.userID ;
결과 : 구매한적이 있는 회원조회
DISTINCT를 사용하면 기본키가 같은 항목들은 하나만 출력한다.
SELECT S.stdName, S.addr, C.clubName, C.roomNo
FROM stdTbl S
INNER JOIN stdclubTbl SC
ON S.stdName = SC.stdName
INNER JOIN clubTbl C
ON SC.clubName = C.clubName
ORDER BY S.stdName
세개의 테이블을 JOIN을 하였다.
🌞 OUTER JOIN(외부조인)
조인의 조건에 만족되지 않는 행까지도 포함시키는 것
LEFT OUTER JOIN : 왼쪽 테이블의 것은 모두 출력되어야 한다. 라고 해석하면 됨
SELECT <열 목록>
FROM <첫 번 쨰 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인될 조건>
[WHERE 검색조건];
SELECT STUDENT.NAME. PROFESSOR.NAME
FROM STUDENT
LEFT OUTER JOIN PROFESSOR
ON STUDENT.PID = PROFESSOR.ID
WHERE GRADE = 1;
왼쪽 테이블인 STUDENT 테이블 중 PID가 비어 있는 행도 JOIN 통한 결과에는 출력이 돼있다. 빈 부분은 NULL로 채워져 있다.
🌞 CROSS JOIN(상호조인)
한쪽 테이블의 모든 행들과 다른 쪽 테이블의 모든 행을 조인시키는 기능
CROSS JOIN의 결과 개수 = 두 테이블 개수를 곱한 개수
테스트로 사용할 많은 용량의 데이터를 생성할 때 주로 사용
ON 구문을 사용할 수 없음
대량의 데이터를 생성하면 시스템이 다운되거나 디스크 용량이 모두 찰 수 있어 COUNT(*) 함수로 개수만 카운트
EX
SELECT COUNT(*) AS '데이터개수'
FROM employees
CROSS JOIN titles;
🌞 INNER JOIN(자체조인)
자기 자신과 자기 자신이 조인한다는 의미
대표적인 예 : 조직도와 관련된 테이블
직장상사 manager id를 가지고 있는 경우 이를 상관이름으로 대체하거나 할 때 사용 됨
🌞 UNION
SELECT 문장1
UNION [ALL]
SELECT 문장2