search
HomeDatabaseMysql TutorialWhat are the syntax rules for subquery in MySQL database?

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:亿速云. If there is any infringement, please contact admin@php.cn delete
How to Grant Permissions to New MySQL UsersHow to Grant Permissions to New MySQL UsersMay 09, 2025 am 12:16 AM

TograntpermissionstonewMySQLusers,followthesesteps:1)AccessMySQLasauserwithsufficientprivileges,2)CreateanewuserwiththeCREATEUSERcommand,3)UsetheGRANTcommandtospecifypermissionslikeSELECT,INSERT,UPDATE,orALLPRIVILEGESonspecificdatabasesortables,and4)

How to Add Users in MySQL: A Step-by-Step GuideHow to Add Users in MySQL: A Step-by-Step GuideMay 09, 2025 am 12:14 AM

ToaddusersinMySQLeffectivelyandsecurely,followthesesteps:1)UsetheCREATEUSERstatementtoaddanewuser,specifyingthehostandastrongpassword.2)GrantnecessaryprivilegesusingtheGRANTstatement,adheringtotheprincipleofleastprivilege.3)Implementsecuritymeasuresl

MySQL: Adding a new user with complex permissionsMySQL: Adding a new user with complex permissionsMay 09, 2025 am 12:09 AM

ToaddanewuserwithcomplexpermissionsinMySQL,followthesesteps:1)CreatetheuserwithCREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';.2)Grantreadaccesstoalltablesin'mydatabase'withGRANTSELECTONmydatabase.TO'newuser'@'localhost';.3)Grantwriteaccessto'

MySQL: String Data Types and CollationsMySQL: String Data Types and CollationsMay 09, 2025 am 12:08 AM

The string data types in MySQL include CHAR, VARCHAR, BINARY, VARBINARY, BLOB, and TEXT. The collations determine the comparison and sorting of strings. 1.CHAR is suitable for fixed-length strings, VARCHAR is suitable for variable-length strings. 2.BINARY and VARBINARY are used for binary data, and BLOB and TEXT are used for large object data. 3. Sorting rules such as utf8mb4_unicode_ci ignores upper and lower case and is suitable for user names; utf8mb4_bin is case sensitive and is suitable for fields that require precise comparison.

MySQL: What length should I use for VARCHARs?MySQL: What length should I use for VARCHARs?May 09, 2025 am 12:06 AM

The best MySQLVARCHAR column length selection should be based on data analysis, consider future growth, evaluate performance impacts, and character set requirements. 1) Analyze the data to determine typical lengths; 2) Reserve future expansion space; 3) Pay attention to the impact of large lengths on performance; 4) Consider the impact of character sets on storage. Through these steps, the efficiency and scalability of the database can be optimized.

MySQL BLOB : are there any limits?MySQL BLOB : are there any limits?May 08, 2025 am 12:22 AM

MySQLBLOBshavelimits:TINYBLOB(255bytes),BLOB(65,535bytes),MEDIUMBLOB(16,777,215bytes),andLONGBLOB(4,294,967,295bytes).TouseBLOBseffectively:1)ConsiderperformanceimpactsandstorelargeBLOBsexternally;2)Managebackupsandreplicationcarefully;3)Usepathsinst

MySQL : What are the best tools to automate users creation?MySQL : What are the best tools to automate users creation?May 08, 2025 am 12:22 AM

The best tools and technologies for automating the creation of users in MySQL include: 1. MySQLWorkbench, suitable for small to medium-sized environments, easy to use but high resource consumption; 2. Ansible, suitable for multi-server environments, simple but steep learning curve; 3. Custom Python scripts, flexible but need to ensure script security; 4. Puppet and Chef, suitable for large-scale environments, complex but scalable. Scale, learning curve and integration needs should be considered when choosing.

MySQL: Can I search inside a blob?MySQL: Can I search inside a blob?May 08, 2025 am 12:20 AM

Yes,youcansearchinsideaBLOBinMySQLusingspecifictechniques.1)ConverttheBLOBtoaUTF-8stringwithCONVERTfunctionandsearchusingLIKE.2)ForcompressedBLOBs,useUNCOMPRESSbeforeconversion.3)Considerperformanceimpactsanddataencoding.4)Forcomplexdata,externalproc

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.