What is the difference between a subquery and a CTE in SQL?
Sep 16, 2025 am 07:47 AMSubqueries are queries nested in another query. They are suitable for simple one-time calculations and can be located in SELECT, FROM or WHERE clauses; 2. CTE is defined through WITH clauses to improve the readability of complex queries and supports recursion and multiple references; 3. Subqueries are suitable for single use, and CTE is more suitable for scenarios where clear structure, reuse or recursion is required.
A subquery and a CTE (Common Table Expression) both allow you to write modular, reusable SQL logic within a larger query, but they differ in structure, readability, and use cases.
Subquery
A subquery is a query nested inside another query. It can appear in the SELECT , FROM , or WHERE clause. Subqueries are enclosed in parentses and executed first when possible, with results passed to the outer query.
Key characteristics:
- Can be used inline and are often best for simple, one-off computings.
- May be correlated (dependent on the outer query) or non-correlated.
- Harder to read and maintain when deeply nested.
- Limited reusability—must be repeated if needed multiple times.
SELECT name FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
CTE (Common Table Expression)
A CTE is a named temporary result set defined using the WITH clause. It's not stored but can be referenced multiple times in the main query.
Key characteristics:
- Improves readability by breaking complex queries into clear parts.
- Supports recursion (eg, traversing hierarchical data).
- Can be referenced multiple times without rewriting.
- Exists only during the execution of the query.
WITH avg_salary AS ( SELECT AVG(salary) AS avg_sal FROM employees ) SELECT name FROM employees, avg_salary WHERE salary > avg_sal;
Basically, use a subquery for simple, single-use logic and a CTE when you need clarity, reuse, or recursion. Both serve similar purposes but CTEs are generally better for complex or multi-step queries.
The above is the detailed content of What is the difference between a subquery and a CTE in SQL?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

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

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

ArtGPT
AI image generator for creative art from text prompts.

Stock Market GPT
AI powered investment research for smarter decisions

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Subqueries can be used in WHERE, FROM, SELECT, and HAVING clauses to implement filtering or calculation based on the result of another query. Operators such as IN, ANY, ALL are commonly used in WHERE; alias are required as derivative tables in FROM; single values ??must be returned in SELECT; related subqueries rely on outer query to execute each row. For example, check employees whose average salary is higher than the department, or add the company average salary list. Subqueries improve logical clarity, but performance may be lower than JOIN, so you need to ensure that you return the expected results.

UseCOMMENTONCOLUMNorALTERTABLEwithCOMMENTtodocumenttablesandcolumnsinSQL;syntaxvariesbyDBMS—PostgreSQLandOracleuseCOMMENTON,MySQLusesCOMMENTinCREATE/ALTERstatements,andcommentscanbeviewedviasystemtableslikeINFORMATION_SCHEMA,butSQLitelackssupport.

The SOUNDEX function converts text into a four-character code representing pronunciation, adds three digits to the first letter, ignores vowels and specific letters, and maps consonants with similar pronunciations to the same number, realizing pronunciation-based search. For example, Smith and Smythe both generate S530, and names with similar pronunciations can be found through WHERESOUNDEX(last_name)=SOUNDEX('Smith'). Combined with the DIFFERENCE function, it can return a similarity score of 0 to 4, filter the results of pronunciation close, which is suitable for dealing with spelling differences, but has limited effect on non-English names, and performance optimization needs to be paid attention to.

When using CREATETABLE, add UNIQUE keyword or use ALTERTABLEADDCONSTRAINT to add constraints to existing tables to ensure that the values ??in the column are unique, and support single columns or multiple columns. Before adding, you need to ensure that the data is not duplicated. You can delete it through DROPCONSTRAINT, pay attention to the syntax differences between different databases and NULL values.

Use the LAST_DAY() function (MySQL, Oracle) to directly obtain the last day of the month where the specified date is, such as LAST_DAY('2023-10-15') to return 2023-10-31; 2. SQLServer uses the EOMONTH() function to achieve the same function; 3. PostgreSQL calculates the end of the month through DATE_TRUNC and INTERVAL; 4. SQLite uses the date function to combine 'startofmonth', '1month' and '-1day' to obtain the results.

SQLServerusesNEWID()togenerateGUIDs;2.MySQLusesUUID()forversion1UUIDs;3.PostgreSQLusesgen_random_uuid()afterenablingpgcrypto;4.SQLitelacksbuilt-insupport,sogenerateUUIDsinapplicationcode.

To update the data in the SQL table, the UPDATE statement is required. The basic syntax is: UPDATE table name SET column 1 = value 1, column 2 = value 2...WHERE conditions; 1. When updating a single row, specify a unique identifier, such as the primary key; 2. When updating multiple columns, list multiple columns and values ??in the SET clause; 3. When updating multiple rows, multiple records matching the WHERE conditions will be updated at the same time; 4. If the WHERE clause is omitted, all rows will be updated, so be careful to operate; 5. It is recommended to use transaction wrapping UPDATE operations to roll back when an error occurs; In addition, you should always use SELECT to test the conditions, backup important data, and use LIMIT in supported databases to limit the number of rows to be updated.

ThemedianinSQLiscalculatedusingROW_NUMBER()andCOUNT()orPERCENTILE_CONT(0.5).First,assignrownumbersandgettotalcountviawindowfunctions.Thendeterminemiddlepositions:ifcountisodd,pickthecentralvalue;ifeven,averagethetwomiddlevalues.UseaCTEtocomputepositi
