본문 바로가기

SQL/mySQL

[mySQL] join 문

728x90

프로필 테이블 생성

    create table tb_profile (
        pro_idx bigint,
        pro_age int,
        pro_height int,
        pro_weight double,
        pro_mbti,
        foreign key(pro_idx) references tb_member(mem_idx)
    );

 

프로필 테이블 데이터 삽입

insert into tb_profile values(2, 20, 160, 50, 'esfp');
insert into tb_profile values(3, 27, 187, 73, 'istj');
insert into tb_profile values(5, 30, 170, 70, 'enfp');

 

멤버 테이블에 없는 인덱스번호 삽입 시

-- Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`aiclass`.`tb_profile`, CONSTRAINT `tb_profile_ibfk_1` FOREIGN KEY (`pro_idx`) REFERENCES `tb_member` (`mem_idx`))  
-- tb_member의 8번 인덱스는 없으므로 에러(외래키 제약조건)
insert into tb_profile values(8, 28, 175, 75, 'intj');

 

 

조인(join)
- 데이터베이스 여러 테이블에서 가져온 레코드를 하나의 테이블이나 결과 집합으로 표현
    select 컬럼명1, 컬럼명2 .. from 테이블1 [inner, left, right] join 테이블2 on
    테이블1.공통컬럼명 = 테이블2.공통컬럼명 where 조건절;

    ✅ inner join(교집합)
    select mem_idx, mem_userid, mem_name, mem_hp, mem_gender, pro_age, pro_mbti
    from tb_member inner join tb_profile on tb_member.mem_idx = tb_profile.pro_idx;

inner join


    ✅ left join(테이블1 기준으로 테이블2를 조합하는 형태)
    select mem_idx, mem_userid, mem_name, mem_hp, mem_gender, pro_age, pro_mbti
    from tb_member left join tb_profile on tb_member.mem_idx = tb_profile.pro_idx;

    -- (왼쪽 tb_member 테이블 기준. tb_profile의 없는 데이터는 null로 표시)

left join



    ✅ right join(테이블2 기준으로 테이블1을 조합하는 형태)
    select mem_idx, mem_userid, mem_name, mem_hp, mem_gender, pro_age, pro_mbti
    from tb_member right join tb_profile on tb_member.mem_idx = tb_profile.pro_idx;

    -- inner join과 같은 형태를 띔. (profile 테이블의 인덱스는 member테이블에 모두 존재하기 때문)

 

 

 

 

 

 

728x90

'SQL > mySQL' 카테고리의 다른 글

[mySQL] MySQL Workbench8.0 다운로드  (0) 2022.06.21
[mySQL] 데이터베이스, SQL 기본 문법, 집계함수  (0) 2022.04.20
[mySQL] mySQL  (0) 2022.04.19