Home >Database >Mysql Tutorial >What are the syntax rules for subquery in MySQL database?

What are the syntax rules for subquery in MySQL database?

WBOY
WBOYforward
2023-05-27 11:37:241012browse

What are the syntax rules for subquery in MySQL database?

Since we face many unknown data with dependencies when extracting data, we need to nest a subquery in the query statement. We need to first retrieve a set of data and use its results as an object for the next query. In the "Table Connection Chapter", we once talked about the low efficiency of subqueries. In fact, not all subqueries are inefficient. The "WHERE" subquery needs to be executed repeatedly when matching records. This is not true. It is recommended; but if you use the query result set as a table and make a connection with other tables, this is a subquery of the "FROM" clause. This subquery method is still recommended.

Introduction to subquery

A subquery is a query nested within a query statement

Ordinary query statements are divided into "SELECT" subquery and "FROM" Subquery, "WHERE" subquery; (it is strongly recommended to use "'FROM' subquery")

Examples of subqueries are as follows:

Query the information of employees whose base salary exceeds the company's average base salary. In this case, we have previously implemented it through table joins. Now let's take a look at how to implement it using subqueries. )

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

What are the syntax rules for subquery in MySQL database?

WHERE subquery

When writing SQL statements, WHERE subquery is most in line with our thinking logic

Although this kind of subquery is the simplest and easiest to understand, it is a very inefficient subquery

Let's take the query just demonstrated for employee information whose base salary exceeds the company's average base salary. When the "WHERE" clause compares each employee record with the "SELECT" subquery, the subquery needs to be re-executed. If the employee table has 10,000 records, then the subquery needs to be executed 10,000 times. Repeated execution so many times is extremely inefficient.

What are the syntax rules for subquery in MySQL database?

In the query statement, the subquery that is queried repeatedly is called a "correlated subquery". The "WHERE" subquery here belongs to the "correlated subquery". It should Avoid using this kind of subquery.

FROM subquery

In the query statement, the "FROM" subquery will only be executed once, which is the opposite of the "WHERE" subquery, so the query efficiency Very high.

Similarly take the query of employee information whose base salary exceeds the company's average base salary as an example to see how the "FROM" subquery is implemented.

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;

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

What are the syntax rules for subquery in MySQL database?

So this question can be easily implemented using the "FROM" subquery, and it is not necessary to use the "WHERE" subquery. Because the "FROM" subquery is not a correlated subquery, this subquery type should be limited when solving some problems.

SELECT subquery

To be honest, I have never seen this kind of subquery in all the projects I have experienced so far.

The reason is that the "SELECT" subquery is also a correlated subquery. It will be executed repeatedly in the SQL statement, and the query efficiency is very low.

Here we will give an example: For example, if we want to query the department information of each employee,

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

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

What are the syntax rules for subquery in MySQL database?

Although the execution result is correct, However, the execution efficiency is too low, so this "SELECT" subquery method is not recommended. Just understand it. When we see other people using the "SELECT" subquery, it is best to be kind. remind.

The above is the detailed content of What are the syntax rules for subquery in MySQL database?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete