ホームページ  >  記事  >  データベース  >  MySQL でネストされたサブクエリの問題を分析する方法

MySQL でネストされたサブクエリの問題を分析する方法

PHPz
PHPz転載
2023-05-27 23:46:271106ブラウズ

Mysql ネストされたサブクエリ

サブクエリとは、読者にサブクエリの概念についてより深く知ってもらうために、完全なクエリ ステートメントに異なる機能を持ついくつかの小さなクエリをネストして複雑なクエリを完了する記述形式を指します。

サブクエリが返す結果
サブクエリが返すことができるデータ型は、次の 4 つのタイプに分類されます。

  • 単一行と単一列: 単一値データとして理解できる特定の列の内容を返します。

  • 単一行と複数列: 複数の列の内容を 1 つにまとめて返します。データ行;

  • 複数行と単一列: レコードの複数行の同じ列の内容を返します。これは、動作範囲を指定するのと同じです;

  • 複数の行と複数の列: クエリ 返される結果は一時テーブルです;

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、**ALLEN と同じ職務に就いており、基本給が従業員番号 7521 より高いすべての従業員の情報を検索します。

--查找出与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从事同一工作且在同一年雇佣的全部雇员信息(包括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;
);
複数行と単一列のサブクエリ

主に 3 つの演算子を使用します: 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 サブクエリのタイプは複数行、複数列の結果セットですjavascript

平均給与が 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 と同等です。サブクエリには別名を定義する必要があります

3。サブクエリでフィールドを使用したい場合は、参照する「エイリアス.フィールド名」メソッド

select 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;
##で部門名をクエリします#Use subquery

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;

Use subquery

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。