Una diferencia entre DDL y DML

Pasaban algunas semanas en clase y algunos de mis alumnos aún tenían dudas sobre DDL y DML.

En teoría, SQL tiene dos subconjuntos pricipales: DDL y DML.

DDL

DDL, Data Description Language, conjunto de instrucciones para trabajar con el esquema. Principalmente:

CREATE <algo>, 

ALTER <algo> <cómo> y

DROP <algo>

DML

DML, Data Manipulation Language, conjunto de instrucciones para trabajar con los datos. Principalmente:

SELECT <campos> FROM <tabla> WHERE <condiciones>

INSERT INTO <tabla> (<campo1>, ...) VALUES (<valor1>,...)

UPDATE <tabla> SET <campo> = <valor> WHERE <condición>

DELETE FROM <tabla> WHERE <condición>

¿Otras formas de ver esta diferencia?

Podríamos ensayar algunas ideas:

  • DML trabaja sobre la data, DDL, sobre la metadata.
  • DML trabaja sobre la información, DDL, sobre la estructura de esa información.
  • DML trabaja a nivel de registros, DDL, de tablas. (no me gusta mucho esta)
  • DML manipula la información que se guarda dentro de una o más tablas. DDL manipula la descripción de los objetos de la BD.
  • DML trabaja sobre los registros, DDL sobre su estructura.
  • Si tenemos una tabla Estudiante, DML trabajará sobre Brenda, Verónica o Mayvy, todas estudiantes. DDL trabajará sobre la tabla en sí y su descripción. No conocerá a estudiantes específicos.

Un ejemplo más que creo fue útil en clase fue el siguiente: El símil entre archivos de Windows y objetos de la BD.

Comparación entre archivos de Windows y una BD

Supongamos que queremos guardar un archivo de texto con datos de la Universidad en mi computadora personal. ¿Qué hago?

Seguramente, lo primero será crear una carpeta, dada la cantidad de ellas en mi PC, entonces creamos la carpeta Universidad. Luego, entramos a la carpeta.

Dentro de ella, ahora queremos guardar tres listados, un listado de mis compañeros de clase con su celulares y nombre, y otro listado de mis cursos en este ciclo. Creamos dos archivos, Contactos.txt y CursosCiclo2017II.txt. ¿Cómo vamos? Con una estructura así:

carpetas1
En esta captura ¿ven que los archivos tienen 0 KB de tamaño?

¡Listo! Pero.. ¿qué datos ya guardé? ¿Ya sé qué cursos llevo? ¿Cuál es el celular de Alex? ¿Qué pasó? Así es. Que aún no he guardado ningún dato. Solo me he pasado haciendo la estructura que los guardará. Es decir, si esto fuera una BD, he usado puro DDL.

¿Cómo?

Sí claro. Mira. La carpeta representa la BD. Entonces equivale a un:

Disclaimer: Me estoy saltando toda la complejidad de un DBMS en particular, sintaxis, cualquier tema de normalización y generación formal de una tabla a partir de su diseño conceptual, con fines del ejemplo.

CREATE DATABASE Universidad;

Luego entramos a la carpeta ¿no? para que todo lo que se cree quede ahí. Eso equivale a un:

USE Universidad;

Luego creamos dos archivos para almacenar información que siendo distinta, como que va a repetir estructura, es decir, todos mis compañeros tendrán un celular, nombre; y todos mis cursos tendrán al menos un nombre, horario, profesor. En este ejemplo, estamos ante dos tablas. Así que:

CREATE TABLE Contactos (
 celular char(9) NOT NULL,
 nombre char(25),
 PRIMARY KEY (celular)  );

CREATE TABLE Cursos2017II (
 idcurso int(2) NOT NULL,
 curso char(25),
 horario char(25),
 profesor char(25),
PRIMARY KEY (idcurso)      );

Entonces, hasta ahora, puro DDL. ¿Si tengo que cambiar las tablas para añadir campos, etc.? DDL. ¿Si quiero borrar una tabla? DDL. Puro DDL, dado que no se está trabajando a nivel de datos aún.

¿Y el DML?

Veamos. Ya estoy listo. Tomo el archivo Contactos e ingreso:

carpetas2
Notar que “ya hay datos” en los archivos.

¿Cómo fue esta acción de añadir, ingresar o agregar información a los archivos? Fue el equivalente a:

INSERT INTO Contactos 
VALUES ('965000655', 'Pedro Vargas');

Etc.

También para la otra tabla:

INSERT INTO CursosCiclo2017II
VALUES (1, 'Análisis y Diseño de BD', 'LUN 5-7pm, MIE 7-9pm', 'Arturo Moquillaza');

Etc.

¿Y si queremos “abrir” los archivos para ver su contenido? Pues:

SELECT * FROM Contactos;

SELECT * FROM CursosCiclo2017II;

¿Y si queremos editar el teléfono de Pedro, es decir, abrir el archivo, buscar a Pedro y corregir su número por su nuevo celular 988412450? Esta acción en SQL es UPDATE:

UPDATE Contactos
SET celular = '988412450'
WHERE nombre = 'Pedro Vargas';

¿Y si queremos borrar el curso 02? Es decir, lo cerraron . No lo vamos a llevar. ¿Cuál es la acción de abrir el archivo, ubicar el curso 02 y borrarlo? Pues en SQL es:

DELETE FROM CursosCiclo2017II
WHERE idcurso = 2;

¿Se entendió la comparación?

Ahora. Pregunta: Resulta que me cambiaron de salón y quiero retirar todos los datos de Contactos sin eliminar el archivo. ¿Qué corresponde en el mundo SQL? ¿DDL o DML? ¿DROP o DELETE sin FROM?

Esto suena útil
¿Cuál será?

¡Exacto! Como quiero retirar los datos, aplica DELETE sin FROM. DML.

¡Nos vemos en la red!

 

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s