DATABASE 2 - MySQL

관계형 데이터베이스의 꽃 JOIN

댓글

댓글 본문
  1. Cpt.MJ
    So Funny
  2. 영상이 올라온 지 6년이 다 되어가는 시점에서 보는데도 학부에서 설명만 듣고 따라 치며 배우던 시절보다 더 많은 걸 알아갑니다.
    강의에서는 뒤에 order by 절이 없어도 profile의 developer 값끼리 정렬되고 그래서 나오는 것처럼 정렬되게 하려면 어떻게 해야 할까 생각하며 강의를 들으니까 더욱 재밌고 머리에 잘 들어오네요. 좋은 강의 감사합니다.
    (만약에 profile의 developer 값끼리 정렬되게 하고 싶으신 분은 기존 select 쿼리문 뒤에 order by profile='developer' desc; 라고 추가하면 화면이 나오는 것처럼 정리되네요. developer 말고 name으로도 가능)
  3. Sansol Park
    조인 연산이 수행되면 결과 테이블은 기본적으로 특정 순서로 정렬되지 않습니다. 이는 SQL 표준에 따라 정의된 동작입니다. 따라서, 특정 필드를 기준으로 정렬하려면 명시적으로 ORDER BY를 사용해야 합니다.

    MySQL 같은 일부 데이터베이스 시스템은 내부적으로 최적화를 위해 결과를 특정 방식으로 정렬할 수 있습니다. 이 때문에, 같은 JOIN 쿼리를 실행해도 데이터베이스 시스템이나 버전, 데이터의 상태 등에 따라 결과의 순서가 달라질 수 있습니다.

    따라서, 강사님 화면에서와 같이 author_id를 기준으로 내림차순 정렬을 원한다면, ORDER BY를 사용해야 합니다. 이는 SQL 쿼리 결과의 순서를 명확히 보장하는 방법입니다.

    SELECT * FROM topic LEFT JOIN author ON topic.author_id=author.who ORDER BY author.who DESC;

    이 쿼리는 topic 테이블과 author 테이블을 LEFT JOIN하고, author.who를 기준으로 내림차순으로 정렬합니다. 이렇게 하면, 원하시는 대로 author_id를 기준으로 결과가 정렬됩니다.

    GPT-4의 답변입니다.
    대화보기
    • enujo
      23.12.14 Join!
    • 박나희
      join을 하면 강사님 화면에서처럼 author_id 번호를 기준으로 내림차순이 되는 게 아니라 topic의 id를 기준으로 되네요:(

      강제로
      SELECT * FROM topic LEFT JOIN author ON topic.author_id=author.who ORDER BY author.who ASC;

      order by를 넣어야 같게 표시가 되던데, 왜 join시에 자동으로 author_id와 id 기준이 아닌 topic table의 id를 기준으로 오름차순으로 정렬이 되는 걸까요..?

      **참고로 위에 기입한 명령문에 id가 아니라 who인 것은 reserved words 때문에 변경했습니다.
    • 유민
      오오 감사합니다!!!
      대화보기
      • 솜사탕
        2023.08.18 완료
      • 솜사탕
        이 영상에서의 예제를 기준으로 확인해보면,

        SELECT *
        FROM topic
        LEFT JOIN author ON topic.author_id != author.id;
        로 쿼리를 작성했을 때
        topic.author_id = author.id 일 때 같은 값으로 매칭되어(1<->1, 2<->2, 3<->3) 결과 행이 5개였던 것과 달리
        같은 것을 제외하고 모두 매칭되어(1<-> 2,3 / 2<->1,3/ 3<->1,2) 행이 10개가 됩니다!
        대화보기
        • 이진우
          2023.07.13 완
          감사합니다!
        • 김태욱
          Join의 사용법
          테이블과 테이블을 조인하기 전에, 테이블을 어떻게 결합할지 생각해봐야함
          = 기준이 무엇이냐 : ON
          컬럼 이름이 중복되면 앞에 명시
          ---
          테이블을 분리하고 연결짓는다는 것은 - 다른 모든 테이블을 대상으로 일괄적인 edit이 가능하다는 것
        • 유민
          JOIN을 할 때 ON 조건에 대부분 '='를 해주는데
          '!='으로 ON을 묶어주는 경우에는 테이블이 어떻게 묶이는 건가요?
        • 유민
          두 테이블 결합할 때 이름이 같은 행이 있으면 앞에 테이블명을 명시해야함
        • 아리송
          2023.04.01
        • 코드파괴자
          2023.03.23 완-
        • ywbird
          2023.01.16
        • otter
          22.12.30
        • 감자
          22.12.14
        • 당당
          2022.11.05
        • 아캔두잇
          20220815 완료
        • boat
          join을 이용하여 분리된 테이블을 읽을 때 통합해서 읽을 수 있다.

          SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;
          SELECT comment.id, description, name, profile FROM comment LEFT JOIN author ON comment.author_id = author.id;

          테이블을 분리함으로써 데이터 하나를 바꾸면 관련있는 모든 테이블들의 정보를 바꿀 수 있다.
        • toonfac
          220705 오후 9시 59분 완료
        • makeFun
          2022.06.25 re
        • 시아
          영상에서...topic 테이블과 author 테이블을 합치고 나서는 topic_id의 순서가 12534로 틀어지는데 왜 그런 걸까요?
          author_id 순서로 바뀐건지...
        • 1Q1S
          2022.02.02
        • 드림보이
          2022.01.29. DATABASE2 - MySQL - 관계형 데이터베이스의 꽃 JOIN 파트 수강완료
        • 코딩뽀시래기
          2022.01.26.수
        • mirpia
          study
        • heesang300
          2022.01.10 수강
        • pmxsg
          2022.01.10. 수강
        • chalieya
          관계형 데이터 베이스 강의 감사합니다.
        • inventorh
          좋은강의 감사합니다!
        • Alex
          210829
          - completed LEFT JOIN excise
          - SELECT Topic.id AS "TOPIC ID", profile, description from topic LEFT JOIN Author on Topic.author_id = Author.id
        • Kangmin Kim
          2021.8.3
        • Duke
          2021.08.01
        • snoopy_thon
          21.07.06
        • const.takeo
          코멘트 테이블까지 하실분

          create table comment (
          id int(11) not null auto_increment,
          description varchar(130) null,
          author_id int(11) null,
          primary key (id)
          );

          insert into comment (id, description, author_id)
          VALUES (1, 'mysql is awesome', 1);

          insert into comment (id, description, author_id)
          VALUES (2, 'postgres is awesome', 1);

          insert into comment (id, description, author_id)
          VALUES (3, 'I wanna be skilled-full back end developer', 2);

          insert into comment (id, description, author_id)
          VALUES (4, 'I wanna study more', 1);

          select comment.id as comment_id, description, name, profile from comment left join author on comment.author_id = author.id;
        • 정훈
          감사합니다.
        • 달려라자전거
          2021.05.19.
        • 3개 테이블도 조인 성공
          감사합니다
        • colatech
          21-03-31
        • jwoh
          21-03-26
        • hanel_
          21.3.14
        • jeisyoon
          2021.03.05 MySQL JOIN - OK
        • chimhyangmoo
          21.03.05
        • 장휴일
          * 관계형 데이터베이스의 꽃 JOIN


          각각 독립적인(분리된) 테이블을 읽을 때, 그 테이블이 하나의 테이블로 저장되어 있었던 것과 같은 효과.

          테이블과 테이블을 JOIN 하기 위해서는,
          데이터베이스가 어떠한 목적을 가지고 있는지를 말할 수 있어야 한다.

          SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;

          topic 테이블의 author_id 값과, author테이블의 id 값이 같다

          SELECT topic.id, title, description, created, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id;

          행을 보기 편하게 바꾸고 싶을 때,,

          AS 사용 : topic.id AS topic_id

          정보 기술에서 중복을 제외 한다는 것. !매 우 중 요!


          테이블을 분리한다는 것.
          만약 테이블이 특정 식별자를 가지고 있다면, JOIN을 통해 얼마든지 관계를 맺을 수 있다.


          SELECT * FROM comment LEFT JOIN author ON comment.author_id = author.id;

          UPDATE author SET profile='database administrator' WHERE id = 2;


          '하나를 바꾸면 전체가 바뀐다'


          ### JOIN은 관계형 데이터베이스를 관계형 데이터베이스 답게 만드는 명령어 ###
        • 마아앙
          2021.02.15
        • 밀키
          2021.02.13 수강 완료
        • 불닭볶음면
          2021. 01. 24
        • 이나라
          21.01.22
        • Noah
          2021.01.10 완료!
        버전 관리
        egoing
        현재 버전
        선택 버전
        graphittie 자세히 보기