DP-900: Tipos de instrucciones SQL (DDL, DML, DCL) y restricciones

DDL, DML, DCL y TCL; orden de procesamiento de SELECT y WHERE vs HAVING; restricciones de clave principal, externa, UNIQUE y CHECK; integridad de entidad, referencial y de dominio; NULL, índices agrupados y desnormalización en DP-900.

El Dominio 2 del temario oficial de DP-900 incluye "Identificar instrucciones comunes del lenguaje de consulta estructurado (SQL)" e "Identificar características de los datos relacionales". Las preguntas reales no te piden escribir SQL. Te piden clasificar y aplicar reglas: "¿Esta instrucción es DDL o DML?" o "¿Qué impide que un pedido haga referencia a un ID de cliente que no existe?". Si dominas los conceptos, puedes responderlas sin experiencia en desarrollo.

Este artículo es un complemento de Fundamentos de datos relacionales de nuestra serie de estudio de DP-900. Partiendo de SELECT, INSERT, UPDATE, DELETE, JOIN, las claves y la normalización que vimos allí, recorre las categorías de instrucciones SQL, el orden en que se procesa una consulta, las restricciones y los tres tipos de integridad, NULL, los tipos de índice y la desnormalización, más o menos en el orden en que aparecen en el examen.

---

 

¿Por qué SQL se divide en varios grupos?

Piensa en la construcción de un edificio nuevo. Primero se dibujan los planos y se crean plantas y habitaciones; después entran y salen personas y muebles, y las tarjetas de acceso deciden quién puede entrar en cada planta. SQL funciona igual: algunas instrucciones crean la estructura, otras introducen y cambian datos y otras deciden quién tiene acceso.

SQL (Structured Query Language) es el lenguaje estándar para comunicarse con bases de datos relacionales. Lo estandarizó ANSI en 1986 e ISO en 1987. Sin embargo, cada producto de base de datos añade sus propias extensiones al estándar, lo que da lugar a distintos dialectos.

| Dialecto | Lo usan | |------|------| | Transact-SQL (T-SQL) | SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Server en máquinas virtuales de Azure | | PL/pgSQL | PostgreSQL | | PL/SQL | Oracle |

Consejo para el examen: "El dialecto SQL que usan Azure SQL Database y SQL Managed Instance" → Transact-SQL (T-SQL). "Las organizaciones que estandarizaron SQL" → ANSI e ISO.

---

 

DDL, DML, DCL y TCL

Microsoft Learn agrupa las instrucciones SQL en tres categorías: DDL, DML y DCL. Las preguntas del examen a veces añaden TCL, que gestiona las transacciones, así que aprende las cuatro juntas.

!Tipos de instrucciones SQL de un vistazo

DDL: instrucciones que definen la estructura

DDL (Data Definition Language) crea, modifica y elimina objetos de la base de datos como tablas, vistas y procedimientos almacenados. CREATE, ALTER, DROP y RENAME son las instrucciones principales, y la documentación de T-SQL también clasifica TRUNCATE TABLE como DDL. DROP elimina un objeto de forma permanente, así que sin una copia de seguridad también se pierden todas las filas de la tabla eliminada.

En este ejemplo, PRIMARY KEY marca la columna que identifica de forma única cada fila, y NOT NULL marca una columna obligatoria que siempre debe tener un valor.

DML: instrucciones que trabajan con filas

DML (Data Manipulation Language) lee filas (SELECT), las añade (INSERT), las cambia (UPDATE) y las elimina (DELETE). SELECT, UPDATE y DELETE se aplican a todas las filas de forma predeterminada, así que normalmente las acotas con una cláusula WHERE. SQL no pregunta "¿estás seguro?", de modo que un UPDATE o un DELETE sin WHERE cambia o elimina la tabla entera.

DCL: instrucciones que gestionan permisos

DCL (Data Control Language) concede permisos a usuarios o grupos (GRANT), los deniega (DENY) o retira permisos concedidos antes (REVOKE). Los usan sobre todo los administradores de bases de datos.

TCL: instrucciones que confirman o deshacen transacciones

TCL (Transaction Control Language) agrupa varias operaciones en una transacción y las confirma con COMMIT o las revierte con ROLLBACK. En T-SQL empiezas con BEGIN TRANSACTION y puedes fijar un punto de guardado intermedio con SAVE TRANSACTION. Se usa en trabajos como una transferencia de dinero, donde el cargo y el abono deben tener éxito juntos o deshacerse juntos.

| Categoría | Qué hace | Instrucciones principales | Palabras clave del examen | |------|------|------|------| | DDL | Define, cambia y elimina la estructura de los objetos | CREATE, ALTER, DROP, RENAME, TRUNCATE TABLE | Crear una tabla, añadir una columna, cambiar la estructura | | DML | Lee, añade, cambia y elimina filas | SELECT, INSERT, UPDATE, DELETE | Consultar datos, añadir filas, modificar valores | | DCL | Concede, deniega y retira permisos | GRANT, DENY, REVOKE | Permisos, permitir el acceso | | TCL | Confirma o deshace transacciones | COMMIT, ROLLBACK, SAVE TRANSACTION | Confirmar, revertir |

Consejo para el examen: "Añadir una columna a una tabla existente" → ALTER (DDL). "Dar a un usuario permiso SELECT" → GRANT (DCL). "COMMIT y ROLLBACK" → TCL, no DCL. Son frecuentes las opciones que juegan con los nombres parecidos DDL, DCL y DML.

