Este artículo tiene como objetivo dominar de forma rápida y precisa la declaración SELECT en la base de datos MySQL.
La sintaxis básica de la instrucción SELECT en MySQL es:
El siguiente es un fragmento entre comillas:
SELECCIONE [STRAIGHT_JOIN] [SQL_SMALL_RESULT]
[SQL_BIG_RESULT] [ALTA_PRIORIDAD]
[DISTINCT|DISTINCTROW|TODOS]
lista_select
[INTO {OUTFILE|DUMPFILE} 'nombre_archivo' opciones_exportación]
[DE referencias_tabla [DONDE definición_dónde]
[GRUPO POR nombre_columna,...] [TENIENDO definición_dónde]
[ORDENAR POR {unsighed_integer|col_name|formura} [ASC|DESC],...]
[LIMIT [desplazamiento,] filas] [PROCEDIMIENTO nombre_procedimiento]]
Como se puede ver en esta sintaxis básica, la declaración SELECT más simple es SELECT select_list. De hecho, usando esta declaración SELECT más simple, también puede completar muchas funciones que espera. Primero, puede usarla para realizar cualquier operación compatible con MySQL. ejemplo: SELECT 1+1, devolverá 2; en segundo lugar, también puede usarlo para asignar valores a variables. En PHP, usando esta función de la instrucción SELECT, puede usar libremente las funciones de MySQL para realizar varias tareas. Programa PHP. operaciones y asignación de valores a variables. En muchos casos, encontrará que MySQL tiene funciones mucho más potentes que PHP.
STRAIGHT_JOIN, SQL_SMALL_RESULT, SQL_BIG_RESULT y HIGH_PRIORITY son extensiones de MySQL para ANSI SQL92. Si el optimizador une tablas en un orden no óptimo, usar STRAIGHT_JOIN puede acelerar la consulta.
SQL_SMALL_RESULT y SQL_BIG_RESULT son un conjunto de palabras clave relativas. Deben usarse con GROUP BY, DISTINCT o DISTINCTROW. SQL_SMALL_RESULT le dice al optimizador que el resultado será muy pequeño, lo que requerirá que MySQL use una tabla temporal para almacenar la tabla final en lugar de usar la clasificación; por el contrario, SQL_BIG_RESULT le dice al optimizador que el resultado será muy pequeño, lo que requerirá que MySQL use la clasificación en lugar de la clasificación; haciendo una mesa temporal.
HIGH_PRIORITY le dará a SELECT una prioridad más alta que una declaración que actualiza la tabla, lo que le permitirá realizar una consulta rápida y priorizada.
El uso de las cuatro palabras clave anteriores es bastante oscuro. Afortunadamente, en la mayoría de los casos, podemos optar por no utilizar estas cuatro palabras clave en MySQL.
DISTINCT y DISTINCTROW proporcionan el filtrado más básico pero útil para el conjunto de resultados devuelto por la consulta. Es decir, el conjunto de resultados contiene sólo filas distintas. Lo que se debe tener en cuenta aquí es que para las palabras clave DISTINCT y DISTINCTROW, los valores nulos son iguales, no importa cuántos valores NULL haya, solo se selecciona uno. El uso de ALL es superfluo. No tiene ningún efecto sobre la generación del conjunto de resultados.
INTO {OUTFILE|DUMPFILE} 'nombre_archivo' opciones_exportación, escribe el conjunto de resultados en un archivo. El archivo se crea en el servidor host y no puede existir ya. La sintaxis de la parte export_options de la declaración es la misma que la utilizada en las cláusulas FIELDS y LINES de la declaración LOAD DATAINFILE. La discutiremos en detalle en el artículo MySQL Advanced_LOAD DATA. La diferencia entre las palabras clave OUTFILE y DUMPFILE es que solo se escribe una línea en el archivo, sin final de columna o línea.
Lista de selección: puede contener uno o más de los siguientes contenidos:
1. "*" significa todas las columnas organizadas en el orden de creación de la tabla.
2. Una lista de nombres de columnas ordenados en el orden requerido por el usuario.
3. Puede utilizar un alias para reemplazar el nombre de la columna, de la siguiente forma: nombre de la columna como encabezado_columna.
4. Expresiones (nombres de columnas, constantes, funciones o cualquier combinación de nombres de columnas, constantes y funciones relacionadas con operadores aritméticos o bit a bit).
5. Funciones internas o funciones agregadas.
6. Cualquier combinación de los elementos anteriores.
DESDE: Determina qué tablas se utilizan en el comando SELECT. Este elemento generalmente es necesario a menos que select_list no contenga nombres de columnas (por ejemplo, solo constantes, expresiones aritméticas, etc.). Si hay varias tablas en la entrada de la tabla, sepárelas con comas. El orden de las tablas que siguen a la palabra clave FROM no afecta los resultados.
A los nombres de las tablas se les pueden asignar alias relacionados para aclarar las expresiones. La sintaxis aquí es tbl_name [AS] alias_name. Por ejemplo:
seleccione t1.nombre,t2.salario del empleado como t1,info como t2 donde t1.nombre=t2.nombre es lo mismo que seleccione t1.nombre,t2.salario del empleado t1,info t2 donde t1.nombre= t2.name Completamente equivalente.
Todas las demás referencias a la tabla, como las cláusulas in y have, deben utilizar alias y los alias no pueden comenzar con un número.
La cláusula donde establece las condiciones de búsqueda y su método de aplicación en las declaraciones de inserción, actualización y eliminación es exactamente el mismo que su método de aplicación en las declaraciones de selección. Los términos de búsqueda siguen a la palabra clave dónde. Si el usuario desea utilizar varias condiciones de búsqueda en una declaración, pueden conectarse mediante y o o. La sintaxis básica de las condiciones de búsqueda es [no] expresión del operador de comparación [no] expresión [no] como "match_string"; [no] la expresión es [no] nula; ] nombre_columna operador_unión nombre_columna [no] expresión_booleana.
y: Se utiliza para conectar dos condiciones y devolver el resultado cuando ambas condiciones son VERDADERAS. Cuando se utilizan varios operadores lógicos en la misma declaración, el operador y siempre tiene prioridad, a menos que el usuario utilice paréntesis para cambiar el orden de las operaciones.
o: Se utiliza para conectar dos condiciones y devolver el resultado cuando cualquiera de las condiciones es VERDADERA. Cuando se utilizan varios operadores lógicos en la misma declaración, el operador o generalmente opera después del operador y. Por supuesto, el usuario puede utilizar paréntesis para cambiar el orden de las operaciones.
entre: Palabra clave utilizada para identificar el límite inferior del rango, y seguida del valor del límite superior del rango. El rango donde @val entre xey incluye el primer y el último valor. Si el primer valor especificado después de Between es mayor que el segundo valor, la consulta no devuelve ninguna fila.
nombre_columna: el nombre de la columna utilizada en la comparación. Cuando surja ambigüedad, asegúrese de especificar el nombre de la tabla donde se encuentra la columna.
operador_comparación: operador de comparación. Consulte la siguiente tabla:
Los siguientes son fragmentos de citas:
significado del símbolo
= igual a
> mayor que
< menos que
>= mayor o igual a
<= menor o igual a
!= no es igual a
<> no es igual a
Al comparar datos de tipo char y varchar, "<" significa más cerca del principio del alfabeto y ">" significa más cerca del final del alfabeto. En términos generales, las letras minúsculas son mayores que las mayúsculas y las letras mayúsculas son mayores que los números, pero esto puede depender del orden de comparación del sistema operativo en el servidor.
Los espacios finales se ignoran al comparar. Por ejemplo, "Dirk" es igual a "Dirk".
Al comparar fechas, "<" significa antes y ">" significa después.
Cuando se utilizan operadores de comparación para comparar datos de caracteres y de fecha y hora, todos los datos deben estar entre comillas.
expresión: puede ser un nombre de columna, una constante, una función o cualquier combinación de nombres de columnas o constantes, y una función conectada con operadores aritméticos u operadores bit a bit. Los operadores aritméticos se muestran en la siguiente tabla:
Aquí está el fragmento citado:
significado del símbolo
+ signo más
- signo menos
* signo de multiplicación
/ El signo de división
es nulo: se utiliza cuando se busca un valor NULL.
like: palabra clave, puedes usar like para char, varchar y datetime (excluyendo segundos y milisegundos). En MySQL, like también se puede usar para expresiones numéricas.
Cuando los usuarios buscan datos de fecha y hora, es mejor utilizar la palabra clave como, porque un registro de fecha y hora completo contiene una variedad de componentes de fecha. Por ejemplo, el usuario agrega un valor "9:20" a la columna hora_llegada, pero no lo encuentra en la cláusula donde hora_llegada="9:20" porque MySQL convierte los datos ingresados en "1 de enero de 1900 9:20 a. m.". . Sin embargo, la cláusula donde Arrival_time como "%9:20%" puede encontrarla.
boolean_expression: una expresión que devuelve un valor "verdadero" o "falso".
match_string: una cadena que consta de caracteres y comodines, entre comillas simples o dobles, es un patrón coincidente. Los comodines se muestran en la siguiente tabla:
El siguiente es un fragmento citado:
significado del símbolo
% Una cadena de 0 o más caracteres
_ cualquier carácter individual
not: niega cualquier expresión lógica o palabra clave,
Como me gusta, nulo, entre, etc.
Las cláusulas group by y have se utilizan en la declaración de selección,
Es posible dividir una tabla en grupos y devolver los grupos que coincidan con la condición de la cláusula de tener.
Sintaxis: comienzo de la declaración seleccionada
agrupar por [todos] agregado_expresión_libre [,aggregate_free_expression]*
[teniendo condiciones de búsqueda]
al final de la instrucción de selección
: especifica el grupo en el que se dividirá la tabla. Si se incluye una función agregada en el elemento de la tabla de selección, se calcula un valor total para cada grupo. Los resultados de estos totales se muestran en nuevas columnas en lugar de nuevas filas. Los usuarios pueden hacer referencia a estas nuevas columnas totales en la cláusula de haber. Las funciones de agregación como avg, count, max, min y sum se pueden usar en select_list antes de agrupar por. Las tablas se pueden agrupar por cualquier combinación de columnas.
all: extensión Transact-SQL que incluye todos los grupos en los resultados, incluso aquellos excluidos por la cláusula donde. Si se utiliza la cláusula have al mismo tiempo, se negará el significado de all.
agregado_free_expression: una expresión que no contiene una función agregada. La extensión Transact-SQL permite agrupar por una expresión sin una función agregada mientras se agrupa por nombre de columna.
tener: Establecer condiciones para la cláusula group by, similar a donde donde establece condiciones para la declaración de selección. Las condiciones de búsqueda para tener pueden incluir expresiones de funciones agregadas. Aparte de eso, sus criterios de búsqueda son los mismos que los criterios de búsqueda.
ordenar por: Organiza los resultados por columna. Se puede hacer referencia a las columnas generadas por selección mediante nombres de columnas, alias de columnas o posiciones de columnas. Por ejemplo: seleccione id como myid, nombre como myname del grupo mytable por id, seleccione id como myid, nombre como myname del grupo mytable por myid, seleccione id como myid, nombre como myname del grupo mytable por 1. Estas tres oraciones son completamente equivalente de. Por supuesto, no estamos de acuerdo con el tercer uso, lo que tendrá un impacto negativo en la legibilidad del programa. Para ordenar en orden descendente, agregue la palabra clave DESC a la cláusula ordenar por antes del nombre de la columna que desea ordenar. El orden predeterminado es ascendente, pero puede especificarlo explícitamente utilizando la palabra clave ASC.
cláusula de límite: se utiliza para limitar el número de filas devueltas por la declaración de selección. limit toma 1 o 2 parámetros numéricos. Si se proporcionan 2 parámetros, el primero especifica el desplazamiento de la primera fila que se devolverá y el segundo especifica el número máximo de filas que se devolverán. El desplazamiento de la fila inicial es 0 (no 1). Si se proporciona un argumento, indica el número máximo de filas devueltas en el desplazamiento 0. En otras palabras, el límite 5 y el límite 0,5 son completamente equivalentes.
En cuanto al significado de la palabra clave de procedimiento, no lo tengo muy claro. Parece admitir procedimientos almacenados, y MySQL en sí no admite procedimientos almacenados. Parece estar reservado para futuras necesidades de expansión.