query - select structure mysql
Terminología inglesa consultas mysql (5)
1) 2) Usaría alias que muestran a qué se refieren. Por ejemplo, select ... from my_first_table mft inner join user_rights ur where ...
Pero si no tienes mejores opciones, "t1, t2, ..." están bien.
3) si
1) seleccionar la cláusula, o campos
2) donde la cláusula
3) "condición de unión" es correcta
Necesito ayuda con alguna "terminología" sobre las partes de consulta. Pero no solo las PIEZAS de consulta, cualquier "figura del habla relacionada con la consulta" también será muy útil, estoy muy interesado en ellas. Y no solo sobre SELECT
s (como en el ejemplo a continuación), INSERT
s, UPDATE
s y otras consultas.
Por ejemplo:
SELECT t1.f1, t1.f2, t2.f1 AS f1a, (t2.f2 * 10) AS f2a
FROM talbe1 AS t1
INNER JOIN table2 AS t2 ON (t1.f4 <> t2.f4)
WHERE t1.f3 > t2.f3
LIMIT 100, 9999
Yo sé eso:
1) t1, t2
- "alias de tablas", ¿no hay error aquí?
2) f1a
- "alias de campo", f2a
- idk ... "alias de expresión" ¿quizás? ¿Hay alguna diferencia entre ellos? ¿Algún nombre colectivo?
3) 100
- "offset"
No estoy seguro de cómo llamar:
1) todo entre SELECT
y FROM
: t1.f1, t1.f2, t2.f1 AS f1a, (t2.f2 * 10) AS f2a
2) t1.f3 > t2.f3
"cláusula where"? "condición"? ¿cual es mejor? otras variantes?
3) (t1.f4 <> t2.f4)
"condición de unión"?
También me interesa si hay más de 1 unión, ¿puedo llamarlos de alguna manera por "orden" o "profundidad"? Y si puedo hacerlo por "profundidad", ¿cómo será con la RIGHT JOIN
?
Cualquier otro "nombramiento de cosas" interesante con sus ejemplos será muy útil. Al igual que SELF-JOIN, puede haber alguna otra combinación que tenga una llamada especial, cualquier cosa interesante que pueda recordar.
Es posible que le interese lo que la sintaxis oficial de MySQL tiene que decir al respecto. En mi opinión, nunca se puede ser demasiado formal al tratar de describir algo tan matemático como la terminología del lenguaje de programación.
1.
t1.f1
se llama select_expr , pronunciado fudge en inglés como "select expression". Tenga en cuenta que:
Cada
select_expr
indica una columna que desea recuperar.
Así que otra forma menos formal de llamarlo en inglés probablemente sería "columna".
2.
La sintaxis parece distinguir entre la cláusula y la condición , donde la cláusula incluye la palabra clave WHERE
sí misma, pero la condición es solo la expresión de SQL simple en el interior.
La cláusula
WHERE
, si se proporciona, indica la condición o condiciones que deben cumplir las filas para ser seleccionadas.where_condition
es una expresión que se evalúa como verdadera para cada fila que se seleccionará.
y también
En la expresión
WHERE
, puede usar cualquiera de las funciones y operadores que admite MySQL, excepto las funciones agregadas (resumen). Consulte la Sección 9.5, “Sintaxis de expresión”
3.
Desde una página de documentación de sintaxis diferente .
MySQL admite las siguientes sintaxis de
JOIN
para la parte de lastable_references
detable_references
de las instruccionesSELECT
Por lo tanto, toda la parte de qué tablas SELECT
se llama "referencias de tabla". Desde aquí podemos profundizar un poco en la sintaxis de la producción que coincide con su ejemplo anterior:
join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]
Esto significa que la parte a la que te refieres está contenida dentro de la "condición de unión". Sin embargo, al igual que con la cláusula WHERE
anterior, la condición de unión también contiene la palabra clave ON
. La expresión real (t1.f4 <> t2.f4)
es, de nuevo, un conditional_expr
o "expresión condicional", como la de la cláusula WHERE
anterior.
Algunos detalles más de esta página de documentos proporcionan una valiosa información:
El
conditional_expr
usado con ON es cualquier expresión condicional de la forma que se puede usar en una cláusula WHERE. En general, debe usar la cláusula ON para las condiciones que especifican cómo unir tablas, y la cláusula WHERE para restringir qué filas desea en el conjunto de resultados.
Por lo tanto, podría distinguirlos de manera informal de una manera útil y significativa al llamar a su condición WHERE
una "expresión de restricción de filas" y la condición JOIN
una "expresión de condición de unión".
P: 1) todo entre SELECT
y FROM
: t1.f1, t1.f2, t2.f1 AS f1a, (t2.f2 * 10) AS f2a
R: Me refiero a eso como la " lista de selección ". Esa es la lista de expresiones que están siendo devueltas. Cada expresión en la lista es una columna en el conjunto de resultados. (Una expresión puede ser tan simple como el nombre de una columna, o puede ser más complicada, el retorno de una función u operación de comparación.
Q: 2) t1.f3> t2.f3 "cláusula where"? "condición"? ¿cual es mejor? otras variantes?
R: El término general para estas condiciones que deben cumplirse para que se devuelva una fila es un " predicado ". Los predicados son las condiciones en la cláusula WHERE
o en las cláusulas ON
que deben cumplirse para que se devuelva una fila.
P: 3) (t1.f4 <> t2.f4) "condición de unión"?
A: De nuevo, este es un predicado . Esto simplemente aparece en la cláusula ON en lugar de la cláusula WHERE
. El término "condición de unión" también es apropiado. Pero en términos de cómo esa base de datos analiza y ejecuta la declaración, es solo otro predicado.
La práctica normativa consiste en incluir una "condición de unión" en la cláusula ON
y otras condiciones en la cláusula WHERE.
Parece que entendiste la mayoría de los términos bastante bien, diría, y creo que serías comprendido con la mayoría de tus palabras. Mirar hacia la documentación formal también parece una buena idea.
Aquí está mi opinión sobre sus preguntas, primero respondamos a las que parece saber:
- "Alias de tabla" es bueno
- "alias de campo" o "alias de expresión" son buenos. Una respuesta común podría ser "alias de columna", ya que estas declaraciones definen las columnas de su resultado
- "offset" (o posiblemente "offset de fila") es bueno
Los que no están tan seguros de:
- Entre
SELECT
yFROM
utilizaré "seleccionar expresión" o "expresión de columna" o "definiciones de columna" - Tiendo a usar "donde expresiones"
- "condición de unión" o "expresión de unión" son igual de claras para mí
Al referirme a las diferentes combinaciones, las diferenciaré por la única "unión interna" o "combinación izquierda", o si tiene varias combinaciones, entonces utilizará algo como "unir en la tabla 1". "Auto-unirse", por supuesto, se referiría a una combinación que se refiera a sí misma utilizando un alias diferente, pero también podría resultar confusa si tiene muchas otras uniones.
En general, la mayoría de la gente estaría entendiendo, e ignoraría los errores menores en la redacción, siempre y cuando se comprendan sus intenciones y la solución.
SQL es muy formal y está muy bien estructurado. Cualquier consulta (independientemente de SELECT
o INSERT
etc.) consta de eras . Para las preguntas SELECT
, sugiero comenzar a leerlo desde la cláusula FROM
. En otros, comenzar desde las cláusulas DELETE
/ INSERT
/ UPDATE
(primera línea). Estas cláusulas muestran qué conjuntos de datos se están manipulando . En estas cláusulas, puede ver una tabla o una lista o tablas o JOIN
-expresiones (en FROM
) o subconsultas entre paréntesis. Lista de tablas también significa unirse, pero se explicará más adelante. P.ej
... FROM tab1 t1
... FROM tab1 t1, tab2 t2
... FROM tab1 JOIN tab2 ON ( ... )
... FROM (select * from tab3 ...) t
DELETE tab4 ... /* doesn''t delete the table, but its records*/
INSERT INTO tab5 ...
UPDATE tab6 t6 ...
UPDATE (select * from tab3 ... ) ...
Estas son cláusulas centrales que muestran qué tablas deben procesarse.
Dentro de la cláusula, se puede hacer referencia a cada tabla o subconsulta utilizando un alias . Los alias reemplazarán el nombre de la tabla en todas las demás partes de la consulta. En los ejemplos anteriores, t1 , t2 , t6 y t son alias. La mayoría de los DBMS no requieren la palabra AS
antes del alias, y muchos no lo permiten. Si hay un alias presente, debe usar este alias solamente.
Todas las consultas (excepto INSERT
) pueden contener WHERE
-cláusulas. Esta cláusula limita el número de filas afectadas. Contiene una condición . Es posible dar una sola condición simple de una comparación (por ejemplo, last_name="Ellison"
) o condiciones complejas que además utilizan operadores lógicos : AND
, OR
, NOT
. Diferentes partes de la condición podrían agruparse por paréntesis.
WHERE t1.last_name="Ellison" AND t1.first_name="Clark"
WHERE usr.id=profile.usr_id AND
(usr.state="active" OR usr.role="contributor")
Otras cláusulas son específicas a las consultas. SELECT
-clauses contiene una lista de expresiones y da la proyección - produce un nuevo conjunto de columnas para el conjunto de registros procesado. Cualquier expresión podría contener alias de columna agregados usando la palabra AS
opcional.
ORDER BY
-la cláusulas controla el orden de los registros de resultados (o conjunto de resultados). Es aplicable a SELECT
solo consulta. ORDER BY
debe ser la última cláusula.
GROUP BY
-las cláusulas y HAVING
se utilizan para agrupar ciertos registros en uno y filtrar el resultado después de la agrupación. La agrupación reemplaza varios registros (que tienen el mismo valor en uno o varios campos) en un registro. Estas cláusulas son aplicables a la consulta SELECT
.
Una consulta SELECT
podría ser (donde los corchetes indican partes opcionales):
SELECT expressions
FROM tables or join expressions
[WHERE simple or complex condition]
[GROUP BY expressions
[HAVING simple or complex condition]]
[ORDER BY expressions]
Otros son más simples:
DELETE table
[WHERE simple or complex condition]
UPDATE table
SET field=expression, field=expression, ...
[WHERE simple or complex condition]
INSERT INTO table[(fields...)]
VALUES (expressions...)
u otra forma
INSERT INTO table[(fields...)]
SELECT... /* normal select-query */
Con respecto a JOIN
JOIN
es una implementación de una operación de álgebra relacional. Al unir un registro de una tabla, concatena esto con un registro de otra tabla y crea un registro más amplio. INNER JOIN
(unión exacta) aplica esta acción solo a pares de registros que coinciden con la condición de unión.
... users INNER JOIN roles ON (roles.id=user.role_id) ...
LEFT OUTER JOIN
además agrega registros no coincidentes de la primera tabla al conjunto de resultados. RIGHT JOIN
viceversa.
-- two identical joins using different join operators
... users LEFT OUTER JOIN roles ON (roles.id=user.role_id)...
... roles RIGHT OUTER JOIN users ON (roles.id=user.role_id)...
FULL OUTER JOIN
hace ambas cosas, proporciona el resultado de INNER JOIN
más registros no coincidentes de la tabla izquierda más registros no coincidentes de la tabla derecha.
Las palabras INNER
y OUTER
son opcionales. Puedes omitirlos y nada cambia.