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 21:14] – 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 660: | Línea 660: | ||
| </ | </ | ||
| + | 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.1480968889.txt.gz · Última modificación: por alberto
