본문 바로가기

블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기

[36일차 복습 및 정리2] MySQL JOIN 정리 (left join, right join, inner join, full outer join, union etc. )

반응형

 

 

먼저 mySQL에 data가 있어야 join이 가능하기 때문에 database와 tables를 만들어 준다. 

join은 교집합의 의미이므로 tables는 최소 2개 이상 만들기! 

 

 

Visual Studio 에서 sql 파일을 만들고 아래 코드를 작성

CREATE DATABASE databaseName;
use databaseName;

CREATE TABLE board(  
    idx INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    subject VARCHAR(100) NOT NULL,
    userId VARCHAR(50) NOT NULL,
    content TEXT,
    today DATETIME DEFAULT CURRENT_TIMESTAMP,
    hit INT(11) DEFAULT 0 
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

CREATE TABLE user(  
    userId VARCHAR(100) NOT NULL UNIQUE,    --userId 가 unique (text의 primary Key) 유일무이
    userPw VARCHAR(255) NOT NULL,
    userName VARCHAR(30) NOT NULL,
    userImage VARCHAR(255) NOT NULL
)DEFAULT CHARSET=utf8mb4;

CREATE TABLE comment(    
    idx INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    userId VARCHAR(50) NOT NULL,
    content TEXT,
    today DATETIME DEFAULT CURRENT_TIMESTAMP
)DEFAULT CHARSET=utf8mb4;

 

mysql에 source 명령을 사용하여 추가 

 

board, user, comment 3개의 tables에 내용이 없어서 insert into 구문을 사용하여 내용 추가하기 

* userId 는 text unique 으로 설정했으므로 중복값이 못들어감. 

board, user, comment 게시판, 사용자 정보, 댓글 DB 입력 완료

 

기본 JOIN 쿼리 문법

select [가져올 field명] from [테이블1] left join [테이블2] on [테이블1].key = [테이블2].key 

 

여기에 각 테이블에 별명을 붙이게 된다면

select [가져올 field명] from [테이블1] as [테이블1별명] left join [테이블2] as [테이블2별명] on [테이블1].key = [테이블2].key 

 

별명 -> 

board as A

user as B

comment as C 로 설정할 예정 ( 이렇게 별명(?) 을 설정하는 이유는 그냥 짧게 코드를 쓰기 위함! ) 

 

 

1.  * 사용으로 A, B의 모든 columns 가져오기 (userId가 공통된 부분들 모두) 

예시1) select * from board as A left join user as B on A.userId=B.userId;

 

2. where = " " ; 으로 특정 row select 하기 

예시2) select * from board as A left join user as B on A.userId=B.userId where A.idx=3; 

 

 

3. 모든 columns 가 아닌 A와 B의 특정 columns만 select하기 

예시3) select A.idx, A.subject, A.userId, B.userName from board as A left join user as B on A.userId=B.userId where A.idx=3; 

 

4. 3개의 tables에서 userId 가 같은 교집합을 이용하여 선택한 columns select하기 

 

3개의 tables에서 교집합을 구한다면 A=B, A=C 이렇게 1:1 로 비교해야 한다. 이 점은 Js의 비교구문과 비슷한 원리인듯 하다.

문법 : select * from 테이블1 left join 테이블2 on a=b join 테이블3 on a=c 

 

예시4) select A.idx, A.subject, A.userId, B.userName, C.content, C.today from board as A left join user as B on A.userId = B.userId left join comment as c on A.userId= c.userId; 

* A=B , B= C 이렇게 해도 상관이 없다. A=B에서 A, B 공통 교집합을 가져와서 비교하기 때문! 

 

 

 

--------------------------------------------------------------------------------------------------------------------------------

 

아래 SQL JOINS 나온 문법대로 해보기 

tables 2개 준비 

board, user 준비 

 

1. left join 

join - null 값이 있으면 쓸 수가 없다.

left join ? - null 값이 있으면 쓸 수가 없다.  (실무에서는 보통 left join을 많이 쓴다고 한다.) 

 

 

 

2. right join   

 

 

 

3. inner join 

 

 

4. inner join where a.key = NULL 

 

 

5. full outer join -> union 사용해야함

full outer join- mysql은 full outer join 이 없어서 left join과 right join, union 을 이용해 사용할 수 있다.

 

 

-> full outer join 안됨 

-> 이렇게 left join + right join +  union 구문으로 가능하다. 

 

 

 

 

 

 

 

 

반응형