Está en la página 1de 23

Taller de Base de Datos

UNIDAD 2. LENGUAJE DE MANIPULACIÓN


DE DATOS
El lenguaje de manipulación de datos (Data Manipulation Lenguage, o DML) es un lenguaje
de programación que se utiliza para la definición del nivel externo y las operaciones de
manipulación de la información.

El Lenguaje de Manipulación de Datos (Data Manipulation Language, DML) es un idioma


proporcionado por los sistemas gestores de bases de datos que permite a los usuarios de la
misma llevar a cabo las tareas de consulta o modificación de los datos contenidos en las
Bases de Datos del Sistema Gestor de Bases de Datos. El lenguaje de manipulación de datos
más popular hoy día es SQL, usado para recuperar y manipular datos en una base de datos
relacional. Otros ejemplos de DML son los usados por bases de datos IMS/DL1, CODASYL u
otras.

La definición del nivel externo de representación consiste en la definición de vistas de los


datos que utilizarán los usuarios de la base de datos.

La manipulación de los datos consiste en la realización de operaciones de inserción,


borrado, modificación y consulta de la información almacenada en la base de datos. La
inserción y el borrado son el resultado de añadir nueva información a la ya que se
encontraba almacenada o eliminarla de nuestra base de datos, tomando en cuenta las
restricciones marcadas por el DDL y las relaciones entre la nueva información y la antigua.
La modificación nos permite alterar esta información, y la consulta nos permite el acceso a
la información almacenada en la base de datos siguiendo criterios específicos.

Clasificación de los DML

Se clasifican en dos grandes grupos:

• Lenguajes procedimentales. En este tipo de lenguaje el usuario da instrucciones al


sistema para que realice una serie de procedimientos u operaciones en la base de
datos para calcular un resultado final.
• Lenguajes de consulta no procedimentales. El usuario describe la información
deseada sin un procedimiento específico para obtener esa información.

Definición de datos

Create table

La definición de tablas es el primer paso en la creación de una base de datos. El conjunto


de descripciones de tablas conforma el esquema de base de datos y representa a un
sistema de información concreto. Supongamos que vamos a implementar un esquema de
base de datos relacional de profesores, asignaturas (sólo es un listado de profesores y
asignaturas, sin relaciones entre ellos). En primer lugar, debemos decidir cuáles son los
atributos de cada uno de ellos y sus tipos de datos:
Taller de Base de Datos

Para cumplir con las restricciones del modelo relacional, además, debemos elegir las claves
primarias adecuadas: DNI para profesores y código para asignaturas. Obviamente, la forma
que tienen estas tablas ha sido una decisión nuestra como diseñadores de esta base de
datos concreta, en otra situación hubiéramos, probablemente, decidido definir otros
atributos y otras tablas.

La orden CREATE TABLE nos permite crear cada una de las tablas necesarias para nuestra
base de datos:

CREATE TABLE nombreTabla ( {listaColumnas} [,{restricciones}] )

La lista de columnas, en su forma más sencilla, es un conjunto de expresiones (tantas como


columnas deseemos, y separadas por comas) del tipo:

columna tipoDatos[,columna tipoDatos[, ...]]

Restricciones

Las restricciones son reglas, que normalmente se establecen en el momento de crear una
tabla, para garantizar la integridad de los datos. Básicamente, las restricciones obligan a
cumplirse ciertas reglas cuando una fila es insertada, borrada o modificada, de forma que
la operación se llevará a efecto sólo si se cumplen las restricciones definidas en la tabla.
Podemos contemplar los siguientes tipos de restricciones de integridad de datos:

• NOT NULL: especifica que la columna no puede contener un valor nulo.


• PRIMARY KEY: identifica de manera única a cada fila de la tabla mediante una o
varias columnas, estas columnas que forman la clave primaria no pueden tener
valores nulos.
• FOREIGN KEY: establece una relación entre una(s) columna(s) de la tabla y otra(s)
columna(s) de la tabla referenciada, siendo esta última(s) columna(s) la PRIMARY
• KEY UNIQUE: no permite duplicados; combinado con NOT NULL es la forma de definir
una clave alternativa.
• CHECK: especifica una condición que se debe evaluar a "cierto".

De las restricciones, sólo vamos a utilizar, de momento, la clave primaria, que puede
contener tantas columnas como se necesiten:

PRIMARY KEY (columna [, columna [, ...]])


Taller de Base de Datos

Las siguientes órdenes crean las tablas PROFESORES y ASIGNATURAS

primary key (dni,asignatura),


foreign key (dni) references profesores,
foreign key (asignatura) references asignaturas);

