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 子句的条件,就可以被使用了
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.
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; -- 首先,按照每一个部门编号去分组,然后统计部门标号与该部门对应的平均月薪。将这个结果集作为一张临时的表与员工的表做连接。 -- 连接的条件为 "员工表" 的 "部门编号" = "结果集" 的 "部门编号",并且员工的月薪大于部门的平均月薪
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语句中的一个字段进行输出
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!

MySQL's position in databases and programming is very important. It is an open source relational database management system that is widely used in various application scenarios. 1) MySQL provides efficient data storage, organization and retrieval functions, supporting Web, mobile and enterprise-level systems. 2) It uses a client-server architecture, supports multiple storage engines and index optimization. 3) Basic usages include creating tables and inserting data, and advanced usages involve multi-table JOINs and complex queries. 4) Frequently asked questions such as SQL syntax errors and performance issues can be debugged through the EXPLAIN command and slow query log. 5) Performance optimization methods include rational use of indexes, optimized query and use of caches. Best practices include using transactions and PreparedStatemen

MySQL is suitable for small and large enterprises. 1) Small businesses can use MySQL for basic data management, such as storing customer information. 2) Large enterprises can use MySQL to process massive data and complex business logic to optimize query performance and transaction processing.

InnoDB effectively prevents phantom reading through Next-KeyLocking mechanism. 1) Next-KeyLocking combines row lock and gap lock to lock records and their gaps to prevent new records from being inserted. 2) In practical applications, by optimizing query and adjusting isolation levels, lock competition can be reduced and concurrency performance can be improved.

MySQL is not a programming language, but its query language SQL has the characteristics of a programming language: 1. SQL supports conditional judgment, loops and variable operations; 2. Through stored procedures, triggers and functions, users can perform complex logical operations in the database.

MySQL is an open source relational database management system, mainly used to store and retrieve data quickly and reliably. Its working principle includes client requests, query resolution, execution of queries and return results. Examples of usage include creating tables, inserting and querying data, and advanced features such as JOIN operations. Common errors involve SQL syntax, data types, and permissions, and optimization suggestions include the use of indexes, optimized queries, and partitioning of tables.

MySQL is an open source relational database management system suitable for data storage, management, query and security. 1. It supports a variety of operating systems and is widely used in Web applications and other fields. 2. Through the client-server architecture and different storage engines, MySQL processes data efficiently. 3. Basic usage includes creating databases and tables, inserting, querying and updating data. 4. Advanced usage involves complex queries and stored procedures. 5. Common errors can be debugged through the EXPLAIN statement. 6. Performance optimization includes the rational use of indexes and optimized query statements.

MySQL is chosen for its performance, reliability, ease of use, and community support. 1.MySQL provides efficient data storage and retrieval functions, supporting multiple data types and advanced query operations. 2. Adopt client-server architecture and multiple storage engines to support transaction and query optimization. 3. Easy to use, supports a variety of operating systems and programming languages. 4. Have strong community support and provide rich resources and solutions.

InnoDB's lock mechanisms include shared locks, exclusive locks, intention locks, record locks, gap locks and next key locks. 1. Shared lock allows transactions to read data without preventing other transactions from reading. 2. Exclusive lock prevents other transactions from reading and modifying data. 3. Intention lock optimizes lock efficiency. 4. Record lock lock index record. 5. Gap lock locks index recording gap. 6. The next key lock is a combination of record lock and gap lock to ensure data consistency.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

SublimeText3 Chinese version
Chinese version, very easy to use

WebStorm Mac version
Useful JavaScript development tools

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft