Herramientas de usuario

Herramientas del sitio


bases_de_datos:mysql:lenguaje_mysql

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bases_de_datos:mysql:lenguaje_mysql [2016/12/05 21:14] albertobases_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>
-    CREATE TABLE [IF NOT EXISTS] NombreTabla ( +  CREATE TABLE [IF NOT EXISTS] NombreTabla ( 
-        NombreColumna TipoDato [, +      NombreColumna TipoDato [, 
-        NombreColumna TipoDato] ...);+      NombreColumna TipoDato] ...);
 </WRAP> </WRAP>
  
Línea 641: Línea 641:
 ==== Creación de una tabla a partir de una selección de otra tabla ==== ==== Creación de una tabla a partir de una selección de otra tabla ====
 <WRAP box> <WRAP box>
-CREATE TABLE [IF NOT EXISTS] NombreTabla +  CREATE TABLE [IF NOT EXISTS] NombreTabla 
- [( DefinicionColumna [, DefinicionColumna ...] )] [IGNORE|REPLACE] +   [( DefinicionColumna [, DefinicionColumna ...] )] [IGNORE|REPLACE] 
-SentenciaSelect+  SentenciaSelect
 </WRAP> </WRAP>
  
Línea 656: Línea 656:
 ==== Actualización de una tabla a partir de una subconsulta ==== ==== Actualización de una tabla a partir de una subconsulta ====
 <WRAP box> <WRAP box>
-INSERT INTO NombreTabla [( NombreColumna [,NombreColumna ...] )] +  INSERT INTO NombreTabla [( NombreColumna [,NombreColumna ...] )] 
-SELECT FormatoSelect+  SELECT FormatoSelect
 </WRAP> </WRAP>
  
 +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 <> 'Madrid' );
 +</code>
 +
 +
 +==== 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: **La tabla destino no puede aparecer en la cláusula FROM de ninguna de las subconsultas que intervienen en la selección. __Sí se permiten referencias externas__.**
 +
 +**Ejemplo**
 +<code mysql>
 +DELETE FROM departamentos
 +WHERE NOT EXISTS ( SELECT *
 +                   FROM empleados
 +                   WHERE empleados.dep_no = departamentos.dep_no );
 +</code>
 ===== Vistas ===== ===== Vistas =====
 +Una vista es una "tabla virtual" que se almacena en memoria y que se crea a partir de una consulta. Esta "tabla virtual" o "Vista", está "conectada" directamente a las tablas de origen, de forma que se mantiene constantemente actualizada en tiempo real. Podemos operar sobre la vista como si de una tabla corriente se tratase, sirviendo de interfaz con el usuario y los datos de interés.\\
 +
 +Ventajas del uso de vistas:
 +  * Seguridad y confidencialidad: La vista ocultará los datos a los que el usuario no tenga permiso de acceso.
 +  * 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 [,DefinicionColumna ...] )]
 +    AS Consulta;
 +</WRAP>
 +
 +Deben tenerse en cuenta algunas consideraciones cuando se crean vistas:
 +  * Si no empleamos nombres para las columnas y expresiones, sólo podremos referirnos a ellas con un SELECT *
 +  * 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 "dobles agrupamientos", que no están permitidos por el estándar.
 +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, 
 +   num_empleados,
 +   suma_salario)
 + AS SELECT dnombre,
 +           COUNT(emp_no),
 +           SUM(salario)
 +    FROM empleados, departamentos
 +    WHERE empleados.dep_no = departamentos.dep_no
 +    GROUP BY empleados.dep_no, dnombre
 +     HAVING COUNT(*) > 2;
 +</code>
 +     
 +Consultamos los datos del número de empleados por departamento:
 +<code mysql>
 +SELECT departamento, num_empleados
 +FROM resumen_emp_dep;
 +</code>
 +
 +Que resulta:
 +^departamento^num_empleados^
 +|CONTABILIDAD|3|
 +|VENTAS|4|
 +
 +==== Eliminación de vistas ====
 +<WRAP box>
 +    DROP VIEW [IF EXISTS] NombreVista
 +     [RESTRICT|CASCADE]
 +</WRAP>
 +
 +RESTRICT y CASCADE están permitidas pero no implementadas en la versión 5 de MySQL.
bases_de_datos/mysql/lenguaje_mysql.1480968848.txt.gz · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki