SELECT
Sintaxis
SELECT [ALL | DISTINCT | DISTINCTROW] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [ FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset [ROWS EXAMINED rows_limit] } | [OFFSET start { ROW | ROWS }] [FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES }] ] procedure|[PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' [CHARACTER SET charset_name] [export_options] | INTO DUMPFILE 'file_name' | INTO var_name [, var_name] ] [FOR UPDATE lock_option | LOCK IN SHARE MODE lock_option]
export_options: [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]
lock_option: [WAIT n | NOWAIT | SKIP LOCKED]
Contents
Description
SELECT
se utiliza para recuperar filas de una o más tablas. Puede incluir sentencias
UNION y subqueries.
- Cada select_expr expresión indica la columna o dato que se desea recuperar. Debe indicar al menos una expresión. Para más detalles, consulte Expresiones más abajo.
- La cláusula
FROM
indica la/s tabla/s desde las que recuperar filas. Utilice un nombre de tabla o una expresiónJOIN
para relacionar varias tablas. Ver los detalles de JOIN. Si no se utiliza ninguna tabla, se puede indicar FROM DUAL. Esto no es obligatorio, pero se puede utilizar por compatibilidad.
- Cada tabla también se puede indicar como
db_name
.tabl_name
. Así mismo, cada columna se puede indicar comotbl_name
.col_name
e incluso comodb_name
.tbl_name
.col_name
. Esto permite escribir consultas que involucren vaias bases de datos. Para consultar los detalles de la sintaxis, vea Cualificadores.
- Si se incluye la cláusula
WHERE
, esta muestra la condición que deben cumplir las filas para ser seleccionadas.where_condition
debe ser cierta(TRUE)
para que la fila sea devuelta. Si no se incluye una cláusua WHERE, la consulta devuelve todas las filas.
En la cláusula WHERE
puede utilizar cualquier función y operador soportado por MariaDB, excepto en las funciones de agregado. Ver Funciones y Operadores and Funciones y modificadores para utilizar con GROUP BY (agregado).
- Para ordenar los resultados, utilice la cláusula ORDER BY.
- Para restringir los resultados a un determinado número de filas, utilice la cláusula LIMIT. Si desea empezar en una determinada fila, puede indicar esta como un offset.
- Utilice las cláusulas GROUP BY y
HAVING
para agrupar las filas cuando tienen campos(GROUP BY)
o valores calculados(HAVING)
en común.
SELECT también se puede utilizar para devolver valores calculados sin necesidad de hacer referencia a una tabla.
Expresiones
Una sentencia SELECT
debe contener una o más expresiones separadas por comas. Cada expresión puede ser una de las siguientes:
- El nombre de una columna de la tabla.
- Cualquier expresión que utilice functions and operators.
*
para seleccionar todas las columnas de todas las tablase en la cláusulaFROM
.tbl_name.*
para seleccionar todas las columnas de la tabla tbl_name.
Cuando indique una columna, puede especificar únicamente el nombre de la columna, o cualificarla precediéndo el nombre de la columna con tbl_name.
. La forma cualificada (tbl_name.col_name
) es útil si se están relacionando varias tablas en la cláusula FROM
. Si no utiliza la forma cualificada, MariaDB trata de encontrar el nombre de la columna en cada tabla. Si se encuentra el mismo nombre de columna en varias tablas, se producirá un error.
Se puede utilizar comilla simple <``>
con los nombres de columna. Si se utiliza la forma cualificada, debera poner tanto el nombre de la tabla, como el de la columna con comillas simples: `tbl_name`.`col_name`
.
Si utiliza cualquier función de agregado en una expresión, todas las filas del resultado serán agrupadas de forma implícita como si hubiera utilizado una cláusula GROUP BY NULL
.
DISTINCT
Una consulta puede devolver varias filas idénticas. Por defecto, se devuleven todas las filas incluso aunque sus valores sean iguales. Para indicar explícitamente que desea obtener las filas duplicadas, incluya la opción ALL
. Si desea no mostrar las filas duplicadas, inluya la opción DISTINCT
.
DISTINCTROW
es un sinónimo de DISTINCT
. Consulte también COUNT DISTINCT y SELECT UNIQUE en modo Oracle.
INTO
The INTO
clause is used to specify that the query results should be written to a file or variable.
- SELECT INTO OUTFILE - formatting and writing the result to an external file.
- SELECT INTO DUMPFILE - binary-safe writing of the unformatted results to an external file.
- SELECT INTO Variable - selecting and setting variables.
The reverse of SELECT INTO OUTFILE
is LOAD DATA.
LIMIT
Restricts the number of returned rows. See LIMIT and LIMIT ROWS EXAMINED for details.
LOCK IN SHARE MODE/FOR UPDATE
See LOCK IN SHARE MODE and FOR UPDATE for details on the respective locking clauses.
OFFSET ... FETCH
MariaDB starting with 10.6
ORDER BY
Order a resultset. See ORDER BY for details.
PARTITION
Specifies to the optimizer which partitions are relevant for the query. Other partitions will not be read. See Partition Pruning and Selection for details.
PROCEDURE
Passes the whole result set to a C Procedure. See PROCEDURE and PROCEDURE ANALYSE (the only built-in procedure not requiring the server to be recompiled).
SKIP LOCKED
MariaDB starting with 10.6
The SKIP LOCKED clause was introduced in MariaDB 10.6.0.
This causes those rows that couldn't be locked (LOCK IN SHARE MODE or FOR UPDATE) to be excluded from the result set. An explicit NOWAIT
is implied here. This is only implemented on InnoDB tables and ignored otherwise.
SQL_CALC_FOUND_ROWS
When SQL_CALC_FOUND_ROWS
is used, then MariaDB will calculate how many rows would
have been in the result, if there would be no LIMIT clause. The result can be found by calling the function FOUND_ROWS() in your next sql statement.
max_statement_time clause
By using max_statement_time in conjunction with SET STATEMENT, it is possible to limit the execution time of individual queries. For example:
SET STATEMENT max_statement_time=100 FOR SELECT field1 FROM table_name ORDER BY field1;
WAIT/NOWAIT
Set the lock wait timeout. See WAIT and NOWAIT.
Ejemplo
SELECT f1,f2 FROM t1 WHERE (f3<=10) AND (f4='y');
Si desea ver más ejemplos, consulte Getting Data from MariaDB (Tutorial para principiantesl), o los subartículos siguientes.
Contenidos relacionados
- Getting Data from MariaDB (Beginner tutorial)
- Joins and Subqueries
- LIMIT
- ORDER BY
- GROUP BY
- Common Table Expressions
- SELECT WITH ROLLUP
- SELECT INTO OUTFILE
- SELECT INTO DUMPFILE
- FOR UPDATE
- LOCK IN SHARE MODE
- Optimizer Hints
- Oracle mode from MariaDB 10.3
13/12/2022 - Traducido por Carlos Ponce de León