찾다
데이터 베이스MySQL 튜토리얼Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    1. 서문

    운전 테이블과 피동 테이블의 연관 조건을 on 뒤에 넣습니다. 운전 테이블과 피동 테이블에 대한 추가 필터 조건을 추가할 경우 on 또는 뒤에 넣습니다. 오류는 보고되지 않지만 얻은 결과 세트가 다릅니다. ? ?

    1.1 mysql 연결의 원리

    우리 모두 알고 있듯이 mysql은 Nested-Loop Join(최적화 알고리즘과 상관없이 Nested-Loop Join) 알고리즘을 기반으로 테이블 간 연결 작업을 수행하는데 일반적인 과정은 다음과 같습니다. :

    • 드라이버 테이블을 선택하고 드라이버 테이블과 관련된 필터 조건을 사용하여 드라이버 테이블에 대한 단일 테이블 쿼리를 실행합니다.

    • 쿼리된 드라이버 테이블의 각 레코드에 대해 다음에서 일치하는 레코드를 검색합니다. 구동 테이블.

    의사 코드는 다음과 같습니다.

    for each row in t1 {      // 遍历满足对t1单表查询结果集中的每一条纪录
        for each row in t2 {  // 对于某条t1纪录,遍历满足对t2单表查询结果集中的每一条纪录
            if row satisfies join conditions, send to client
        }
    }

    1.2 show warnings 명령

    우리가 작성한 sql 문은 옵티마이저에 의해 최적화된 후 실행을 위해 executor로 전달되며, show warnings 명령이 도움이 될 수 있습니다. 우리는 최적화된 SQL을 얻습니다.

    2. 준비 작업

    테이블 구조는 다음과 같습니다.

    CREATE TABLE `student` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `stu_code` varchar(20) NOT NULL DEFAULT '',
      `stu_name` varchar(30) NOT NULL DEFAULT '',
      `stu_sex` varchar(10) NOT NULL DEFAULT '',
      `stu_age` int(10) NOT NULL DEFAULT '0',
      `stu_dept` varchar(30) NOT NULL DEFAULT '',
      PRIMARY KEY (`id`) USING BTREE,
      UNIQUE KEY `uq_stu_code` (`stu_code`)
    ) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8mb4
    
    CREATE TABLE `course` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `cou_code` varchar(20) NOT NULL DEFAULT '',
      `cou_name` varchar(50) NOT NULL DEFAULT '',
      `cou_score` int(10) NOT NULL DEFAULT '0',
      `stu_code` varchar(20) NOT NULL DEFAULT '',
      PRIMARY KEY (`id`) USING BTREE,
      KEY `idx_stu_code_cou_code` (`stu_code`,`cou_code`)
    ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4

    테이블 데이터는 다음과 같습니다.

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    3 내부 조인

    sql에서 on과 where의 차이점은 다음과 같습니다. 다음과 같이:

    select * from student
    inner join course on student.stu_code = course.stu_code
    and student.stu_code >= 3 and course.cou_score >= 80;

    explain+sql 명령 실행:

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    show warnings 명령 실행:

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    분석: show warnings 분석에서 내부에 대한 Join Connection, 옵티마이저에 의한 최적화 후, 연결 조건은 where!로 변환됩니다! 즉, 내부 연결의 where와 on은 동일합니다. 对于inner join连接,经过优化器优化后,on连接条件会转化为where!也就是说内连接中的where和on是等价的

    4. left join左连接on、where的区别

    4.1 where驱动表过滤条件

    sql如下:

    select * from student
    left join course on student.stu_code = course.stu_code
    where student.stu_code >= 3;

    执行explain+sql命令: 

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    执行show warnings命令: 

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    结果集: 

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    分析:从explain分析看出,student作为驱动表,把student.stu_code >= 3作为过滤条件进行全表扫描,然后把查询到的每条纪录的student.stu_code(也就是on条件里面的)分别作为过滤条件让被驱动表course做单表查询。

    4.2 on驱动表过滤条件

    sql如下:

    select * from student
    left join course on student.stu_code = course.stu_code 
    and student.stu_code >= 3;

    执行explain+sql命令: 

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    执行show warnings命令: 

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    结果集: 

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    从结果集来看,student.stu_code >= 3并未生效,为什么?

    分析:从explain分析看出,student作为驱动表,做全表扫描,然后把查询到的每条记录的student.stu_code和student.stu_code >= 3(也就是on条件里面的)分别做为过滤条件让被驱动表做单表查询;此时student.stu_code >= 3对驱动表是不过滤的,仅在连接被驱动表时生效,查询不到符合纪录而返回NULL!

    4. 드라이버 테이블 필터링 조건

    sql이 있는 경우와 4.1의 차이점은 다음과 같습니다.

    select * from student
    left join course on student.stu_code = course.stu_code 
    and course.cou_score >= 80;
    explain+sql 명령을 실행합니다.

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?Mysql 테이블 연결의 실행 프로세스는 무엇입니까

    show warnings 명령 실행:

    Mysql 테이블 연결 실행 프로세스는 무엇입니까Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    결과 세트:

    Mysql 테이블 연결 실행 과정은 무엇입니까

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    분석: 🎜Explain 분석 결과에서, Student를 드라이버 테이블로 사용하고, Student.stu_code >= 3을 필터 조건으로 사용하여 전체 테이블 스캔을 수행한 후, Student.stu_code(즉, on 조건)를 사용합니다. 쿼리된 각 레코드는 필터 조건으로 사용되어 구동됩니다. 테이블 코스에 대해 단일 테이블 쿼리를 만듭니다. 🎜🎜4.2 드라이버 테이블 필터 조건 🎜🎜🎜sql은 다음과 같습니다. 🎜🎜rrreee🎜🎜 explain+sql 명령 실행: 🎜🎜🎜Mysql 테이블 연결 실행 프로세스는 무엇입니까🎜🎜🎜show warnings 명령 실행: 🎜🎜🎜Mysql 테이블 연결 실행 프로세스는 무엇입니까🎜🎜🎜결과 세트: 🎜🎜🎜Mysql 테이블 연결 실행 프로세스는 무엇입니까🎜🎜결과 집합에서 Student.stu_code >= 3은 적용되지 않습니다. , 왜? 🎜🎜🎜분석: 🎜설명 분석에서 전체 테이블 스캔을 수행하기 위해 학생이 드라이버 테이블로 사용된 다음 쿼리된 각 레코드의 Student.stu_code 및 Student.stu_code가 >= 3임을 알 수 있습니다(즉 on 조건에서) 이를 필터 조건으로 사용하여 구동 테이블이 단일 테이블 쿼리를 수행하도록 합니다. 이때, Student.stu_code >= 3은 드라이버 테이블에 대해 필터링되지 않습니다. 쿼리에서 일치하는 레코드를 찾을 수 없으면 NULL이 반환됩니다. 🎜🎜4.3 구동 테이블 필터 조건 🎜🎜🎜sql은 다음과 같습니다. 🎜🎜rrreee🎜🎜 explain+sql 명령 실행: 🎜🎜🎜🎜🎜🎜🎜show warnings 명령 실행: 🎜🎜🎜🎜 🎜 🎜🎜 결과 에피소드: 🎜🎜🎜🎜🎜

    분석: 설명 분석에서 Student를 드라이버 테이블로 사용하여 전체 테이블 스캔을 수행한 다음, Student.stu_code 및course.cou_score >= 80(즉, on 조건)임을 알 수 있습니다. ) 각 쿼리된 레코드는 개별적으로 구동 테이블을 필터 조건으로 사용하여 단일 테이블 쿼리를 수행합니다.

    4.4 여기서 구동 테이블 필터 조건

    sql은 다음과 같습니다.

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    explain+sql 명령 실행:

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    표시 경고 명령 실행:

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    결과 세트:

    Mysql 테이블 연결 실행 과정은 어떻게 되나요?

    표시 경고 분석에서? 왼쪽 조인 연결이 내부 조인 연결이 되나요?

    분석: 표시 경고 분석에서 구동 테이블의 where에 필터 조건이 있는 경우 왼쪽 조인이 무효화되고 내부 조인 연결로 최적화된다는 것을 알 수 있습니다. 그래서 被驱动表的过滤条件应该放在on而不是where.

    위 내용은 Mysql 테이블 연결 실행 과정은 어떻게 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명
    이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
    MySQL : 초보자가 마스터하는 필수 기술MySQL : 초보자가 마스터하는 필수 기술Apr 18, 2025 am 12:24 AM

    MySQL은 초보자가 데이터베이스 기술을 배우는 데 적합합니다. 1. MySQL 서버 및 클라이언트 도구를 설치하십시오. 2. SELECT와 같은 기본 SQL 쿼리를 이해하십시오. 3. 마스터 데이터 작업 : 데이터를 만들고, 삽입, 업데이트 및 삭제합니다. 4. 고급 기술 배우기 : 하위 쿼리 및 창 함수. 5. 디버깅 및 최적화 : 구문 확인, 인덱스 사용, 선택*을 피하고 제한을 사용하십시오.

    MySQL : 구조화 된 데이터 및 관계형 데이터베이스MySQL : 구조화 된 데이터 및 관계형 데이터베이스Apr 18, 2025 am 12:22 AM

    MySQL은 테이블 구조 및 SQL 쿼리를 통해 구조화 된 데이터를 효율적으로 관리하고 외래 키를 통해 테이블 ​​간 관계를 구현합니다. 1. 테이블을 만들 때 데이터 형식을 정의하고 입력하십시오. 2. 외래 키를 사용하여 테이블 간의 관계를 설정하십시오. 3. 인덱싱 및 쿼리 최적화를 통해 성능을 향상시킵니다. 4. 데이터 보안 및 성능 최적화를 보장하기 위해 데이터베이스를 정기적으로 백업 및 모니터링합니다.

    MySQL : 주요 기능 및 기능이 설명되었습니다MySQL : 주요 기능 및 기능이 설명되었습니다Apr 18, 2025 am 12:17 AM

    MySQL은 웹 개발에 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 주요 기능에는 다음이 포함됩니다. 1. 다른 시나리오에 적합한 InnoDB 및 MyISAM과 같은 여러 스토리지 엔진을 지원합니다. 2.로드 밸런싱 및 데이터 백업을 용이하게하기 위해 마스터 슬레이브 복제 기능을 제공합니다. 3. 쿼리 최적화 및 색인 사용을 통해 쿼리 효율성을 향상시킵니다.

    SQL의 목적 : MySQL 데이터베이스와 상호 작용합니다SQL의 목적 : MySQL 데이터베이스와 상호 작용합니다Apr 18, 2025 am 12:12 AM

    SQL은 MySQL 데이터베이스와 상호 작용하여 데이터 첨가, 삭제, 수정, 검사 및 데이터베이스 설계를 실현하는 데 사용됩니다. 1) SQL은 Select, Insert, Update, Delete 문을 통해 데이터 작업을 수행합니다. 2) 데이터베이스 설계 및 관리에 대한 생성, 변경, 삭제 문을 사용하십시오. 3) 복잡한 쿼리 및 데이터 분석은 SQL을 통해 구현되어 비즈니스 의사 결정 효율성을 향상시킵니다.

    초보자를위한 MySQL : 데이터베이스 관리를 시작합니다초보자를위한 MySQL : 데이터베이스 관리를 시작합니다Apr 18, 2025 am 12:10 AM

    MySQL의 기본 작업에는 데이터베이스, 테이블 작성 및 SQL을 사용하여 데이터에서 CRUD 작업을 수행하는 것이 포함됩니다. 1. 데이터베이스 생성 : createAbasemy_first_db; 2. 테이블 만들기 : CreateTableBooks (idintauto_incrementprimarykey, titlevarchar (100) notnull, authorvarchar (100) notnull, published_yearint); 3. 데이터 삽입 : InsertIntobooks (Title, Author, Published_year) VA

    MySQL의 역할 : 웹 응용 프로그램의 데이터베이스MySQL의 역할 : 웹 응용 프로그램의 데이터베이스Apr 17, 2025 am 12:23 AM

    웹 응용 프로그램에서 MySQL의 주요 역할은 데이터를 저장하고 관리하는 것입니다. 1. MySQL은 사용자 정보, 제품 카탈로그, 트랜잭션 레코드 및 기타 데이터를 효율적으로 처리합니다. 2. SQL 쿼리를 통해 개발자는 데이터베이스에서 정보를 추출하여 동적 컨텐츠를 생성 할 수 있습니다. 3.mysql은 클라이언트-서버 모델을 기반으로 작동하여 허용 가능한 쿼리 속도를 보장합니다.

    MySQL : 첫 번째 데이터베이스 구축MySQL : 첫 번째 데이터베이스 구축Apr 17, 2025 am 12:22 AM

    MySQL 데이터베이스를 구축하는 단계에는 다음이 포함됩니다. 1. 데이터베이스 및 테이블 작성, 2. 데이터 삽입 및 3. 쿼리를 수행하십시오. 먼저 CreateAbase 및 CreateTable 문을 사용하여 데이터베이스 및 테이블을 작성한 다음 InsertInto 문을 사용하여 데이터를 삽입 한 다음 최종적으로 SELECT 문을 사용하여 데이터를 쿼리하십시오.

    MySQL : 데이터 저장에 대한 초보자 친화적 인 접근 방식MySQL : 데이터 저장에 대한 초보자 친화적 인 접근 방식Apr 17, 2025 am 12:21 AM

    MySQL은 사용하기 쉽고 강력하기 때문에 초보자에게 적합합니다. 1.MySQL은 관계형 데이터베이스이며 CRUD 작업에 SQL을 사용합니다. 2. 설치가 간단하고 루트 사용자 비밀번호를 구성해야합니다. 3. 삽입, 업데이트, 삭제 및 선택하여 데이터 작업을 수행하십시오. 4. Orderby, Where and Join은 복잡한 쿼리에 사용될 수 있습니다. 5. 디버깅은 구문을 확인하고 쿼리를 분석하기 위해 설명을 사용해야합니다. 6. 최적화 제안에는 인덱스 사용, 올바른 데이터 유형 선택 및 우수한 프로그래밍 습관이 포함됩니다.

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    뜨거운 도구

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    WebStorm Mac 버전

    WebStorm Mac 버전

    유용한 JavaScript 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    DVWA

    DVWA

    DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

    Dreamweaver Mac版

    Dreamweaver Mac版

    시각적 웹 개발 도구