bases_de_datos:mysql:lenguaje_mysql
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| bases_de_datos:mysql:lenguaje_mysql [2016/12/05 20:54] – [Ejemplos] alberto | bases_de_datos:mysql:lenguaje_mysql [2016/12/07 21:32] (actual) – [Eliminación de vistas] alberto | ||
|---|---|---|---|
| Línea 4: | Línea 4: | ||
| La forma más básica de crear una tabla es de la siguiente manera: | La forma más básica de crear una tabla es de la siguiente manera: | ||
| <WRAP box> | <WRAP box> | ||
| - | | + | |
| - | NombreColumna TipoDato [, | + | NombreColumna TipoDato [, |
| - | NombreColumna TipoDato] ...); | + | NombreColumna TipoDato] ...); |
| </ | </ | ||
| Línea 493: | Línea 493: | ||
| Es posible realizar composiciones o combinaciones de una tabla consigo misma. Basta con especificar un alias diferente para la misma tabla (como si fuesen tablas diferentes) en la clausula FROM.\\ | Es posible realizar composiciones o combinaciones de una tabla consigo misma. Basta con especificar un alias diferente para la misma tabla (como si fuesen tablas diferentes) en la clausula FROM.\\ | ||
| - | ==== composiciones | + | ==== Composiciones |
| Puede darse el caso de que al realizar una combinación multitabla, no se emparejen todas las filas que debieran, por falta de correspondencia. Esto ocurre cuando existen filas en una tabla que no tienen correspondencia con las filas de la otra tabla. \\ | Puede darse el caso de que al realizar una combinación multitabla, no se emparejen todas las filas que debieran, por falta de correspondencia. Esto ocurre cuando existen filas en una tabla que no tienen correspondencia con las filas de la otra tabla. \\ | ||
| Si deseamos que aparezcan todos las filas de un determinado campo de una tabla, aunque no tenga correspondencia con las filas de la otra tabla, se realiza lo que se denomina una **Composición o Combinación Externa (Outer Join)**. | Si deseamos que aparezcan todos las filas de un determinado campo de una tabla, aunque no tenga correspondencia con las filas de la otra tabla, se realiza lo que se denomina una **Composición o Combinación Externa (Outer Join)**. | ||
| Línea 614: | Línea 614: | ||
| |PRODUCCION|SEVILLA|0| | |PRODUCCION|SEVILLA|0| | ||
| |VENTAS|MADRID|4| | |VENTAS|MADRID|4| | ||
| + | |||
| + | |||
| + | ===== Composiciones y subconsultas ===== | ||
| + | Hay ocasiones que una consulta puede resolverse con una composición o combinación (Join) de tablas, o una subconsulta.\\ | ||
| + | |||
| + | Si puede solucionarse de ambas formas, siempre será preferible hacerlo con una subconsulta, | ||
| + | |||
| + | En general, si no se necesitan visualizar columnas de más de una tabla, de utilizarán subconsultas. En caso contrario, se usará un join. | ||
| + | |||
| + | ===== Formato completo de consultas ===== | ||
| + | <WRAP box> | ||
| + | SELECT { *|[ALL/ | ||
| + | [, ExpresionColumna [AliasColumna]...] } | ||
| + | FROM NombreTabla [AliasTabla] | ||
| + | [, NombreTabla [AliasTabla] ...] | ||
| + | [WHERE {CondicionSeleccion|CondicionComposicion}] | ||
| + | [GROUP BY ExpresionColumnaAgrupacion|Posicion] | ||
| + | [, | ||
| + | | ||
| + | [ORDER BY {ExpresionColumna|Posicion}[ASC|DESC] | ||
| + | [, | ||
| + | [LIMIT [m,]n]; | ||
| + | </ | ||
| ===== Consultas dentro de otras instrucciones ===== | ===== Consultas dentro de otras instrucciones ===== | ||
| + | ==== Creación de una tabla a partir de una selección de otra tabla ==== | ||
| + | <WRAP box> | ||
| + | CREATE TABLE [IF NOT EXISTS] NombreTabla | ||
| + | [( DefinicionColumna [, DefinicionColumna ...] )] [IGNORE|REPLACE] | ||
| + | SentenciaSelect | ||
| + | </ | ||
| + | |||
| + | Los nombres de las columnas de la nueva tabla son opcionales y en caso de que no se especifiquen, | ||
| + | |||
| + | Para saber qué acción tomar cuando se produce la repetición de un campo UNIQUE o PRIMARY KEY, podemos indicar IGNORE (no se guarda el nuevo dato y es ignorado) | ||
| + | |||
| + | LA nueva tabla creada no hereda las constraints, | ||
| + | |||
| + | Al crear la nueva tabla, se insertan las filas correspondientes de la tabla resultado de la sentencia SELECT. | ||
| + | |||
| + | ==== Actualización de una tabla a partir de una subconsulta ==== | ||
| + | <WRAP box> | ||
| + | INSERT INTO NombreTabla [( NombreColumna [, | ||
| + | SELECT FormatoSelect | ||
| + | </ | ||
| + | |||
| + | La lista de columnas es opcional, pero deberá especificarse si las columnas que devuelve la consulta no coinciden en número u orden con las columnas de la tabla destino.\\ | ||
| + | |||
| + | ==== Modificaciones con subconsultas ==== | ||
| + | En este caso, la condición que deben cumplir las filas que deseamos modificar implica la realización de una subconsulta a otras tablas.\\ | ||
| + | La forma de hacerlo es incluyendo la subconsulta en la cláusula WHERE.\\ | ||
| + | |||
| + | Existen algunas limitaciones: | ||
| + | * La tabla destino no puede aparecer en la consulta. | ||
| + | * No se puede incluir la cláusula ORDER BY en la consulta. | ||
| + | |||
| + | **Ejemplo** | ||
| + | Se desea elevar 500 euros el salario de todos los empleados cuyo departamento no esté en Madrid. | ||
| + | <code mysql> | ||
| + | UPDATE empleados | ||
| + | SET salario = salario + 500 | ||
| + | WHERE dep_no NOT IN ( SELECT dep_no | ||
| + | FROM departamentos | ||
| + | WHERE localidad <> ' | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Eliminaciones con subconsultas ==== | ||
| + | En ocasiones la condición que deben cumplir las filas que queremos eliminar implica realizar una subconsulta a otras tablas. En estos casos se incluirá la subconsulta en la cláusula WHERE con las mismas restricciones que las modificaciones: | ||
| + | * La tabla destino no puede aparecer en la consulta. | ||
| + | * No se puede incluir la cláusula ORDER BY en la consulta. | ||
| + | |||
| + | Se pueden utilizar subconsultas anidadas a varios niveles, pero respetando la siguiente restricción: | ||
| + | |||
| + | **Ejemplo** | ||
| + | <code mysql> | ||
| + | DELETE FROM departamentos | ||
| + | WHERE NOT EXISTS ( SELECT * | ||
| + | FROM empleados | ||
| + | WHERE empleados.dep_no = departamentos.dep_no ); | ||
| + | </ | ||
| ===== Vistas ===== | ===== Vistas ===== | ||
| + | Una vista es una "tabla virtual" | ||
| + | |||
| + | Ventajas del uso de vistas: | ||
| + | * Seguridad y confidencialidad: | ||
| + | * Comodidad: Sólo muestra los datos relevantes, aunque pertenezcan en realidad a diferentes tablas. Se permite incluso trabajar con agrupaciones de filas como si se tratase de una sola, o composiciones de tablas como si fuera sólo una. | ||
| + | * Sigue funcionando aunque se produzcan cambios en las tablas de origen (nombres de columnas, tablas, etc). | ||
| + | |||
| + | ==== Creación de vistas ==== | ||
| + | <WRAP box> | ||
| + | CREATE VIEW NombreVista | ||
| + | [( DefinicionColumna [, | ||
| + | AS Consulta; | ||
| + | </ | ||
| + | |||
| + | Deben tenerse en cuenta algunas consideraciones cuando se crean vistas: | ||
| + | * Si no empleamos nombres para las columnas y expresiones, | ||
| + | * No se puede usar la cláusula ORDER BY en la creación de una vista. | ||
| + | * es obligatorio definir nombres de columnas o alias, cuando la vista devuelve funciones de agrupamiento (SUM, COUNT, etc), y posteriormente quiere hacerse referencia a ellas. | ||
| + | * Pueden usarse funciones de agrupación para crear vistas. Después también es posible usar funciones de agrupación en las consultas sobre esas mismas vistas, de forma que podemos recuperar " | ||
| + | Se pueden realizar consultas a las vistas, de la misma manera que se hacía a las tablas. | ||
| + | |||
| + | ==== Ejemplo ==== | ||
| + | Creamos una vista para trabajar con los datos de dos tablas agrupados y seleccionando las filas que interesen (todos los departamentos que tengan más de dos empleados): | ||
| + | <code mysql> | ||
| + | CREATE VIEW resumen_emp_dep | ||
| + | (departamento, | ||
| + | | ||
| + | | ||
| + | AS SELECT dnombre, | ||
| + | | ||
| + | | ||
| + | FROM empleados, departamentos | ||
| + | WHERE empleados.dep_no = departamentos.dep_no | ||
| + | GROUP BY empleados.dep_no, | ||
| + | | ||
| + | </ | ||
| + | |||
| + | Consultamos los datos del número de empleados por departamento: | ||
| + | <code mysql> | ||
| + | SELECT departamento, | ||
| + | FROM resumen_emp_dep; | ||
| + | </ | ||
| + | |||
| + | Que resulta: | ||
| + | ^departamento^num_empleados^ | ||
| + | |CONTABILIDAD|3| | ||
| + | |VENTAS|4| | ||
| + | |||
| + | ==== Eliminación de vistas ==== | ||
| + | <WRAP box> | ||
| + | DROP VIEW [IF EXISTS] NombreVista | ||
| + | | ||
| + | </ | ||
| + | |||
| + | RESTRICT y CASCADE están permitidas pero no implementadas en la versión 5 de MySQL. | ||
bases_de_datos/mysql/lenguaje_mysql.1480967665.txt.gz · Última modificación: por alberto
