• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [MySQL] 20. JOIN
        2024년 06월 05일
        • Song hyun
        • 작성자
        • 2024.06.05.:22
        728x90
        반응형

        [MySQL] 20. JOIN 

        1. JOIN이란?

        2. 왜 JOIN을 사용할까?

        3. JOIN의 특징

        4. 시나리오 코드로 JOIN 이해하기


        1. JOIN이란?

         

        -데이터베이스에서 조인은 두 개 이상의 테이블에서 관련된 데이터를 결합해, 새로운 결과를 생성할 때 사용하는 중요한 연산이다.

         


        2. 왜 JOIN을 사용할까?

         

        (1) 데이터베이스에서 정보는 중복을 최소화하고, 효율적으로 저장하기 위해 여러 테이블에 분산되어 저장한다. 그런데 실제로 정보를 사용할 때는 여러 테이블에 흩어져있는 데이터를 통합할 필요가 있다.

        (2) ex: 어떤 학생이 어떤 수업을 듣고 있는지 알고 싶을 때, '학생'과 '수업' 테이블을 결합해야만 필요한 정보를 얻을 수 있다.

        (3) 조인은 데이터베이스에서 분산된 정보를 효과적으로 통합해, 사용자가 원하는 특정 정보를 얻기 위한 도구이다.

         


        3. JOIN의 특징

         

        (1) 항상 먼저 접근하는 테이블이 기준이 되고, 아래의 그림에서 왼쪽 동그라미에 해당된다.

        (2) JOIN은 크게 INNER JOIN, OUTER JOIN으로 분류된다. 

        (3) INNER JOIN은 조건에 해당되는 데이터만 도출한다.

        (4) OUTER JOIN은 아래와 같이 분류된다. (MySQL에서는 FULL OUTER JOIN을 지원하지 않음)

        -LEFT OUTER JOIN
        -RIGHT OUTER JOIN

         

         


        4. 시나리오 코드로 JOIN 이해하기

         

        (1) 테이블 생성하기

        use mydb2;
        
        create table tb_grade(
            grade char(1) primary key,
            score int
        );
        
        create table tb_stduent(
            no int not null primary key,
            name varchar(2) not null,
            gender enum('F','M') not null,
            grade char(1),
            foreign key(grade) references tb_grade(grade)
        );

         

        *ENUM:데이터의 범주화. 들어올 데이터를 규정짓는다.

        *위의 코드에서 grade는 성적 단위를 규정하는 테이블이다. (ex: A,B,C,D,E...)

         


        (2) 테이블 스키마 추가 및 데이터 생성

        -- 오류 발생. 아래에서 스키마 추가
        -- insert into tb_stduent(no,name,gender,grade,age) values(100,'길동','F','B',25);
        -- 스키마 구조 변경이 필요하다. 
        -- 스키마= 테이블 구조, 제약사항
        
        alter table tb_stduent drop agr;
        alter table tb_stduent add age int;
        insert into tb_stduent(no,name,gender,grade,age)
        	values(101,'길동','F','B',25);
        insert into tb_stduent(no,name,gender,grade,age)
        	values(102,'둘리','M','C',21);
        insert into tb_stduent(no,name,gender,grade,age)
        	values(103,'도우너','F','D',23);
        insert into tb_stduent(no,name,gender,grade,age)
        	values(104,'뿌까','M','E',24);

         

         


        (3) 1단계 쿼리: 두 개의 테이블을 JOIN 하기(on x)

        별개의 테이블이었던 grade, student가 JOIN 된 것을 확인활 수 있다. (3번째 사진)

         

        *MySQL에서 JOIN,CROSS JOIN,INNER JOIN은 구문적으로 동등하다. 결과가 같고, 서로 대체 가능하다.

         

        -하지만 표준 SQL에서는 동일하지 않다. 보통 INNER JOIN은 ON 절과 함께 쓰이고, CROSS JOIn은 다르게 사용된다. CROSS JOIN은 한 쪽 테이블의 행 하나에 다른 쪽 테이블의 행을 각각 조인시키는 것이다.

        -ON 조건 없이 사용하게 되면, CROSS JOIN의 결과가 나오고

        -- JOIN 연산에 ON 절 사용 안해보기!!
        -- 크로스 JOIN이 된다.
        select*
        from tb_stduent
        join tb_grade;
        
        select*
        from tb_grade 
        join tb_stduent;

         

         


        (4) 1단계 쿼리 : 두 개의 테이블을 JOIN 하기(on)

         아래의 코드를 살펴보면, student 의 grade와 grade의 grade가 join 된 것을 확인할 수 있다.

        -- JOIN 연산은 가능한 ON 절과 함께 사용하자.
        -- JOIN 연산에는 --> INNER/OUTER
        -- -> INNER JOIN: 그냥 JOIN
        -- -> OUTER JOIN: 
        
        select *
        from tb_stduent
        join tb_grade
        on tb_stduent.grade=tb_grade.grade;

         


        (5) 2단계 쿼리: 필요한 부분만 가져오기

        위의 사진과 같이 두 테이블의 항목이 연결되고 있다.

        -- 2 단계 쿼리 : 필요한 부분만 가져오기
        select s.no, s.name, s.grade, s.age, s.score
        from tb_stduent as s
        join tb_grade as g
        on s.grade=g.grade;
        728x90
        반응형

        'MySQL' 카테고리의 다른 글

        [MySQL] 22. 테이블 복사 및 데이터 추가  (0) 2024.06.05
        [MySQL] 21. OUTER JOIN  (0) 2024.06.05
        [MySQL] 19. 시나리오 코드로 관계 차수 이해하기 : 야구 팀과 야구 선수  (0) 2024.06.04
        [MySQL] 18. 관계 차수  (0) 2024.06.04
        [MySQL] 1일 1쿼리 (1) : 영화 평점표 만들기  (0) 2024.06.04
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바