En la sección anterior constituye el estándar de SQL y es la sintaxis admitida en los SGBD de


mayor penetración comercial. Sin embargo, MySQL es un producto peculiar ya que ofrece
varias opciones de almacenamiento y gestión de las tablas en aras de ofrecer alternativas
que mejoren el rendimiento o la integridad de datos.

En particular podemos elegir entre tablas MyISAM e InnoDB. Si queremos mantener


integridad referencial entre nuestras tablas es imprescindible que especifiquemos que
queremos usar el motor InnoDB.

En una instalación estándar de MySQL, si no decimos nada, la creación de una tabla se


hace por defecto en MyISAM y tiene un efecto importantísimo: si definimos claves ajenas,
el sistema las ignora y no revisa la integridad referencial. Por tanto, y puesto que queremos
garantizar las restricciones de clave ajena, las definiciones anteriores no nos valen:
Taller de Base de Datos

2.1 OPERACIONES DE MANIPULACIÓN DE DATOS

DML (Data Manipulation Language) es la parte de SQL dedicada a la manipulación de los


datos. Las sentencias DML son las siguientes:

• SELECT: se utiliza para realizar consultas y extraer información de la base de datos.


• INSERT: se utiliza para insertar registros en las tablas de la base de datos.
• UPDATE: se utiliza para actualizar los registros de una tabla.
• DELETE: se utiliza para eliminar registros de una tabla.

Insert

Para introducir datos nuevos en una base de datos vamos a utilizar la orden INSERT de SQL.
Con la sintaxis que se muestra a continuación seremos capaces de introducir datos nuevos
en cualquiera de las tablas que componen una determinada BD. En principio, veremos la
expresión mínima de la orden, formada por dos cláusulas, INTO y VALUES.
Taller de Base de Datos

El resultado que devuelve una orden INSERT, será siempre el número de filas insertadas, en
el caso de que la ejecución haya sido correcta. Para los casos en que la ejecución de la
sentencia viole alguna restricción de la BD y por tanto, su ejecución no sea correcta, el
resultado indicará cuál es la restricción violada. El SGBD, cada vez que insertamos un nuevo
dato en una tabla, se encarga de verificar las restricciones activas, en nuestro caso las
claves primarias, que como sabemos, no admiten valores duplicados, ni valores nulos.

A veces no nos interesa o no podemos darles valor a todas y cada una de las columnas, o
lo vamos a hacer en un orden distinto al que tienen las columnas en el create table que la
definió. Especificar una lista de columnas antes de VALUES permite decirle al sistema qué
columnas van a tener valor y cuál es.
Taller de Base de Datos

El sistema intentará asignar a las columnas no indicadas el valor por defecto, si se ha


definido, o valor nulo.

Es recomendable acostumbrarse a poner siempre las columnas a las que se va a dar valor,
sean o no todas las de la tabla.

Las razones que lo aconsejan son:

• No habrá que fijarse en si se va a dar valor a todas o sólo a alguna de las columnas
para acomodar la sintaxis de la sentencia INSERT.
• Si por alguna razón se modifica la estructura de una tabla, es decir, se añaden
columnas nuevas, y tenemos costumbre de no indicar las columnas cuando se
inserta valor a todas, con la modificación dejarán de funcionar las sentencias que
tuviéramos escritas.

Existe la posibilidad de hacer uso del valor NULL, siempre que la columna lo admita. Aunque
se suele simplificar por "ausencia de valor", recuérdese que NULL significa realmente
ignorancia (no sabemos si tiene valor ni, si lo tuviera, cuál es). En cualquier caso, si la
columna los admite se puede especificar en la orden de inserción:

En realidad el efecto es el mismo que el de la orden anterior propuesta (ejecutarla ahora


provocaría un error por duplicado en clave primaria). Igualmente, el cambio de orden de
las columnas se debe corresponder con la posición exacta del valor a asignar:

Inserción de más de una fila

Supongamos que en la BD Ejemplo existiera una tabla llamada OPTATIVAS que contuviera
los códigos y los créditos de aquellas asignaturas de carácter optativo. Vamos a crear dicha
tabla, eligiendo como clave primaria el código de la asignatura y poniendo además otra
restricción, que todas las filas tengan un valor no nulo en la columna créditos.
Taller de Base de Datos

Existe la posibilidad de insertar el resultado de una consulta en lugar de indicar la lista


concreta de valores a insertar. Esto nos permite insertar varias filas en una tabla con una
sola operación, en concreto, tantas filas como tuplas devuelva la orden SELECT.

