MSSQL JOIN 개념 및 연습 + DELETE, SELECT 팁
JOIN의 핵심
key 칼럼을 잘 설정했느냐
JOIN의 종류
- (INNER) JOIN : 교집합
- (LEFT/RIGHT/FULL) OUTER JOIN : 차집합, 여집합
- CROSS JOIN : 곱집합
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
--- 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
--2. alias를 이용해서, 해보기
SELECT * FROM A AS a
JOIN B AS b ON a.Letter_U = b.Letter_S
--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
-- 연습. JOIN된 것 중에 칼럼 IS NULL 인것만 뽑아보기
SELECT * FROM A ta
LEFT JOIN B tb ON ta.Letter_U = tb.Letter_U
WHERE tb.Letter_U IS NULL
--***참고 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
-- 3) FULL OUTER JOIN ***
-- 교집합 뿐만 아니라 각각의 테이블이 가지는 여집합(차집합)까지 모두 포함해서(NULL이 한곳에서 뜬 상태)나온다.
SELECT * FROM A ta
FULL OUTER JOIN B tb ON ta.Letter_U = tb.Letter_U
--- 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 반
SELECT 학년, 반 FROM 학년 ta
CROSS JOIN 반 tb
-- 2번째 칼럼인 반을 기준으로 정렬되길래 ORDER BY 1로 첫번째 칼럼을 기준으로 정렬시켜보기***
SELECT 학년, 반 FROM 학년 ta
CROSS JOIN 반 tb
ORDER BY 1
-- SELECT뒤에 나올 칼럼을 + 연산할 수 있으며, 문자열이 들어가면, 문자열로 연결해준다 ****
-- 이쁘게 만들기 위해, SELECT 부분에 학년 + 반 칼럼을 '-'로 문자열로 이어주면, MSSQL이 알아서 문자열로 취급해준다.
SELECT 학년 + '-' + 반 FROM 학년 ta
CROSS JOIN 반 tb
-- 연습용 Table 삭제하기
DROP TABLE A
DROP TABLE B
DROP TABLE 학년
DROP TABLE 반
'한의대 생활 > └ MySQL & MSSQL' 카테고리의 다른 글
MSSQL 분석연습 2 - 그외 6개 테이블 (2/2) (0) | 2019.01.23 |
---|---|
MSSQL 분석 연습 1 - Person (1/7) (0) | 2019.01.23 |
MSSQL INDEX (1) | 2019.01.16 |
MSSQL T-SQL 개념 소개 및 UPDATE 전 BEGIN TRAN 연습 (0) | 2019.01.16 |
MSSQL 기본 쿼리 연습하기 (0) | 2019.01.16 |