>  기사  >  데이터 베이스  >  MySQL 쿼리 문 복잡한 쿼리

MySQL 쿼리 문 복잡한 쿼리

赶牛上岸
赶牛上岸원래의
2018-03-06 15:37:129041검색

MySQL은 관계형 데이터베이스 관리 시스템입니다. 관계형 데이터베이스는 모든 데이터를 하나의 큰 창고에 저장하는 대신 여러 테이블에 저장하므로 속도와 유연성이 향상됩니다. MySQL에는 복잡한 쿼리가 많은 경우가 많습니다. 모든 사람의 시간을 절약하기 위해 편집기에서는 일반적으로 사용되는 몇 가지 복잡한 쿼리를 요약했습니다.

MySQL 복합 쿼리

1. 그룹 쿼리:

1. 키워드: GROUP BY

2. 사용법: GROUP BY 문은 집계 함수 (예: SUM) 과 함께 사용되어 하나 이상의 열에 따라 결과 집합을 그룹화합니다. 집계 함수를 추가해야 하는 경우가 많습니다. GROUP BY 문.

다음 두 테이블이 제공됩니다. 하나는 emp이고 다른 하나는 dept입니다. 아래 표시된 대로 다음 쿼리에서 이 두 테이블에 대해 작업을 수행합니다. 첫 번째:

emp

테이블

두 번째:

dept 테이블

지금 emp의 각 부서의 총 급여를 쿼리합니다. SELECT deptno,SUM(sal)FROM emp GROUP BY deptno; 여기서는 총 급여( sal)을 부서번호(deptno)에 따라 그룹화해야 하므로 합계에 sum()을 사용합니다. where와 had는 모두 조건부 판단입니다. have를 소개하기 전에 where와 had의 차이점을 살펴보겠습니다.

where는 쿼리 결과를 결정하는 데 사용됩니다. 그룹화하기 전에 해당 행을 제거하세요. where 조건을 충족하지 않습니다. 즉, 조건은 집계 함수

를 포함할 수 없으며 특정 행을 표시하려면 where 조건을 사용하세요.

having의 기능은 조건을 충족하는 그룹을 필터링하는 것입니다. 즉, 조건에는 집계 함수가 포함되는 경우가 많습니다, 가지고 있는 것을 사용합니다. 조건은 특정 그룹을 표시하거나 여러 그룹화 기준을 사용하여 그룹화할 수 있습니다.

예: emp 테이블에서 총 급여가 10,000보다 큰 부서 번호를 쿼리하려고 합니다. 명령문은 다음과 같습니다.

SELECT deptno,SUM(sal)FROM emp GROUP BY deptno HAVING SUM(sal)>10000;

결과는 다음과 같습니다.

이것은 찾는 방법은 총 급여가 10,000보다 큰 부서 번호는 20입니다. (이해를 돕기 위해 총 급여도 표시됩니다.) 2. 테이블 쿼리에 가입하십시오 (내부 조인):

구문: select field name 1, field name 2 from table1 [INNER] Join table2 ON table1.Field name=table2.Field name;

참고: 내부 조인은 연결된 다른 테이블에 일치하는 행이 없는 모든 행을 결과에서 삭제합니다. 연결된 테이블에 소유된 정보만 쿼리할 수 있으므로 내부 조인은 정보를 잃을 수 있으며 inner는 생략.

예를 들어 emp와 dept 테이블을 조인하고 ename과 deptno를 쿼리하면 명령문은 다음과 같습니다.

SELECT emp.ename,dept.deptno FROM emp INNER JOIN dept ON emp. deptno=dept .deptno;

또 다른 작성 방법이 있습니다: SELECT emp.ename,dept.deptno from emp,dept where emp.deptno=dept.deptno;

참고: dept 테이블에 40이라는 deptno가 있는 것으로 밝혀졌으나 쿼리 후에는 없기 때문입니다. emp의 deptno 필드에 값이 40이 아니므로 내부 조인을 사용하여 연결합니다. dept 테이블에서 deptno 필드 값이 40인 레코드는 자동으로 삭제됩니다.


2. 외부 조인:

2.1: 왼쪽 외부 조인:

결과 집합에는 왼쪽 테이블의 모든 행이 유지되지만 첫 번째 테이블과 일치하는 두 번째 테이블의 행만 포함됩니다. 두 번째 테이블의 해당 빈 행은

