[MySQL] Sentencia SELECT - orden de sintaxis

1. SELECT 
2. DISTINCT <select_list>
3. FROM <left_table>
4. <join_type> JOIN <right_table>
5. ON <join_condition>
6. WHERE <where_condition>
7. GROUP BY <group_by_list>
8. HAVING <having_condition>
9. ORDER BY <order_by_condition>
10. LIMIT <limit_number>

A medida que se ejecutan estos pasos, cada paso produce una tabla virtual que se utiliza como entrada para el siguiente paso. Estas tablas virtuales admiten que las operaciones internas surtan efecto y son invisibles para el mundo exterior (programas cliente y consultas externas). Solo se puede usar fuera del último paso para generar la tabla.

1. DESDE el escenario

  • producto cartesiano

Es la etapa en la que seleccionamos la tabla, en esta etapa la base de datos generará una tabla virtual VT1-J1 a través del producto cartesiano de múltiples datos en la tabla.

  • En el escenario

En esta etapa, el VT1-J1 generado en el paso anterior será cribado según los predicados que aparecen en nuestra oración ON, e insertado en nuestro VT1-J2.

  • UNIRSE a la etapa

Agregue filas que no encuentren una coincidencia en VT1-J2 a través de JOIN y agréguelas a VT1-J2 como filas externas para generar VT1-J3. Si la cláusula FROM contiene más de dos tablas, repita los tres pasos para la tabla de resultados VT1-J3 generada por la conexión anterior y la tabla siguiente hasta que se procesen todas las tablas.

Después de completar los pasos anteriores, se completa la etapa FROM.

2. DÓNDE etapa

La etapa WHERE consiste en filtrar las filas en VT1 según las condiciones en <where_condition>, de modo que las filas que cumplan las condiciones se insertarán en VT2. En este momento, los datos no se han agrupado, por lo que el filtrado de estadísticas no puede aparecer en DONDE.

3. GRUPO POR ETAPA

La etapa GROUP agrupa las filas en VT2 según la lista especificada de nombres de columnas para generar VT3. Al final cada grupo tiene solo una fila. En la fase GROUP BY, la base de datos considera que dos valores NULL son iguales, por lo que agrupará los valores NULL en el mismo grupo.

4. TENER etapa

Esta etapa filtra los grupos de VT3 según los predicados que aparecen en la cláusula HAVING e inserta los grupos calificados en VT4. COUNT(expr) devolverá el número de filas donde expr no es NULL, y count(1), count(*) devolverá todos los números, incluidos los valores NULL.

5. Etapa SELECCIONAR

Esta etapa es el proceso de proyección, que procesa los elementos mencionados en la cláusula SELECT y genera VT5. Este paso generalmente se lleva a cabo en el siguiente orden:

  • Evalúa las expresiones en la lista SELECT, produciendo VT5-1.
  • Si hay DISTINCT, elimine las filas duplicadas en VT5-1 y genere VT5-2.

6. ORDEN POR ETAPA

Según la lista enumerada especificada en la cláusula ORDER BY, ordene las filas en VT5-2 para generar VT6. Si no se especifica ningún tipo, los datos no siempre se ordenan en orden de clave principal. NULL se considera el valor mínimo.

7. Etapa LÍMITE

Extraiga los registros de la fila especificada, genere la tabla virtual VT7 y devuélvala al usuario de la consulta. La eficiencia de LIMIT n, m es muy baja. Generalmente,  WHERE  id > ?limit 10 se puede optimizar especificando el rango en la condición WHERE.

Supongo que te gusta

Origin blog.csdn.net/weixin_43918614/article/details/123260567
Recomendado
Clasificación