>  기사  >  데이터 베이스  >  MySQL에서 중첩된 하위 쿼리 문제를 분석하는 방법

MySQL에서 중첩된 하위 쿼리 문제를 분석하는 방법

PHPz
PHPz앞으로
2023-05-27 23:46:271140검색

Mysql 중첩 하위 쿼리

하위 쿼리는 독자에게 하위 쿼리의 개념을 더 명확하게 하기 위해 완전한 쿼리 문에 서로 다른 기능을 가진 여러 개의 작은 쿼리를 중첩하여 복잡한 쿼리를 완성하는 작성 형식을 말합니다.

하위 쿼리는 결과를 반환합니다.
하위 쿼리가 반환할 수 있는 데이터 유형은 네 가지 유형으로 나뉩니다.

  • 단일 행 및 단일 열: 반환되는 것은 특정 열의 내용입니다.

  • 단일 행 및 다중 열: 데이터의 한 행에 있는 여러 열의 내용을 반환합니다.

  • 다중 행 및 단일 열: 레코드의 여러 행에 있는 동일한 열의 내용을 반환합니다.

  • 다중 행 다중 열: 쿼리에서 반환된 결과는 임시 테이블입니다.

WHERE 절에서 하위 쿼리를 사용합니다.

단일 행 및 단일 열 하위 쿼리를 처리합니다. , 다중 행 및 단일 열 하위 쿼리, WHERE 절의 단일 행 및 다중 열 하위 쿼리.

단일 행 및 단일 열 하위 쿼리

**예시 1, **회사에서 급여가 가장 낮은 사원의 전체 정보를 쿼리합니다.

--查询公司之中工资最低的雇员的完整信息
SELECT * 
FROM emp e
WHERE e.sal=(
  SELECT MIN(sal) 
  FROM emp);

**예시 2, **기본 급여가 가장 낮은 모든 사원의 정보를 쿼리합니다. 급여가 ALLEN보다 낮음

-- 查询出基本工资比ALLEN低的全部雇员信息
SELECT * 
FROM emp e
WHERE e.sal<(
 SELECT sal 
 FROM emp 
 WHERE ename=&#39;ALLEN&#39;
);

**예시 3, **기본급이 회사 평균급여보다 높은 모든 사원의 정보를 조회

--查询基本工资高于公司平均薪金的全部雇员信息
SELECT *
FROM emp e
WHERE e.sal>(
SELECT AVG(sal)
FROM emp);
단일 행 및 다중 열 하위 쿼리.

**예시 4, **사원번호 7521보다 기본급이 높은 ALLEN과 동일한 직업을 갖고 있는 모든 사원에 대한 정보를 알아보세요,

--查找出与ALLEN从事同一工作,并且基本工资高于雇员编号为7521的全部雇员信息,
SELECT *
FROM emp e
WHERE e.job=(
  SELECT job
  FROM emp 
  WHERE ename=&#39;ALLEN&#39;) 
  AND e.sal>(
  SELECT sal
  FROM emp 
  WHERE empno=7521);

**예시 5, **와 같은 직업을 가지고 있는지 쿼리하고 SCOTT과 동일한 급여를 가진 직원 정보

SELECT *
FROM emp e
WHERE (e.job,e.sal) = (
  SELECT job,sal
  FROM emp 
  WHERE ename=&#39;SCOTT&#39;)
  AND ename<>&#39;SCOTT&#39;;

**예 6, **직원 7566과 동일한 직무에 있고 동일한 리더십을 가진 모든 직원의 정보를 쿼리합니다.

  --查询与雇员7566从事同一工作且领导相同的全部雇员信息
SELECT *
FROM emp e
WHERE (e.job,e.mgr) =(
        SELECT job,mgr
        FROM emp
      WHERE empno=7566
);

**예 7, **모두 쿼리 ALLEN과 같은 직장에 있고 같은 해에 근무한 직원 직원 정보(ALLEN 포함)

--查询与ALLEN从事同一工作且在同一年雇佣的全部雇员信息(包括ALLEN)
SELECT *
FROM emp e
WHERE (e.job,to_char(e.hiredate,&#39;yyyy&#39;))=(
           SELECT job,to_char(hiredate,&#39;YYYY&#39;)
            FROM emp
            WHERE ename=&#39;ALLEN&#39;
);
다행 단일 열 하위 쿼리

주로 IN, ANY, ALL 세 가지 연산자를 사용합니다

IN 연산

**예시 8, **각 부서 관련 정보 조회 최저임금이 동일한 모든 사원정보를 조회

--查询出与每个部门中最低工资相同的全部雇员信息
SELECT *
FROM emp e
WHERE e.sal IN(
     SELECT MIN(sal)
    FROM emp
    GROUP BY deptno
);

**예시 9. **부서별로 최저임금이 동일하지 않은 모든 사원정보를 조회

--查询出不与每个部门中最低工资相同的全部雇员信息
SELECT *
FROM emp e
WHERE e.sal NOT IN(
     SELECT MIN(sal)
    FROM emp
    GROUP BY deptno
);

FROM 하위 쿼리:

FROM 절 다음의 데이터 소스 데이터 테이블뿐만 아니라 쿼리 결과도 가능합니다. FROM 하위 쿼리입니다.
보통 FROM 하위 쿼리의 반환 유형은 다중 행, 다중입니다. -column result setjavascript

평균 급여가 2,000보다 높은 직위와 해당 직위의 평균 급여를 쿼리합니다. java

第一种方式:能够使用HAVING字句实现

SELECT job,AVG(sal)
FROM emp
GROUP BY job
HAVING AVG(sal)>2000;

第二种方式:使用FROM子查询

SELECT job,avgsal
FROM (
  SELECT job,AVG(sal) AS avgsal
    FROM emp
      GROUP BY job) temp
WHERE temp.avgsal>2000;

커미션이 있고 급여가 커미션보다 높은 직원 정보 쿼리: web

SELECT e1.empno,e1.ename,e1.comm,e2.sal
FROM emp e1,emp e2
WHERE e1.comm IS NOT NULL AND e1.comm<e2.sal
AND e1.empno=e2.empno;

요약:

1.FROM 하위 쿼리의 데이터 소스는 다른 쿼리의 결과입니다. 결과는 임시 데이터 테이블

2과 같습니다. 원하는 경우 하위 쿼리에 대해 별칭을 정의해야 합니다. 하위 쿼리의 필드를 사용하려면 "alias.field name" 메서드를 사용하여

select subquery

를 참조해야 합니다.

select 이후의 하위 쿼리는 스칼라 쿼리로만 사용할 수 있습니다

#Case: Query the number of subquery

각 부서의 직원

SELECT d.*,(
    SELECT COUNT(*)
    FROM employees
    WHERE employees.`department_id`=d.department_id
)

FROM
    departments d;

#사례: 부서명을 사원번호로 쿼리 = 102

SELECT department_name
FROM
employees e
INNER JOIN
    departments d
ON
    e.`department_id`=d.`department_id`
WHERE
    e.`employee_id`=102;

서브 쿼리 사용

SELECT (
SELECT department_name
FROM
    employees e
INNER JOIN
    departments d
ON
    e.`department_id`=d.`department_id`
WHERE
    e.`employee_id`=102
);
`department_id`=d.`department_id`
WHERE
    e.`employee_id`=102;

서브 쿼리 사용

SELECT (
SELECT department_name
FROM
    employees e
INNER JOIN
    departments d
ON
    e.`department_id`=d.`department_id`
WHERE
    e.`employee_id`=102
);

위 내용은 MySQL에서 중첩된 하위 쿼리 문제를 분석하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제