Supongamos que serán optativas todas las asignaturas que tengan menos de 9 créditos. Se
trata de introducir los códigos de dichas asignaturas en la tabla OPTATIVAS. En este caso,
como ya tenemos las asignaturas en la tabla ASIGNATURAS, tenemos dos opciones. Una
opción es, hacer la SELECT e ir haciendo las INSERT una a una, copiando los datos de las
filas obtenidas. Otra opción es insertar en una sola operación el resultado de la SELECT en
la tabla OPTATIVAS.

El resultado de la orden SELECT deberá ser coherente en cantidad de columnas y tipos de


datos. Las siguientes órdenes provocarán errores de compilación:

Este caso ya es diferente, hay que asegurarse de que el resto de columnas permiten la
inserción:
Taller de Base de Datos

DELETE

Limpiar la Base de Datos


Taller de Base de Datos

La sentencia DELETE nos permite borrar las filas contenidas en una tabla.

Para borrar filas de varias tablas habrá que ejecutar tantas sentencias DELETE como de
tablas queramos borrar.
Taller de Base de Datos

Integridad referencial

Reconstruir la Base de Datos

La integridad referencial es la propiedad de las claves ajenas que nos asegura que todas
las referencias desde una hacia otra tabla son consistentes. La tabla imparte relaciona
profesores y asignaturas informando de qué profesores imparten qué asignatura:

La integridad referencial exige que el valor que tenga la columna dni exista en la tabla
PROFESORES; de la misma manera cada código de asignatura deberá existir en la tabla
ASIGNATURAS.
Taller de Base de Datos

En este momento, los DNI almacenados en PROFESORES son:

y los códigos de ASIGNATURAS:


Taller de Base de Datos

Sólo se podrán borrar aquellas filas que no estén siendo referenciadas, a través de ninguna
clave ajena, desde otra tabla.

Por ejemplo, la asignatura DGBD es impartida por los profesores con dni 21111222 y 21333444
(consulta la tabla del anterior resultado): no se podrá borrar la asignatura si antes no se
eliminan las filas correspondientes a esa asignatura en la tabla imparte.

Eliminando las referencias que nos impiden el borrado:


Taller de Base de Datos

Update

Reconstruir la Base de Datos

La sentencia UPDATE nos permite modificar la información contenida en una tabla.


Taller de Base de Datos

No se pueden modificar varias tablas a la vez en una misma sentencia. Para modificar los
valores de varias tablas varias habrá que ejecutar tantas sentencias UPDATE como tablas
queramos modificar. (NOTA: al igual que con delete MySQL sí proporciona sintaxis
específica para poder hacerlo pero otros SGBD no).

Cuando se desea modificar más de una columna se indicará la lista de columnas y valores
separadas por comas:
Taller de Base de Datos

En el caso de que se indique alguna condición, se modificarán sólo aquellas filas de la tabla
que cumplan la condición o condiciones impuestas:

Existe la posibilidad de modificar la información contenida en una tabla asignando como


nuevo valor o valores, el resultado de una consulta.

El resultado de la consulta puede asignarse a una única columna o a una lista de columnas.
En el primer caso, la sentencia SELECT sólo devolverá un valor (una fila y una columna) el
cual debe coincidir en tipo de dato y longitud con el tipo de dato y longitud de la columna
a la cual asignamos el valor.

Es importante que nos aseguremos de que la subconsulta devuelve un único valor y que
éste sea consistente con el tipo de dato esperado.

Finalmente, podemos combinar todo lo visto en una única sentencia.


Taller de Base de Datos

NOTA: hemos utilizado una constante en la subconsulta (el valor 3)

Integridad referencial

En general, las claves ajenas generan las mismas restricciones de integridad referencial que
las vistas para el DELETE salvo por la naturaleza de la operación: el UPDATE sólo generará
problemas de integridad referencial si el dato a modificar es un valor de clave primaria que
está siendo referenciada por alguna clave ajena. La siguiente orden generaría un problema
con la integridad referencial.

Para poder realizar esta operación, será necesario insertar una nueva fila en asignaturas
con el identificador BD1 y copiando el resto de los valores, después cambiar las referencias
a FBD por BD1 y, por último, borrar la fila de FBD.
Taller de Base de Datos

MySQL y delete y update

Es importante comprender que cada producto se acerca y se aleja del estándar de SQL
en función de sus objetivos y de su estado de desarrollo. Sin ir más lejos, en MySQL es posible
realizar borrados y modificaciones de filas de varias tablas en una única orden, cosa que
otros SGBD (Oracle por ejemplo) no permiten.