---

 

¿En qué orden se procesa una consulta?

El orden en que escribes una instrucción SELECT no es el orden en que la base de datos la procesa. Una vez que conoces el orden de procesamiento, la diferencia entre cláusulas parecidas como WHERE y HAVING resulta evidente.

| Orden de procesamiento | Cláusula | Función | |------|------|------| | 1 | FROM (incluido JOIN) | De qué tablas se leen los datos | | 2 | WHERE | Filtra filas antes de agregar | | 3 | GROUP BY | Agrupa las filas con los mismos valores | | 4 | HAVING | Filtra los resultados agregados (grupos) | | 5 | SELECT | Columnas y cálculos que se devuelven | | 6 | ORDER BY | Ordena los resultados (ascendente ASC por defecto, descendente DESC) |

Para las funciones de agregado que se usan con GROUP BY, recuerda estas cinco: COUNT, SUM, AVG, MIN y MAX. Sin ORDER BY, el orden de las filas del resultado no está garantizado.

Los nombres de objeto se escriben con puntos, reduciendo el ámbito de izquierda a derecha. En las bases de datos basadas en SQL Server el orden es base de datos.esquema.tabla (por ejemplo, SalesDB.dbo.Customer).

Consejo para el examen: "Filtrar filas antes de agregar" → WHERE. "Filtrar los grupos agregados con una condición" → HAVING. "Ordenar los resultados" → ORDER BY.

---

 

Restricciones: reglas que impiden la entrada de datos incorrectos

Piensa en las normas de la entrada de un concierto. Necesitas una entrada (NOT NULL), cada número de asiento lo usa una sola persona (UNIQUE), la entrada tiene que haberse vendido de verdad (FOREIGN KEY) y hay límites de edad (CHECK). Las restricciones son la forma en que una base de datos hace cumplir reglas como estas de forma automática.

| Restricción | Qué hace | NULL | Cantidad por tabla | |------|------|------|------| | PRIMARY KEY | Identifica de forma única cada fila | No se permite | 1 | | FOREIGN KEY | Solo permite valores de la clave principal (o columna UNIQUE) de otra tabla | Se permite | Varias | | UNIQUE | Impide valores duplicados en una columna | SQL Server solo permite un NULL por columna | Varias | | NOT NULL | Siempre debe haber un valor | No se permite | Varias | | CHECK | Los valores deben cumplir una condición (por ejemplo, Price >= 0) | NULL se evalúa como UNKNOWN y pasa | Varias | | DEFAULT | Inserta un valor predeterminado si no se indica ninguno | No aplica | 1 por columna |

Conviene recordar algunos puntos más.

Clave compuesta: cuando una sola columna no distingue las filas, se combinan dos o más columnas como clave principal. Número de pedido más número de línea, o número de vuelo más número de asiento, son ejemplos típicos. Acciones referenciales: cuando se elimina una fila principal, puedes elegir eliminar también las filas secundarias (ON DELETE CASCADE) o poner su clave externa a NULL (SET NULL). Relación autorreferencial: una clave externa apunta a la clave principal de su propia tabla para representar una jerarquía, como el ID de jefe en una tabla de empleados que hace referencia al ID de otro empleado.

Consejo para el examen: "Clave principal vs UNIQUE" → ambas impiden duplicados, pero la clave principal no admite NULL y solo hay una por tabla. "El precio debe ser cero o más" → CHECK.

---

 

Los tres tipos de integridad y NULL

La integridad significa que los datos se mantienen exactos y coherentes. Las bases de datos relacionales usan restricciones para proteger tres tipos de integridad.

| Integridad | Significado | Cómo se impone | |------|------|------| | Integridad de entidad | Cada fila se identifica de forma única | Clave principal (sin duplicados ni NULL) | | Integridad referencial | Las relaciones entre tablas siempre son válidas | Clave externa (no se admiten valores que falten en la tabla principal) | | Integridad de dominio | Los valores de las columnas están dentro del rango permitido | Tipos de datos, CHECK, NOT NULL, DEFAULT |

Sin integridad referencial aparecen registros huérfanos, como pedidos que apuntan a clientes que no existen. Una restricción de clave externa bloquea esas filas y también bloquea, o gestiona, los intentos de eliminar una fila principal a la que todavía hacen referencia filas secundarias. Las bases de datos no relacionales no suelen admitir restricciones de clave externa, así que es la aplicación la que tiene que gestionar esa coherencia.

NULL no es cero ni una cadena vacía

NULL es una marca para un valor que falta o se desconoce. El número 0 y una cadena de longitud cero ('') son valores reales, así que no son NULL. Comparar cualquier cosa con NULL da UNKNOWN en lugar de verdadero o falso, por lo que para encontrar filas con NULL usas IS NULL o IS NOT NULL en lugar de = NULL.

Consejo para el examen: "Impedir que los pedidos contengan ID de cliente que no están en la tabla Customer" → integridad referencial (clave externa). "Una clave principal no puede ser NULL" → integridad de entidad. "La condición que encuentra filas sin valor" → IS NULL.

---

 

Tipos de índice y el compromiso de la desnormalización

Índices agrupados vs no agrupados

Un índice te ayuda a encontrar filas con rapidez, como el índice al final de un libro. Las bases de datos basadas en SQL Server tiene

Volver a la lista del blog