Day12 MySQL_ foreign key + join + union

2023. 3. 20. 09:52SQL

1) foreign Key

1개의 테이블이 점점 커지면 select 해올 때 시간이 많이 걸릴 수도 있다.

foreign key는 다른 테이블과 연관성을 주고 필요시 사용하게 해주는 키(연관성 키)

한마디)
특정 컬럼을 통해서 테이블 2개를 연결하는 것 (쪼개놓고 필요할 때 나중에 합쳐라)
특정 컬럼을 통하는 이유는 ? 관계성을 주기 위해 처리하려고 

 

문법 및 예시)

 

해석: profile이란 테이블을 만든다.

필드 : userid, height,weight,blood,mbti

주의사항. foreign key에 userid는 profile(테이블)필드 / referneces member(userid) = member의 필드

 

profile의 userid는 foreign key 임으로, member의 userid와 데이터가 맞지 않으면 추가 할수 없다 !

 

 


2) join

 

사용 목적 ) 둘 이상의 테이블에서 데이터를 결합하여 하나의 결과 테이블을 생성하는 데 사용되는 기능

select 필드명1,필드명2.... from 테이블1 
inner or left or right join 테이블2 
on 테이블 1(연결할 필드 프라이머리키) = 테이블2. 연결할필드(foreign key);

 

2-1) inner join

select m.userid,m.username,m.hp,p.height,p.weight,p.mbti from member as m
inner join profile as p 
on m.userid = p.userid;

 

출력하고 싶은것  | member의 userid, username, hp 와 profile의 height, weight, mbti

조건 | userid가 서로 맞는 데이터

해석 : member에게 m이란 별명을 주고, profile에게 p라는 별명을 줘서 
             2개의 table을 join하고 조건에 맞는 출력하고 싶은 것 출력한다. 

 

 

2-2) left / right join

두 테이블이 조인될 때, 왼쪽/오른쪽 기준으로 했느냐에 따라 기준 테이블의 것을 모두 출력

outer join은 조인하는 테이블의 on절의 조건 중 한쪽의 데이터를 모두 가져옴

 

종류 : left outer join, right outer join, full outer join 
full outer join은 잘 사용하지 않음

 

select m.userid,m.username,m.hp,p.height,p.weight,p.mbti from member as m
left outer join profile as p 
on m.userid = p.userid;
출력하고 싶은것 | member의 userid,username,hp 와 profile의 height, weight, mbti 데이터

조건 | userid가 서로 맞는 데이터

해석: member에게 m이란 별명을 주고, profile에게 p라는 별명을 줘서 
             2개의 table을 left join하고 조건에 맞는 출력하고 싶은 것 출력한다. 

 

left 테이블에 데이터는 6개 / 다른 테이블은 5개시 결과

 

 

3) union

사용 목적 ) 합집합을 나타내는 연산자로 중복된 값을 제거함

 

서로 같은 종류의 테이블(컬럼이 같아야함)에서만 적용이 가능

 

select 컬럼명1,컬럼명2.. 테이블 union select 컬럼명1, 컬럼명2.. from 테이블2

 

예시)  2개의 예시 테이블 생성

 

create table product(								
	code varchar(6) not null,
    name varchar(50) not null,
    detail varchar(1000),
    price int default 0,
    regdate datetime default now()
);

create table product_new(
	code varchar(6) not null,
    name varchar(50) not null,
    detail varchar(1000),
    price int default 0,
    regdate datetime default now()
);

유니온 예시)

select code,name,price from product 
union 
select code,name,price from product_new;
출력하고 싶은 것 : product 테이블의  code,name,price +  product_new 테이블의  code,name,price

조건: 없음

결과

 

Union all

합집합을 나타내는 연산자 / 중복값을 제거 하지 않는다.

 

728x90

'SQL' 카테고리의 다른 글

DAY12_MYSQL 정렬 + limit  (1) 2023.03.20
DAY12_MYSQL Group + 집계 함수  (0) 2023.03.20
SQL( AUTO_INCREMET)  (0) 2023.03.19
Day11 연산자와 데이터 검색, 정렬  (0) 2023.03.17
1. 테이블 만들어서 데이터 삽입해보기  (0) 2023.03.17