ホームページ  >  記事  >  データベース  >  MySQLデータベースのサブクエリの構文規則は何ですか?

MySQLデータベースのサブクエリの構文規則は何ですか?

WBOY
WBOY転載
2023-05-27 11:37:24954ブラウズ

MySQLデータベースのサブクエリの構文規則は何ですか?

データを抽出する際には、依存関係を持つ未知のデータが多数存在するため、クエリ ステートメントにサブクエリをネストする必要があります。まずデータのセットを取得し、その結果を次のクエリのオブジェクトとして使用する必要があります。 「テーブル接続の章」で、サブクエリの効率が低いことについてお話しました。実際、すべてのサブクエリが非効率であるわけではありません。レコードを照合するときに、「WHERE」サブクエリを繰り返し実行する必要があります。これは真実ではありません。推奨されています。ただし、クエリ結果セットをテーブルとして使用し、他のテーブルと接続する場合、これは "FROM" 句のサブクエリになります。このサブクエリ方法は引き続き推奨されます。

サブクエリの概要

サブクエリは、クエリ ステートメント内にネストされたクエリです。

通常のクエリ ステートメントは、「SELECT」サブクエリと「FROM」サブクエリ、「WHERE」に分かれています。 subquery; (「'FROM' subquery」を使用することを強くお勧めします)

サブクエリの例は次のとおりです:

基本給与が会社の平均基本給与を超える従業員の情報をクエリします。この場合、以前はテーブル結合を通じて実装しましたが、今度はサブクエリを使用して実装する方法を見てみましょう。 )

SELECT
    empno, ename, sal
FROM 
    t_emp
WHERE
    sal >= (SELECT AVG(sal) FROM t_emp);
    
-- 正常情况下,将聚合函数作为 WHERE 子句的条件是不可以的,但是这里利用子查询与聚合函数先将平均底薪查询出来,这就变成具体的数据了
-- 这种情况下,作为 WHERE 子句的条件,就可以被使用了

MySQLデータベースのサブクエリの構文規則は何ですか?

WHERE サブクエリ

SQL ステートメントを作成する場合、WHERE サブクエリが思考ロジックに最も一致します

この種のサブクエリは最もシンプルで理解しやすいですが、非常に非効率なサブクエリです。

基本給が会社の平均基本給を超える従業員情報について、先ほど示したクエリを考えてみましょう。 「WHERE」句で各従業員レコードを「SELECT」サブクエリと比較する場合、サブクエリを再実行する必要があります。従業員テーブルに 10,000 件のレコードがある場合、サブクエリを 10,000 回実行する必要があり、何度も実行するのは非常に非効率です。

MySQLデータベースのサブクエリの構文規則は何ですか?

クエリ文において、繰り返しクエリされるサブクエリを「相関サブクエリ」と呼びます。ここでの「WHERE」サブクエリは「相関サブクエリ」に属します。この種のサブクエリの使用は避けてください。

FROM サブクエリ

クエリ ステートメントでは、「FROM」サブクエリは 1 回だけ実行されます。これは、「WHERE」サブクエリの逆であるため、クエリ効率が非常に高い。

同様に、基本給が会社の平均基本給を超える従業員情報のクエリを例として、「FROM」サブクエリがどのように実装されるかを見てみましょう。

SELECT
    e.empno, e.ename, e.sal, t.avg
FROM t_emp e 
JOIN (SELECT deptno, AVG(sal) AS avg FROM t_emp GROUP BY deptno) t
ON e.deptno = t.deptno 
AND e.sal >= t.avg;

-- 首先,按照每一个部门编号去分组,然后统计部门标号与该部门对应的平均月薪。将这个结果集作为一张临时的表与员工的表做连接。
-- 连接的条件为 "员工表" 的 "部门编号" = "结果集" 的 "部门编号",并且员工的月薪大于部门的平均月薪

MySQLデータベースのサブクエリの構文規則は何ですか?

したがって、この質問は「FROM」サブクエリを使用して簡単に実装でき、「WHERE」サブクエリを使用する必要はありません。 「FROM」サブクエリは相関サブクエリではないため、一部の問題を解決する場合は、このサブクエリの種類を制限する必要があります。

SELECT サブクエリ

正直に言うと、これまで経験したプロジェクトの中で、この種のサブクエリは見たことがありません。

その理由は、「SELECT」サブクエリも相関サブクエリであり、SQL 文内で繰り返し実行されるため、クエリ効率が非常に低いためです。

ここで例を挙げます。 たとえば、各従業員の部門情報をクエリしたい場合、

SELECT
    e.empno,
    e.ename,
    (SELECT dname FROM t_dept WHERE deptno = e.deptno) AS 部门名称
FROM t_emp e;

-- 先试用 "SELECT" 子查询查询出 "部门表" 中的部门名称,约束条件为 "部门表"中的 "部门编号" 与 "员工表"中的 "部门编号" 一致
-- 将 "SELECT" 子查询得到的 "部门名称" 作为SQL语句中的一个字段进行输出

MySQLデータベースのサブクエリの構文規則は何ですか?

実行結果は正しいですが、 , ただし、実行効率が低すぎるため、この「SELECT」サブクエリ方法は推奨されません。理解してください。他の人が「SELECT」サブクエリを使用しているのを見ると、親切にするのが最善です。

以上がMySQLデータベースのサブクエリの構文規則は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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