JOIN의 핵심

key 칼럼을 잘 설정했느냐


JOIN의 종류

  1. (INNER) JOIN : 교집합
  2. (LEFT/RIGHT/FULL) OUTER JOIN : 차집합, 여집합
  3. CROSS JOIN : 곱집합

image


for문은 DB에서 크게 의미없다.  오히려 파이썬 for문이 더 빠르다고 한다.


JOIN 연습하기

CREATE TABLE A (
Letter_U CHAR(1),  --문자1개
Number smallint    --126까지 허용
)
INSERT A VALUES ('A', 1)
INSERT A VALUES ('A', 2)
INSERT A VALUES ('B', 1)
INSERT A VALUES ('C', 2)

SELECT * FROM A


CREATE TABLE B (
Letter_U CHAR(1), -- A테이블과 연결 key칼럼
Letter_S CHAR(1)
)

INSERT B VALUES ('A', 'a')
INSERT B VALUES ('D', 'd')


SELECT * FROM A
SELECT * FROM B

image


--- JOIN 해보기 ---***
-- WHERE가 일반 조건문이라면, JOIN문의 JOIN의 WHERE는 ON이다.!  JOIN ON 테이블.key칼럼!***
-- SELECT FROM A AS - JOIN B AS - ON -.key칼럼 = -.key칼럼
--1. INNER JOIN = JOIN  : 교집합이라 선후관계가 상관없다.

SELECT * FROM A
     JOIN B ON A.Letter_U  = B.Letter_U

image


--2. alias를 이용해서, 해보기
SELECT * FROM A AS a
     JOIN B AS b ON a.Letter_U = b.Letter_S

image


--3. OUTER JOIN -LEFT JOIN : 한쪽 테이블을 다 살리면서 붙힌다.***---
-- 실전에서는 잘 안쓰긴 하나, 쓰는 경우는
-- A 진단이 없었던 환자를 찾아줘 -> A 진단 있는 것을 LEFT JOIN 으로 붙힌 다음, B테이블이 NULL인 환자를 찾기

-- 1) LEFT JOIN

SELECT * FROM A AS ta
     LEFT JOIN B tb ON ta.Letter_U = tb.Letter_U

image

-- 연습. JOIN된 것 중에    칼럼 IS NULL 인것만 뽑아보기
SELECT * FROM A ta
     LEFT JOIN B tb ON ta.Letter_U = tb.Letter_U
     WHERE tb.Letter_U IS NULL

image



--***참고 DELETE를 할 때는, 먼저 SELECT를 한 뒤 하자.***--
INSERT B VALUES ('C', 'c');
SELECT * FROM B WHERE Letter_S = 'C'
DELETE FROM B WHERE Letter_S = 'C'


-- 2) RIGHT JOIN
-- RIGHT 테이블인 B보다 갯수가 늘었다  = Key칼럼자체가 Unique하지 않은 상태로, 서로 빼먹은 것이 존재해서 늘어남***

SELECT * FROM A ta
    RIGHT JOIN B tb ON ta.Letter_U = tb.Letter_U

image


-- 3) FULL OUTER JOIN ***
-- 교집합 뿐만 아니라 각각의 테이블이 가지는 여집합(차집합)까지 모두 포함해서(NULL이 한곳에서 뜬 상태)나온다.
SELECT * FROM A ta
     FULL OUTER JOIN B tb ON ta.Letter_U = tb.Letter_U

image



--- CROSS JOIN (곱집합)---
-- 쓸일 진짜 없다. 데이터 뿔릴 때 씀
-- 예를 들어, 학년 X 반의 모든 콤비네이션을 만들 때,

CREATE TABLE 학년
( 학년 CHAR(1) )

CREATE TABLE 반
( 반 CHAR(1) )


INSERT 학년 VALUES (1)
INSERT 학년 VALUES (2)
INSERT 학년 VALUES (3)
INSERT 학년 VALUES (4)
INSERT 학년 VALUES (5)
INSERT 학년 VALUES (6)

INSERT 반 VALUES (1)
INSERT 반 VALUES (2)
INSERT 반 VALUES (3)
INSERT 반 VALUES (4)

SELECT * FROM 학년
SELECT * FROM 반

image


SELECT 학년, 반 FROM 학년 ta
     CROSS JOIN 반 tb

image


-- 2번째 칼럼인 반을 기준으로 정렬되길래 ORDER BY 1로 첫번째 칼럼을 기준으로 정렬시켜보기***
SELECT 학년, 반 FROM 학년 ta
     CROSS JOIN 반 tb
     ORDER BY 1

image


-- SELECT뒤에 나올 칼럼을 + 연산할 수 있으며, 문자열이 들어가면, 문자열로 연결해준다 ****
-- 이쁘게 만들기 위해, SELECT 부분에 학년 + 반 칼럼을 '-'로 문자열로 이어주면, MSSQL이 알아서 문자열로 취급해준다.
SELECT 학년 + '-' + 반 FROM 학년 ta
     CROSS JOIN 반 tb

image


-- 연습용 Table 삭제하기
DROP TABLE A
DROP TABLE B
DROP TABLE 학년
DROP TABLE 반

+ Recent posts