조인(Join)
- SELECT와 더불어 가장 많이 사용하는 옵션 중 하나이며, 두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만들어 내는 것입니다.
- 서로 다른 테이블에서 데이터를 가져올 때 사용하는 것이 조인(Join)입니다.
우선, 기존 테이블에 있는 사람만 프로필에 있게 만들어 주기
auto_increment를 제외하고 넣어주기.
create table tb_profile(
pro_useridx bigint,
pro_age int not null,
pro_gender enum('남자', '여자'),
pro_birth datetime not null,
foreign key(pro_useridx) references tb_member(mem_idx)
);
desc tb_profile;
알맞게 들어간걸 확인하고,
데이터를 넣어주기 (1번 사용자에 대한 프로필, 20살, 여자, 날짜타입)
insert into tb_profile values(1, 20, '여자', '2000-10-11'); 에러가 남
19:03:34 insert into tb_profile values(7, 20, '여자', '2000-10-11')
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails 이것은, "참조 무결성 위배" 라고 한다. 쉽게 말해서 fk를 통해 참조해야하는 대상의 값이 먼저 입력되어있지 않으면 나오는 에러, 만약 넣고 싶다면 참고하기.
-- fk를 잠깐 무력화 시켜주는 방법
SET foreign_key_checks = 0;
-- 해주고 INSERT를 할 시 에러가 뜨지 않음
-- 모든 데이터를 다 넣은 뒤에는,
SET foreign_key_checks = 1;
insert into tb_profile values(7, 20, '여자', '2000-10-11'); 정상적으로 뜸
insert into tb_profile values(1, 25, '여자', '2000-10-11');
insert into tb_profile values(10, 25, '여자', '1995-10-11'); 실수로 두번 넣음
insert into tb_profile values(11, 30, '남자', '1992-10-11');
같은 테이블인 것처럼 병합하기
inner(교집합)
tb_member테이블에도 존재하고, tb_profile테이블에도 존재하는것만 결합해서 보여주는 것
SELECT 컬럼명1, 컬럼명2 ..FROM 테이블명1 (inner, left, rught) join 테이블명2 ON 테이블1.필드명 = 테이블2.필드명
(보고싶은 컬럼명1, 컬럼명2 ...테이블명 첫번째꺼(기준이 되는 테이블) join 두번째 테이블명 on 테이블1에서 합칠 테이블명(useridx) = 테이블2의 합칠 테이블명)
select mem_userid, mem_name, pro_age, pro_birth from tb_member inner join tb_profile on tb_member.mem_idx = tb_profile.pro_useridx
(tb_member.mem_idx 기준이 되는 테이블에, primary key가 잡혀있는 키 = foreign key(이래키)가 잡혀있는 테이블에, foreign key(외래키) 잡혀있는 필드 = 기준이 되는 필드가 서로 같게끔)
보고싶은 필드를 첫번째 필드나 두번째 필드를 적어주면 됨
mem_userid, mem_name, pro_age, pro_birth(안에 있는 필드명을 다 다르게 주기)
left
먼저 써진 테이블을 기준으로 뽑기
select mem_userid, mem_name, pro_age, pro_birth from tb_member left join tb_profile on tb_member.mem_idx = tb_profile.pro_useridx;
왼쪽 테이블 기준으로 모자른건 null로 나옴
right join
오른쪽 테이블을 중심으로
select mem_userid, mem_name, pro_age, pro_birth from tb_member right join tb_profile on tb_member.mem_idx = tb_profile.pro_useridx;
!!!중요함!!!
limit
원하는 곳에서 원하는데까지의 데이터 뽑기
select 컬럼명1, 컬럼명2 .. from 테이블명 limit 가져올 레코드 갯수
select mem_userid, mem_userpw, mem_name from tb_member limit 3;
select mem_userid, mem_userpw, mem_name from tb_member limit 5;
select mem_userid, mem_userpw, mem_name from tb_member limit 0, 3;
(0번부터 3개)
select mem_userid, mem_userpw, mem_name from tb_member limit 1, 2;
(1번부터 2개)
[MySQL] view(뷰) 생성, 수정, 삭제, 조회 (0) | 2023.03.21 |
---|---|
[MySQL] group by (0) | 2023.03.20 |
[MySQL] 데이터베이스 test.1 (0) | 2023.03.19 |
[MySQL] 회원가입 데이터베이스 테이블 만들기 (2) (0) | 2023.03.17 |
[MySQL] 회원가입 데이터베이스 테이블 만들기 (1) (0) | 2023.03.16 |
댓글 영역