tipos query inet_aton example mysql terminology

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 las table_references de table_references de las instrucciones SELECT

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:

  1. "Alias ​​de tabla" es bueno
  2. "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
  3. "offset" (o posiblemente "offset de fila") es bueno

Los que no están tan seguros de:

  1. Entre SELECT y FROM utilizaré "seleccionar expresión" o "expresión de columna" o "definiciones de columna"
  2. Tiendo a usar "donde expresiones"
  3. "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.