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:55] – [composiciones externas] 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 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.1480967712.txt.gz · Última modificación: por alberto
