먼저 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 으로 설정했으므로 중복값이 못들어감.
기본 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개 준비
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 구문으로 가능하다.