#1.JOIN 두개이상의 테이블을 결합
-INNER JOIN :공통영역만
-FULL OUTER JOIN: 양쪽 TABLE의 NULL값까지 (공통영역포함)
-LEFT JOIN: 왼쪽테이블의 NULL값포함 (공통영역포함)
-RIGNT JOIN: 오른쪽 테이블의 NULL값포함 (공통영역포함)
#2. INNER JOIN (ORACLE과 문법이 다르니 확인)
SELECT 1,2 ...
FROM TABLE A
INNER JOIN TABLE B
ON TABLEA.COLUMN = TABLEB.COLUMN
WHERE CONDIRIOTN
#3. LEFT JOIN (ORACLE과 문법이 다르니 확인)
SELECT 1,2 ...
FROM TABLE A (<-이게 LEFT)
LEFT JOIN TABLE B (<-이게 RIGHT)
ON TABLEA.COLUMN = TABLEB.COLUMN
WHERE CONDIRIOTN
#4. RIGHT JOIN (ORACLE과 문법이 다르니 확인)
SELECT 1,2 ...
FROM TABLE A (<-이게 LEFT)
RIGHT JOIN TABLE B (<-이게 RIGHT)
ON TABLEA.COLUMN = TABLEB.COLUMN
WHERE CONDIRIOTN
#5. FULL OUTER JOIN (ORACLE과 문법이 다르니 확인)
SELECT 1,2 ...
FROM TABLE A (<-이게 LEFT)
FULL OUTER JOIN TABLE B (<-이게 RIGHT)
ON TABLEA.COLUMN = TABLEB.COLUMN
WHERE CONDIRIOTN
※MY SQL에서는 FULL OUTER JOIN을 지원하지 않아 오류발생
#5-1. 대체 방법
SELECT 1,2 ...
FROM TABLE A (<-이게 LEFT)
LEFT JOIN TABLE B (<-이게 RIGHT)
ON TABLEA.COLUMN = TABLEB.COLUMN
UNION
SELECT 1,2 ...
FROM TABLE A (<-이게 LEFT)
RIGHT JOIN TABLE B (<-이게 RIGHT)
ON TABLEA.COLUMN = TABLEB.COLUMN
WHERE CONDIRIOTN
#6.SELF JOIN (INNER JOIN 과 같은 출력)
SELECT 1,2 ...
FROM TABLE A , TABLE B
WHERE CONDITION;
※RIGHT JOIN , LEFT JOIN 이 ORACLE의 방식으로는 오류
#7.예제활용 (컬럼 명이 다르다면 테이블 명 기재안해도 오류안남)
mysql> SELECT A.NAME, A.AGE, A.JOB_TITLE, A.AGENCY, B.SEASON, B.EPISODE
-> FROM CELEB A, SNL_SHOW B
-> WHERE A.NAME= B.HOST
-> AND ((JOB_TITLE NOT LIKE '%영화배우%' AND AGENCY LIKE 'YG%')
-> OR (AGE >=40 AND AGENCY NOT LIKE 'YG%'));
+--------+------+-----------+--------------------+--------+---------+
| NAME | AGE | JOB_TITLE | AGENCY | SEASON | EPISODE |
+--------+------+-----------+--------------------+--------+---------+
| 유재석 | 50 | mc,개그맨 | 안테나엔터테이먼트 | 8 | 8 |
| 이수현 | 23 | 가수 | yg엔터테이먼트 | 8 | 10 |
+--------+------+-----------+--------------------+--------+---------+
2 rows in set (0.00 sec)
#8. 헷갈린 문제풀이 (질문해석)
snl_show 에 출연한 celeb 중, 작년 9월 15일 이후에 출연했거나
소속사 이름이 ‘엔터테이먼트’ 로 끝나지 않으면서 영화배우나 개그맨이 아닌 연예인의
celeb 아이디, 이름, 직업, 소속사를 검색하세요
8-1. 출연 OR (소속사 AND (영화배우나 개그맨이 아닌 )
mysql> SELECT A.ID , NAME, JOB_TITLE, AGENCY
-> FROM CELEB A, SNL_SHOW B
-> WHERE A.NAME=B.HOST
-> AND (B.BROADCAST_DATE >'20200915'
-> OR (A.AGENCY NOT LIKE '%엔터테이먼트' AND (A.JOB_TITLE NOT LIKE '%영화배우%'
-> AND A.JOB_TITLE NOT LIKE '%개그맨%')));
+----+--------+---------------+----------------+
| ID | NAME | JOB_TITLE | AGENCY |
+----+--------+---------------+----------------+
| 6 | 차승원 | 영화배우,모델 | yg엔터테이먼트 |
| 7 | 이수현 | 가수 | yg엔터테이먼트 |
+----+--------+---------------+----------------+
8-2 강의VER (출연 OR 소속사) AND (영화배우나 개그맨이 아닌)
mysql> SELECT A.ID , NAME, JOB_TITLE, AGENCY
-> FROM CELEB A, SNL_SHOW B
-> WHERE A.NAME=B.HOST
-> AND (B.BROADCAST_DATE >'20200915' OR A.AGENCY NOT LIKE '%엔터테이먼트')
-> AND (A.JOB_TITLE NOT LIKE '%영화배우%' AND A.JOB_TITLE NOT LIKE '%개그맨%');
+----+--------+-----------+----------------+
| ID | NAME | JOB_TITLE | AGENCY |
+----+--------+-----------+----------------+
| 7 | 이수현 | 가수 | yg엔터테이먼트 |
+----+--------+-----------+----------------+