NULL 값에 저장됩니다.

2.2: 오른쪽 외부 조인: 결과 집합은 오른쪽 테이블의 모든 행을 유지하지만 첫 번째 테이블과 일치하는 두 번째 테이블의 행만 포함합니다. 두 번째 테이블의 해당 빈 행은 NULL 값에 저장됩니다.

왼쪽 외부 조인과 오른쪽 외부 조인으로 두 테이블의 위치를 ​​교환해도 동일한 효과를 얻을 수 있습니다.

이제 그룹화와 조인 테이블을 사용하는 쿼리를 수행합니다.

예: 각 부서의 총 급여에 대해 emp를 쿼리하고 해당 부서에 대응하려고 합니다. name in the dept table

다음 문장을 구문 분석하세요. 쿼리 필드는 emp에 있는 각 부서의 sal(총 급여)입니다. 여기서는 그룹 쿼리를 사용해야 하지만, emp의 부서 이름(dname)도 쿼리해야 합니다. dname

은 dept 테이블에 있으므로 emp와 dept 테이블을 연결해야 합니다.

아이디어 1: 먼저 필요한 모든 필드를 쿼리한 다음 그룹화하므로 먼저 연결하고 then group 명령문은 다음과 같습니다.

SELECT e.deptno,d.dname,SUM(e.sal) FROM emp e INNER JOIN dept d ON e.deptno=d.deptno GROUP BY d.deptno;) (여기서는

이 사용되었습니다. emp의 별칭은 e이고, dept의 별칭은 d입니다.)

두 번째 작성 방법:

SELECT e.deptno,d. dname,SUM(e.sal) FROM emp e,dept d WHEREe.deptno=d.deptno GROUP BY d.deptno;

이 두 가지 쓰기 방법의 결과는 다음과 같이 동일합니다.



아이디어 2: emp의 각 부서의 총 급여를 쿼리하고 이 결과 집합을 테이블(여기에서는 테이블 1이라고 함)로 처리하고, 그런 다음 테이블 1을 dept 테이블에 연결하여 해당 부서 이름(dname)을 쿼리합니다. 1단계: SELECT deptno,SUM(sal) FROM emp GROUP BY deptno; 이제 emp 테이블을 dept

테이블과 비교합니다. 연결:

2단계: SELECT xin.*,d.dname FROM(SELECT deptno,SUM(sal) FROM emp GROUP BY deptno) xin INNER JOIN dept d ON xin.deptno

=d.deptno ;이러한 방식으로 원하는 결과가 쿼리됩니다. 여기서 xin은 별칭입니다.



여기 코드는 매우 길어 보입니다. 사실, 첫 번째 쿼리 결과를 다른 테이블에 연결하는 테이블로 처리한다는 아이디어입니다. 실수하기가 쉽지 않습니다. 더 많은 연습을 통해 작성하는 데 매우 능숙해질 것입니다.

3. 페이지 매김:

키워드: LIMIT

구문: select * from tableName 조건 현재 페이지 번호 제한 * 페이지 용량 - 1, 페이지 용량

일반 제한은

For와 함께 사용됩니다. 예를 들어 부서번호 오름차순으로 정렬된 emp 테이블의 5~10번 레코드를 조회하여 페이지당 5개의 레코드를 표시하려면

SELECT *FROM emp ORDER BY deptno LIMIT 4,5;

이렇게 원하는 결과를 조회할 수 있습니다. 참고로 마지막 매개변수 5는 페이지 용량, 즉 이 페이지에 표시할 행 수(즉, 처음부터 레코드 막대 수)입니다. 이 페이지 끝까지).

예를 들어 17페이지의 레코드를 쿼리하려는 경우 각 페이지에는 10개의 레코드가 표시됩니다.

LIMIT 17*10-1,10;

Four: IN

키워드: In

하위 쿼리의 반환 값 결과에 두 개 이상의 조건이 있는 경우 IN을 사용해야 합니다.

관련 권장 사항: MySQL5.7에서 my.ini 파일 누락 문제를 해결하는 방법

mysql max와 where 사이의 실행 문제에 대하여

MySQL 통계 자세한 개요

위 내용은 MySQL 쿼리 문 복잡한 쿼리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.