# Data Manipulation (DML)

- [Changing & Deleting Data](/docs/server/reference/sql-statements/data-manipulation/changing-deleting-data.md): Learn to change and delete data in MariaDB Server. This section covers UPDATE and DELETE SQL statements, enabling you to modify existing records and remove unwanted information efficiently.
- [DELETE](/docs/server/reference/sql-statements/data-manipulation/changing-deleting-data/delete.md): Complete guide to deleting data in MariaDB. Complete DELETE syntax with WHERE filtering, JOIN operations, CTEs, and safety considerations for production use.
- [HIGH\_PRIORITY and LOW\_PRIORITY](/docs/server/reference/sql-statements/data-manipulation/changing-deleting-data/high_priority-and-low_priority.md): Control locking priority for table access. These modifiers determine whether read or write operations take precedence when multiple threads access a table.
- [REPLACE](/docs/server/reference/sql-statements/data-manipulation/changing-deleting-data/replace.md): Insert or replace rows based on unique keys. This statement acts like INSERT, but if a duplicate key exists, it deletes the old row and inserts the new one.
- [REPLACE...RETURNING](/docs/server/reference/sql-statements/data-manipulation/changing-deleting-data/replacereturning.md): Replace rows and retrieve the results immediately. This extension returns the values of the replaced or inserted rows in the same operation.
- [UPDATE](/docs/server/reference/sql-statements/data-manipulation/changing-deleting-data/update.md): Complete UPDATE statement guide for MariaDB. Complete syntax reference with WHERE conditions, JOIN operations, CTEs, and multi-table updates for production use.
- [Inserting & Loading Data](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data.md): Learn to insert and load data into MariaDB Server. This section covers INSERT and LOAD DATA SQL statements, enabling you to efficiently add new records to your databases.
- [Concurrent Inserts](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/concurrent-inserts.md): Understand concurrent inserts in MyISAM. This feature allows SELECT statements to run simultaneously with INSERT operations, reducing lock contention and improving performance.
- [IGNORE](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/ignore.md): Learn about the IGNORE keyword. This modifier suppresses certain errors during statement execution, downgrading them to warnings to allow the operation to proceed.
- [INSERT](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert.md): Complete guide to inserting data in MariaDB. Complete INSERT syntax for single rows, bulk operations, and ON DUPLICATE KEY handling for production use.
- [INSERT - Default & Duplicate Values](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert-default-duplicate-values.md): Handle default and duplicate values during insertion. Learn how MariaDB manages missing columns and how to resolve duplicate key conflicts using various strategies.
- [INSERT DELAYED](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert-delayed.md): Queue inserts for later execution. This MyISAM-specific extension returns control immediately to the client while the server inserts rows when the table is free.
- [INSERT IGNORE](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert-ignore.md): Complete INSERT IGNORE reference: ignore insert errors and warnings, duplicate key error handling, invalid value coercion, and SHOW WARNINGS compatibility.
- [INSERT ON DUPLICATE KEY UPDATE](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert-on-duplicate-key-update.md): Complete guide to inserting data in MariaDB. Complete INSERT syntax for single rows, bulk operations, and ON DUPLICATE KEY handling for production use.
- [INSERT SELECT](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert-select.md): Copy data between tables. This statement inserts the result set of a SELECT query directly into a target table, enabling efficient bulk data transfer.
- [INSERT...RETURNING](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insertreturning.md): Insert rows and immediately retrieve the results. This extension returns the inserted values, including auto-increments and defaults, in the same round trip.
- [LOAD Data into Tables or Index](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/load-data-into-tables-or-index.md): Bulk load data efficiently. This section covers commands like LOAD DATA INFILE and LOAD XML for high-speed data import from text or XML files.
- [LOAD DATA INFILE](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/load-data-into-tables-or-index/load-data-infile.md): Complete reference for LOAD DATA INFILE in MariaDB. Complete syntax guide with all options, clauses, and practical examples with comprehensive examples and.
- [LOAD INDEX](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/load-data-into-tables-or-index/load-index.md): Preload table indexes into the key cache. This command, used for MyISAM tables, loads index blocks into memory to warm up the cache and improve subsequent query performance.
- [LOAD XML](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/load-data-into-tables-or-index/load-xml.md): Read data from an XML file into a table. This command parses XML content, mapping elements and attributes to table columns for direct data import.
- [Selecting Data](/docs/server/reference/sql-statements/data-manipulation/selecting-data.md): Learn to select data in MariaDB Server using SQL. This section covers various SELECT statement clauses, including WHERE, GROUP BY, and ORDER BY, to retrieve and filter your data effectively.
- [DUAL](/docs/server/reference/sql-statements/data-manipulation/selecting-data/dual.md): Understand the DUAL table. This dummy table allows selecting values without referencing a real table, often used for calculations or retrieving system variables.
- [FOR UPDATE](/docs/server/reference/sql-statements/data-manipulation/selecting-data/for-update.md): Lock rows for write operations. This clause prevents other transactions from modifying or reading the selected rows until the current transaction ends.
- [GROUP BY](/docs/server/reference/sql-statements/data-manipulation/selecting-data/group-by.md): Group result sets by one or more columns. Learn to aggregate data using functions like SUM, COUNT, and AVG in conjunction with grouping.
- [LIMIT](/docs/server/reference/sql-statements/data-manipulation/selecting-data/limit.md): Complete LIMIT clause reference: LIMIT n, LIMIT offset,row\_count, LIMIT row\_count OFFSET offset syntax, ORDER BY result handling, and UPDATE replication safety.
- [LOCK IN SHARE MODE](/docs/server/reference/sql-statements/data-manipulation/selecting-data/lock-in-share-mode.md): Read rows with a shared lock. This clause ensures rows remain unchanged by other transactions while allowing other sessions to read them.
- [ORDER BY](/docs/server/reference/sql-statements/data-manipulation/selecting-data/order-by.md): Complete ORDER BY clause: sort SELECT/UPDATE/DELETE results with ASC/DESC, multiple expressions, integer column positions, GROUP BY/LIMIT usage.
- [PROCEDURE](/docs/server/reference/sql-statements/data-manipulation/selecting-data/procedure.md): Pass query results to a C procedure. This clause allows processing the result set on the server side before returning it to the client.
- [SELECT](/docs/server/reference/sql-statements/data-manipulation/selecting-data/select.md): Complete guide to SELECT queries in MariaDB. Complete syntax reference for joins, subqueries, WHERE clauses, GROUP BY, and aggregate functions.
- [SELECT INTO DUMPFILE](/docs/server/reference/sql-statements/data-manipulation/selecting-data/select-into-dumpfile.md): Export a single row to a file without formatting. This statement writes raw binary data, such as BLOBs, directly to a file on the server.
- [SELECT INTO OUTFILE](/docs/server/reference/sql-statements/data-manipulation/selecting-data/select-into-outfile.md): Complete guide to SELECT queries in MariaDB. Complete syntax reference for joins, subqueries, WHERE clauses, GROUP BY, and aggregate functions.
- [SELECT ... OFFSET ... FETCH](/docs/server/reference/sql-statements/data-manipulation/selecting-data/select-offset-fetch.md): Pagination using standard SQL syntax. This clause limits the number of rows returned and skips a specified number of rows, similar to LIMIT.
- [SELECT WITH ROLLUP](/docs/server/reference/sql-statements/data-manipulation/selecting-data/select-with-rollup.md): Generate super-aggregate summaries. This modifier adds extra rows to the result set representing subtotals and grand totals for grouped columns.
- [Common Table Expressions (CTE)](/docs/server/reference/sql-statements/data-manipulation/selecting-data/common-table-expressions.md): Learn about Common Table Expressions (CTEs) in MariaDB Server. This section explains how to use CTEs for complex, readable, and reusable subqueries, simplifying data selection and manipulation.
- [Recursive Common Table Expressions Overview](/docs/server/reference/sql-statements/data-manipulation/selecting-data/common-table-expressions/recursive-common-table-expressions-overview.md): Process hierarchical data using recursive CTEs. These expressions reference themselves to repeatedly execute a subquery, perfect for traversing tree structures or generating sequences.
- [Non-Recursive Common Table Expressions Overview](/docs/server/reference/sql-statements/data-manipulation/selecting-data/common-table-expressions/non-recursive-common-table-expressions-overview.md): Define simple temporary result sets. Non-recursive CTEs act like query-local views, improving readability by allowing you to define and reuse subqueries within a single statement.
- [WITH](/docs/server/reference/sql-statements/data-manipulation/selecting-data/common-table-expressions/with.md): Complete WITH clause reference: WITH \[RECURSIVE] AS (SELECT...) syntax, recursive CTE support, CYCLE...RESTRICT cycle detection, and max\_recursive\_iterations.
- [Joins](/docs/server/reference/sql-statements/data-manipulation/selecting-data/joins.md): Retrieve data from multiple tables based on related columns. This section covers INNER, LEFT, RIGHT, and CROSS JOIN syntax and usage.
- [JOIN Syntax](/docs/server/reference/sql-statements/data-manipulation/selecting-data/joins/join-syntax.md): Complete reference for JOIN Syntax in MariaDB. Complete syntax guide with all options, clauses, and practical examples with comprehensive examples and best.
- [Comma vs JOIN](/docs/server/reference/sql-statements/data-manipulation/selecting-data/joins/comma-vs-join.md): Compare implicit and explicit join syntax. This article explains why using the explicit JOIN syntax with an ON clause is preferred over comma-separated tables for readability and precedence.
- [Set Operations](/docs/server/reference/sql-statements/data-manipulation/selecting-data/set-operations.md): SQL set operations combine the results of multiple query blocks in a single result, using the standard SQL operators EXCEPT, INTERSECT, and UNION, and the Oracle operator MINUS.
- [Precedence Control in Table Operations](/docs/server/reference/sql-statements/data-manipulation/selecting-data/set-operations/precedence-control-in-table-operations.md): Control the execution order of UNION, EXCEPT, and INTERSECT operations. Learn how to use parentheses to define explicit operation priority.
- [EXCEPT](/docs/server/reference/sql-statements/data-manipulation/selecting-data/set-operations/except.md): Return rows from the first result set that do not appear in the second. This set operator performs a subtraction of two datasets.
- [INTERSECT](/docs/server/reference/sql-statements/data-manipulation/selecting-data/set-operations/intersect.md)
- [MINUS](/docs/server/reference/sql-statements/data-manipulation/selecting-data/set-operations/minus.md): Oracle-compatible synonym for the EXCEPT operator. It returns rows from the first query that are not present in the second query.
- [UNION](/docs/server/reference/sql-statements/data-manipulation/selecting-data/set-operations/union.md): Combine results from multiple SELECT statements into a single result set. This operator can optionally remove duplicates or include all rows.
- [Subqueries](/docs/server/reference/sql-statements/data-manipulation/selecting-data/subqueries.md): Nest queries within other SQL statements. Learn to use scalar, column, row, and table subqueries to filter or calculate data dynamically.
- [Subqueries With ALL](/docs/server/reference/sql-statements/data-manipulation/selecting-data/subqueries/subqueries-and-all.md): Compare a value against all results from a subquery. The ALL operator returns TRUE if the comparison holds for every row returned by the subquery.
- [Subqueries With ANY and SOME](/docs/server/reference/sql-statements/data-manipulation/selecting-data/subqueries/subqueries-and-any.md): Compare a value against any result from a subquery. The ANY (or SOME) operator returns TRUE if the comparison holds for at least one row.
- [Subqueries with IN and NOT IN](/docs/server/reference/sql-statements/data-manipulation/selecting-data/subqueries/subqueries-with-in-and-not-in.md)
- [Subqueries With EXISTS](/docs/server/reference/sql-statements/data-manipulation/selecting-data/subqueries/subqueries-and-exists.md): Test for the existence of rows. The EXISTS operator returns TRUE if the subquery returns at least one row, often used for correlated subqueries.
- [Subqueries With JOINs](/docs/server/reference/sql-statements/data-manipulation/selecting-data/subqueries/subqueries-and-joins.md): Understand when to use subqueries versus joins. This guide explains performance implications and how to rewrite subqueries as joins for efficiency.
- [Subqueries in a FROM Clause (Derived Tables)](/docs/server/reference/sql-statements/data-manipulation/selecting-data/subqueries/subqueries-in-a-from-clause-derived-tables.md): Use a subquery as a temporary table. Derived tables allow you to select from the result set of another query within the FROM clause.
- [Row Subqueries](/docs/server/reference/sql-statements/data-manipulation/selecting-data/subqueries/subqueries-row-subqueries.md): Retrieve a single row of multiple values. A row subquery returns a tuple that can be compared against a row constructor in the outer query.
- [Scalar Subqueries](/docs/server/reference/sql-statements/data-manipulation/selecting-data/subqueries/subqueries-scalar-subqueries.md): Return a single value. A scalar subquery produces a one-row, one-column result that can be used anywhere a constant or expression is valid.
- [Subquery Limitations](/docs/server/reference/sql-statements/data-manipulation/selecting-data/subqueries/subquery-limitations.md): Review restrictions on subquery usage. This page details unsupported operations, such as modifying a table while selecting from it in a subquery.