Por otro lado, la siguiente orden funciona en otros SGBD pero MySQL no permite modificar
una tabla a partir de una subconsulta de la misma tabla; si es necesario hay que crear una
tabla temporal donde almacenar primero el valor y utilizarlo después en el update. Si se
accede a la base de datos a través de un lenguaje de programación, Php por ejemplo, ya
sería más normal almacenar el valor en una variable y hacer la modificación en base al
mismo. Modica la fecha de ingreso de los profesores con categoría TEU para que coincida
con la del profesor con DNI 21333444.
Taller de Base de Datos

De esta orden se debería obtener:

Sin embargo, MySQL devuelve un error con el mensaje, más o menos, "no se puede hacer
un update de la misma tabla que se está consultando).

Esto también ocurre con delete. La solución consiste en "engañar" a MySQL con una
consulta temporal:

Nota: En realidad no es que estemos "engañando" a MySQL; como se puede ver lo que
estamos haciendo es generar una tabla temporal (ttemp) donde se copian los datos de
PROFESORES que nos interesan.
Taller de Base de Datos

2.2 CONSULTAS SIMPLES.

La recuperación de los datos en el lenguaje SQL se realiza mediante la sentencia SELECT,


seleccionar. Esta sentencia permite indicar al SGBD la información que se quiere recuperar.
Esta es la sentencia SQL, con diferencia, más habitual. La sentencia SELECT consta de cuatro
partes básicas:

• La cláusula SELECT seguida de la descripción de lo que se desea ver, los nombres


de las columnas a seleccionar. Esta parte es obligatoria.
• La cláusula FROM seguida de la especificación de las tablas de las que se han de
obtener los datos. Esta parte es obligatoria.
• La cláusula WHERE seguida por un criterio de selección, una condición. Esta parte
es opcional.
• La cláusula ORDER BY seguida por el criterio de ordenación. Esta parte es opcional

La sintaxis básica de una consulta SELECT es la siguiente (los valores opcionales van entre
corchetes):

SELECT

Permite seleccionar las columnas que se van a mostrar y en el orden en que lo van a hacer.
Simplemente es la instrucción que la base de datos interpreta como que vamos a solicitar
información.

ALL / DISTINCT

ALL

Es el valor predeterminado, especifica que el conjunto de resultados puede incluir filas


duplicadas. Por regla general nunca se utiliza.

DISTINCT

Especifica que el conjunto de resultados sólo puede incluir filas únicas. Es decir, si al realizar
una consulta hay registros exactamente iguales que aparecen más de una vez, éstos se
eliminan. Muy útil en muchas ocasiones.

Nombres de campos

Se debe especificar una lista de nombres de campos de la tabla que nos interesan y que
por tanto queremos devolver. Normalmente habrá más de uno, en cuyo caso separamos
cada nombre de los demás mediante comas.

Se puede anteponer el nombre de la tabla al nombre de las columnas, utilizando el formato


Tabla. Columna. Además de nombres de columnas, en esta lista se pueden poner
Taller de Base de Datos

constantes, expresiones aritméticas, y funciones, para obtener campos calculados de


manera dinámica.

Si queremos que nos devuelva todos los campos de la tabla utilizamos el comodín “*”
(asterisco).

Los nombres indicados deben coincidir exactamente con los nombre de los campos de la
tabla, pero si queremos que en nuestra tabla lógica de resultados tengan un nombre
diferente podemos utilizar:

AS

Permite renombrar columnas si lo utilizamos en la cláusula SELECT, o renombrar tablas si lo


utilizamos en la cláusula FROM. Es opcional. Con ello podremos crear diversos alias de
columnas y tablas.

FROM

Esta cláusula permite indicar las tablas o vistas de las cuales vamos a obtener la información.
De momento veremos ejemplos para obtener información de una sola tabla.

Condiciones

Son expresiones lógicas a comprobar para la condición de filtro, que tras su resolución
devuelven para cada fila TRUE o FALSE, en función de que se cumplan o no. Se puede
utilizar cualquier expresión lógica y en ella utilizar diversos operadores como:

> (Mayor)

>= (Mayor o igual)

< (Menor)

<= (Menor o igual)

= (Igual)

<> o != (Distinto)

IS [NOT] NULL (para comprobar si el valor de una columna es o no es nula, es decir, si


contiene o no contiene algún valor)

ORDER BY

Define el orden de las filas del conjunto de resultados. Se especifica el campo o campos
(separados por comas) por los cuales queremos ordenar los resultados.

ASC / DESC

ASC es el valor predeterminado, especifica que la columna indicad en la cláusula ORDER


