먼저 문제 설명을 쉽게 하기 위해 emp(직원 정보)와 dept(직원 부서 정보) 두 개의 테이블을 생성합니다. 데이터는 다음과 같습니다.
이전 글에서 단일 테이블 쿼리를 공유했습니다. 하지만 실제로 애플리케이션에서는 확인하려는 데이터가 동일한 테이블에 있지 않고 다른 테이블에서 올 가능성이 높습니다. 다중 테이블 쿼리가 조건을 추가하지 않는 경우 얻은 결과를 데카르트 곱이라고 합니다. 예를 들어 직원 이름, 직원 급여 및 부서 이름을 찾습니다.
결과는 이렇다는 것을 알 수 있는데, 첫 번째 테이블의 첫 번째 레코드를 선택하고 두 번째 테이블의 모든 레코드와 결합한 다음 첫 번째 테이블의 레코드에서 두 번째 레코드를 가져와서 모두 결합한 것을 볼 수 있습니다. 두 번째 테이블의 레코드는 결과가 의미가 없습니다. 우리에게 필요한 것은 emp.deptno = dept.deptno 필드가 있는 레코드입니다.
Self-join
Self-join은 동일한 테이블에 쿼리를 연결하는 것을 의미합니다.
직원의 상위 리더 이름을 표시합니다. FORD
Subquery
Subquery는 Embedding을 의미합니다. in other sql 명령문의 select 문을 중첩 쿼리라고도 합니다.
단일 행 하위 쿼리: 하위 쿼리의 쿼리 결과는 단 하나의 행입니다.
SMITH와 같은 부서에 있는 직원을 표시합니다.
다중 행 하위 쿼리(in, all, any): 여러 개를 반환하는 하위 쿼리 기록
상위 10개 부서와 동일한 직책을 맡은 공무원의 이름, 직업, 급여, 부서번호를 조회하되, 10위 자신의 정보는 포함하지 않음
연봉이 상위 10개 부서 이상인 직원을 표시 부서 번호가 30인 모든 직원의 급여 이름, 급여 및 부서 번호
급여가 부서 번호가 30인 직원의 급여보다 높은 직원의 이름, 급여 및 부서 번호를 표시
다중 열 하위 쿼리: 여러 데이터 열을 반환하는 하위 쿼리 문
SMITH 자신을 제외하고 SMITH와 정확히 동일한 부서 및 직위에 있는 직원을 쿼리합니다.
from 절에 하위 쿼리 사용
표시 부서 평균 연봉보다 높은 직원 정보
부서별 최고 연봉자 이름, 직업, 연봉 찾기
각 부서 정보(부서명, 전화번호, 주소) 및 직원 수
여기서 사용할 수 있는 방법은 두 가지가 있는데, 데이터가 많을 경우 다중 테이블 쿼리보다 from 하위 쿼리의 효율성이 더 높다는 것이 입증되었습니다.
테이블의 중복 레코드 삭제
테이블에 중복된 데이터가 있는 것으로 알려져 있습니다 tt
빈 테이블 생성 tmp_tt 테이블의 구조는 테이블 생성과 동일합니다. tmp_tt like tt;
Change tt 테이블에서 구별을 수행하고 데이터를 빈 테이블로 가져옵니다. tmp_tt에 삽입합니다. tt에서 구별 *을 선택합니다. ;
merge queryin 실제 응용에서는 다중 선택의 실행 결과를 병합하기 위해 Union 및 Union All Set 연산자를 사용할 수 있습니다1 Union 연산자는 두 결과의 합집합을 구하는 데 사용됩니다. , 그런 다음 중복 행을 자동으로 제거하여 급여가 2500보다 큰 사람을 찾습니다. 그리고 직위가 Manger인 사람
2. Union all은 Union과 유사하지만 중복 항목을 자동으로 제거하지 않습니다.예: 유사 또는
외래 키
외래 키는 마스터 테이블과 슬레이브 테이블을 정의합니다. 관계의 경우 외래 키 제약 조건은 주로 슬레이브 테이블에 정의되며 마스터 테이블에는 기본 키 또는 고유 키가 있어야 합니다. 외래키 정의 시 외래키 컬럼 데이터는 메인 테이블 컬럼에 존재하거나 NULL이어야 한다. 예: 기본 테이블 클래스인 슬레이브 테이블을 생성하십시오. 외래 키는 기본 테이블에 존재할 수 없습니다. 에는 존재하지 않습니다.
관련 질문이 더 필요하시면 PHP 중국어 웹사이트를 방문하세요:mysql 비디오 튜토리얼
위 내용은 mysql의 다중 테이블 쿼리에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!