BY se ordenará de forma ascendente, o sea, de menor a mayor. Si por el contrario se
especifica DESC se ordenará de forma descendente (de mayor a menor).
Taller de Base de Datos

2.3 CONSULTAS SOBRE MÚLTIPLES TABLAS

La verdadera potencia del SQL se alcanza cuando combinamos el contenido de más de


una tabla. Suponga que desea conseguir una lista con los empleados y los departamentos
para los que trabajan. Esta información está repartida en las dos tablas empleado y
departamento. Si necesitamos obtener información de más de una tabla, tendremos la
opción de utilizar subconsultas o combinaciones. Si la tabla de resultados final debe
contener columnas de tablas diferentes, entonces deberemos utilizar obligatoriamente una
combinación. Para realizar una combinación, basta incluir más de un nombre en la cláusula
FROM, utilizando una coma como separador y, normalmente, incluyendo una cláusula
WHERE para especificar la columna o columnas con las que hay que realizar la
combinación. Así, podríamos intentar una consulta que seleccionara el campo nombre de
la tabla empleado y el nombre del departamento. Y aquí surge el primer problema ¿cómo
distinguimos entre dos columnas que llamándose igual, pertenecen a tablas distintas? El uso
de alias para las tablas incluidas en el FROM o en las columnas del SELECT permite evitar la
ambigüedad, el alias se separa por un espacio.

Subconsultas

Una subconsulta es una instrucción SELECT anidada dentro de una sentencia SELECT,
SELECT...INTO, INSERT...INTO, DELETE, o UPDATEo dentro de otra subconsulta. Una
subconsulta, a su vez, puede contener otra subconsulta y así hasta un máximo de 16 niveles.
Las particularidades de las subconsultas son:

1. Su resultado no se visualiza, sino que se pasa a la consulta principal para su


comprobación.
2. Puede devolver un valor único o una lista de valores y en dependencia de esto se
debe usar el operador del tipo correspondiente.
3. No puede usar el operador BETWEEN, ni contener la setencia ORDER BY.
4. Puede contener una sola columna, que es lo más común, o varias columnas. Este
último caso se llama subconsulta con columnas múltiples.

Cuando dos o más columnas serán comprobadas al mismo tiempo, deben encerrarse entre
paréntesis. Ejemplo: Nombres de los jugadores que han participado más que el promedio,
equipo y posición durante un torneo.
Taller de Base de Datos

Operadores set Las consultas multitabla o JOINS.

también denominadas combinaciones o composiciones, permiten recuperar datos de dos


tablas o más según las relaciones lógicas entre ellas. Las combinaciones indican cómo
debería utilizar el SGBD los datos de una tabla para seleccionar los datos de otra tabla. Una
condición de combinación (o composición) define la forma en la que dos tablas se
relacionan en una consulta al:

• Especificar la columna de cada tabla que debe usarse para la combinación. Una
condición de combinación específica una clave externa de una tabla y su clave asociada
en otra tabla. Relación padre - hija.

• Especificar un operador lógico (=, <>, etc.) para usarlo en los valores de comparación de
las columnas Es una operación que combina registros de dos tablas en una base de datos
relacional que resulta en una nueva tabla (temporal) llamada tabla de JOIN.

En el lenguaje de consulta SQL hay dos tipos de JOIN:

INNER y OUTER. Como caso especial, una tabla (tabla base, vista o una tabla JOIN) puede
realizar la operación JOIN sobre ella misma. Esto se conoce como self-JOIN.

Ejemplo: Jugadores que participaron con el Cruz Azul durante el torneo Apertura 2011,
minutos jugados y partidos en los que participo (JJ)

2.4 FUNCIONES DE AGREGADO Y DE AGRUPACIÓN

Las funciones de agregación en SQL nos permiten efectuar operaciones sobre un conjunto
de resultados, pero devolviendo un único valor agregado para todos ellos. Es decir, nos
permiten obtener medias, máximos, etc. sobre un conjunto de valores.

Las funciones de agregación básicas que soportan todos los gestores de datos son las
siguientes:

COUNT: devuelve el número total de filas seleccionadas por la consulta.

MIN: devuelve el valor mínimo del campo que especifiquemos.

MAX: devuelve el valor máximo del campo que especifiquemos.

SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas
numéricas.

AVG: devuelve el valor promedio del campo que especifiquemos. Sólo se puede utilizar en
columnas numéricas.
Taller de Base de Datos

por ejemplo, si queremos obtener algunos datos agregados de la tabla de pedidos de la


base de datos de ejemplo Northwind, podemos escribir una consulta simple como la
siguiente:

También podría gustarte