SQL Commands
El “Structured Query Language” –abreviado como SQL– es uno de los lenguajes de programación más conocidos. SQL sirve de interfaz universal para trabajar con datos relacionales o sistemas de gestión de bases de datos relacionales (RDBMS por sus siglas en inglés: Relational Database Management System). El lenguaje contiene un sorprendente número de comandos SQL. Mostramos los más importantes y explicamos los patrones que hay detrás de ellos.
- Certificado SSL Wildcard
- Registro privado
- 1 cuenta de correo electrónico por contrato
En otro artículo encontrarás una introducción a SQL con ejemplos que te enseña a programar con SQL.
¿Qué son los comandos SQL?
Los comandos SQL ordenan a un sistema de gestión de bases de datos (DBMS por sus siglas en inglés: Database Management Systems) que realice determinadas acciones. Esto incluye definir tablas y sus estructuras, así como introducir, modificar y eliminar datos y ejecutar consultas.
El alcance que tienen los comandos SQL viene definido en varias normas ISO o ANSI. Además, hay una serie de dialectos de implementación específicos. Por ejemplo, las implementaciones de los principales fabricantes como PostgreSQL, MySQL, Oracle DBMS y Microsoft SQL Server traen cada uno sus propias variantes del lenguaje. Algunos tienen sus propios comandos; la mayoría, difieren al menos respecto a las funciones para procesar strings y otros datos.
De hecho, SQL consta de varios sublenguajes; cada uno de ellos cubre diferentes áreas y cuenta con sus propios comandos. Veamos los tipos de comandos SQL más importantes.
¿Qué tipos de comandos SQL existen?
Los comandos SQL más importantes pueden dividirse, a grandes rasgos, en cinco sublenguajes. Veamos los ámbitos de aplicación de cada uno de los sublenguajes y sus comandos respectivos:
Sublenguaje SQL | Comandos | Ejemplos |
---|---|---|
Data Definition Language (DDL) | Comandos para definir el esquema de la base de datos: crear, modificar y eliminar tablas de la base de datos; definir claves primarias, claves externas y limitaciones (constraints). | CREATE TABLE, DROP TABLE |
Data Manipulation Language (DML) | Comandos de manipulación de datos: modificar, insertar y eliminar registros. | INSERT, UPDATE |
Data Query Language (DQL) | Comandos para consultar y acondicionar los datos. | SELECT |
Data Control Language (DCL) | Comandos para la gestión de derechos. | GRANT, REVOKE |
Transaction Control Language (TCL) | Comandos para el control de las transacciones. | COMMIT, ROLLBACK |
¿Cuál es la sintaxis básica de los comandos SQL?
A diferencia de los lenguajes de programación más comunes, SQL es un lenguaje declarativo. Esto significa que describe el resultado que debe alcanzarse sin especificar exactamente qué pasos deben llevarse a cabo para lograrlo. Esta característica especial del lenguaje se refleja en su tendencia a que los comandos sean más largos; a cambio, a menudo se requieren menos líneas de código que con los lenguajes imperativos convencionales.
Como ejemplo ilustrativo, nos remitimos al siguiente comando SQL: DROP TABLE IF EXISTS. Has leído bien, es un comando que se utiliza únicamente para eliminar una tabla si ya existe:
DROP TABLE IF EXISTS SomeTable;
Un código de ejemplo en Python con una funcionalidad similar incluye varias solicitudes a funciones y consta de una extensión mayor a dos líneas:
if db.has_table(some_table):
db.drop_table(some_table)
Como se ha visto, un solo comando SQL puede estar compuesto por varias palabras clave. Esto lleva a una apariencia similar entre dichos comandos. He aquí un ejemplo: Los comandos SQL CREATE TABLE y CREATE OR REPLACE VIEW parecen a primera vista expresiones derivadas y subordinadas de un comando hipotético CREATE. Sin embargo, este no es el caso. A pesar de su similitud, se trata de comandos independientes.
Al igual que en otros lenguajes, algunos comandos SQL admiten parámetros adicionales. Suelen ser nombres de bases de datos, tablas o columnas. Por ejemplo, solicitamos las columnas “Name” y “Age” de la tabla “People”:
SELECT Name, Age FROM People;
Los comandos SQL como SELECT y CREATE TABLE suelen escribirse todo en mayúsculas. Sin embargo, en la realidad SQL no distingue entre mayúsculas y minúsculas. No es más que una convención muy extendida.
En el sentido estricto de la palabra, los comandos SQL son sentencias. A mayores, hay otras construcciones sintácticas, algunas de las cuales actúan como comandos. Te mostramos una visión general de los elementos más importantes que conforman la sintaxis SQL:
Término | Equivalente en inglés | Explicación | Ejemplo |
---|---|---|---|
Sentencia | Statement | Ordena al DBMS que realice una acción; termina con un punto y coma | CREATE TABLE People; |
Cláusula | Clause | Modifica una instrucción; solo puede aparecer dentro de una instrucción | WHERE, HAVING |
Expresión | Expression | Retorna un valor al ser evaluada | 6 * 7 |
Identificador | Identifier | Nombre de un objeto, variable o procedimiento de la base de datos; puede ser cualificado o no cualificado | dbname.tablename / tablename |
Predicado | Predicate | Expresión que se evalúa como TRUE, FALSE o UNKNOWN | Age < 42 |
Consulta | Query | Instrucción especial; retorna un conjunto de registros como resultado | SELECT Name FROM People WHERE Age < 42; |
Función | Function | Procesa uno o más valores; normalmente crea un nuevo valor | UPPER('text') -- Devuelve 'TEXT' |
Comentario | Comment | Se utiliza para hacer comentarios en el código SQL; el RDBMS lo ignora | -- Comentario al final de la línea / /* Si es necesario, comentario de varias líneas */ |
Resumen de los comandos SQL más importantes
Las bases de datos estructuran los datos dentro de una jerarquía de capas de almacenamiento, desde el servidor de la base de datos hasta el valor almacenado en un campo. Dado que todos los aspectos de un sistema de gestión de bases de datos relacionales (RDBMS) pueden controlarse mediante SQL, existen comandos SQL para cada una de las capas. Te mostramos una visión general de la jerarquía de los objetos RDBMS:
Objeto RDBMS | Contiene |
---|---|
Servidor | Bases de datos |
Base de datos | Tablas |
Tabla | Registros |
Registro | Campos |
Campo | Valores tipificados |
Además de los objetos RDBMS principales mencionados anteriormente, también se utilizan otros objetos como las vistas (“Views”) y los procedimientos almacenados (“Stored Procedures”). Estos también tienen sus propios comandos SQL. A continuación, nos adentraremos en los comandos de los cinco sublenguajes principales de SQL:
- Data Definition Language (DDL) – Lenguaje de definición de datos
- Data Manipulation Language (DML) – Lenguaje de manipulación de datos
- Data Query Language (DQL) – Lenguaje de solicitud de datos
- Data Control Language (DCL) – Lenguaje de control de datos
- Transaction Control Language (TCL) – Lenguaje de control de transacciones
Comandos SQL para definir datos
Estos comandos SQL se utilizan para definir estructuras de datos. Como tal, todos ellos operan sobre objetos agregados tales como bases de datos, tablas e índices. Un objeto agregado se utiliza para almacenar varios registros; un registro contiene varios campos, cada uno de los cuales está asociado a una columna. La columna define el tipo de dato del campo como, por ejemplo, número, cadena, booleano, etc. Además, para una columna se pueden definir limitaciones como que “debe ser única”, que “no debe ser nula”, etc.
Comandos SQL para definir las bases de datos
En el nivel más alto de un sistema de gestión de bases de datos relacionales (RDBMS) se encuentran las bases de datos. Estos pueden ser creados y eliminados por el siguiente comando SQL:
Comando SQL | Explicación | Ejemplo |
---|---|---|
CREATE DATABASE | Crea una nueva base de datos | CREATE DATABASE Store; |
DROP DATABASE | Borra una base de datos al completo | DROP DATABASE Store; |
USE | Selecciona la base de datos para el siguiente comando | USE Store; |
Comandos SQL para definir tablas
La construcción de una base de datos comienza con la definición del esquema de la base de datos. El esquema es la base para un uso eficiente de la base de datos y requiere un diseño cuidadoso que mapee las tablas individuales y sus relaciones entre sí. Normalmente, el esquema de la base de datos se desarrolla a partir de diagramas de Entity Relation (ER) o diagramas UML especiales.
Si el esquema de la base de datos está disponible como una descripción abstracta, la estructura de la base de datos se construye utilizando los comandos SQL correspondientes. Se definen las tablas con sus columnas y tipos; los enlaces entre las tablas se realizan mediante “Foreign Keys” (claves externas). La estructura puede modificarse posteriormente ejecutando otros comandos SQL. Mostramos un resumen de los comandos más importantes:
Comando SQL | Explicación | Ejemplo |
---|---|---|
CREATE TABLE | Crea una nueva tabla en la base de datos; además del nombre de la tabla, se definen los nombres de las columnas junto con sus tipos | CREATE TABLE Customers ( CustomerID INT UNSIGNED NOT NULL AUTO_INCREMENT, CustomerName VARCHAR(255) NOT NULL, Country VARCHAR(60) NOT NULL, PRIMARY KEY (CustomerID) ); |
ALTER TABLE | Modifica una tabla existente: añade/elimina columnas; cambia el tipo o el nombre de una columna | ALTER TABLE Customers ADD Email VARCHAR(50); |
TRUNCATE TABLE | Elimina todos los registros de una tabla; conserva la estructura de la tabla en el proceso | TRUNCATE TABLE Customers; |
DROP TABLE | Elimina la tabla por completo; genera un error al ejecutarse si la tabla no existe | DROP TABLE Customers; |
DROP TABLE IF EXISTS | Elimina la tabla si existe | DROP TABLE IF EXISTS Customers; |
ALTER COLUMN | Cambia el tipo de dato de una columna existente | ALTER TABLE Customers ALTER COLUMN Email VARCHAR(255); |
DROP COLUMN | Borra la columna de una tabla al completo | ALTER TABLE customers DROP COLUMN Email; |
CREATE INDEX | Crea un índice para la(s) columna(s) de una tabla existente y le asigna un nombre | CREATE INDEX IdxEmail ON Customers (Email); |
DROP INDEX | Elimina un índice existente | ALTER TABLE Customers DROP INDEX IdxEmail; |
Una característica importante de un sistema de gestión de bases de datos (DBMS) es la de asegurar la coherencia de los datos. Por ejemplo, se puede exigir que los campos contenidos en las columnas no queden vacíos o que los valores que estos contengan estén dentro de unos límites permitidos. Se trata de lo que se conoce como constraints (es. “limitaciones”). Además, los Foreign Keys (“claves externas”) pueden utilizarse para asegurarse de que los vínculos entre las tablas se crean correctamente.
Se utilizan varias cláusulas dentro de las sentencias de definición de datos para establecer las limitaciones de cada columna. Te las mencionamos a continuación sin ejemplos:
Comando SQL | Explicación |
---|---|
NOT NULL | Establece que el valor del campo no pueda ser NULL |
UNIQUE | Establece que el valor del campo dentro de la columna no puede aparecer dos veces |
DEFAULT | Establece un valor por defecto para el campo; de esta forma, si no se especifica ningún valor para el campo se utilizará el valor por defecto al crear el registro. |
CHECK | Establece una condición que el valor del campo debe cumplir |
PRIMARY KEY | Especifica que el campo contiene la clave primaria; esto implica UNIQUE y NOT NULL |
FOREIGN KEY | Establece que el valor del campo debe ser una clave primaria de otra tabla |
Comandos SQL para la manipulación de datos
Si las tablas de una base de datos ya están definidas, lo siguiente son las operaciones sobre los registros de datos individuales. Utilizando los comandos SQL adecuados, se pueden insertar, modificar y eliminar registros de datos. Crear, leer, actualizar y eliminar se conocen como las operaciones CRUD básicas (“Create, Read, Update, Delete”), que también se pueden encontrar en las bases de datos NoSQL:
Comando SQL | Explicación | Ejemplo |
---|---|---|
INSERT INTO | Inserta un registro en la tabla | INSERT INTO Customers (CustomerName) VALUES('Tester'); |
UPDATE | Modifica los campos de uno o varios registros | UPDATE Customers SET Email = 'test@example.com' WHERE CustomerName = 'Tester'; |
DELETE FROM | Elimina registros de una tabla | DELETE FROM Customers WHERE CustomerName = 'Tester'; |
Cabe señalar que las cláusulas o funciones “WHERE”, “SET” y “VALUES” que aparecen en los ejemplos también pueden encontrarse en otros contextos. Sin embargo, a pesar de tener el mismo nombre, pueden aplicarse normas ligeramente diferentes para su uso. Ten cuidado cuando uses los comandos SQL UPDATE y DELETE FROM sin una cláusula WHERE, dado que se modificarían o eliminarían todos los registros de datos de la tabla.
Comandos SQL para consultar datos
El comando SQL SELECT es probablemente el más conocido del lenguaje. Se utiliza para consultar los datos de la base de datos. Por lo general, el stock de datos no se modifica con él. Por lo tanto, los analistas suelen tener acceso al comando SELECT. Veamos los componentes básicos del comando SQL SELECT:
Comando SQL | Explicación | Ejemplo |
---|---|---|
SELECT | Consulta datos de la base de datos | SELECT CustomerName FROM Customers; |
WHERE | Limita la consulta a los registros que cumplen un determinado criterio | SELECT Email FROM Customers WHERE CustomerName = 'Tester'; |
AS | Define un alias para una tabla o fila durante una consulta | SELECT CustomerID AS ID, CustomerName AS Customer FROM Customers; |
HAVING | Limita la consulta a los conjuntos de datos pertinentes con la función de agregación | SELECT COUNT(CustomerID), Country FROM Customers HAVING COUNT(CustomerID) >= 1; |
Aunque SELECT es solo un comando SQL para consultar datos, puede utilizarse de diversas maneras. Hay una serie de cláusulas que sirven para filtrar, ordenar y resumir los datos facilitados. Vamos a analizarlos a continuación.
Comandos SQL para refinar las consultas
El comando SQL SELECT retorna un determinado Result Set (es. “conjunto de resultados”). Teóricamente, un Result Set puede considerarse como una tabla con columnas que contienen valores. En la práctica, a menudo es necesario filtrar u ordenar los resultados o limitar el número de registros obtenidos. Todos estos casos de uso tienen cláusulas correspondientes que se pueden utilizar dentro del comando SQL SELECT:
Comando SQL | Explicación | Ejemplo |
---|---|---|
DISTINCT | Elimina los duplicados del conjunto de resultados | SELECT DISTINCT Country FROM Customers; |
LIMIT | Restringe el conjunto de resultados a los primeros resultados | SELECT * FROM Customers LIMIT 5; |
GROUP BY | Agrupa el conjunto de resultados según una característica común | SELECT CustomerName, Country FROM Customers GROUP BY Country; |
ORDER BY | Ordena el conjunto de resultados según una característica | SELECT CustomerName, Email FROM Customers SORT BY CustomerName; |
ASC | Utiliza el orden ascendente (“ascending”) | SELECT DISTINCT Country FROM Customers SORT BY Country ASC; |
DESC | Utilizar el orden descendente (“descending”) | SELECT DISTINCT Country FROM Customers SORT BY Country DESC; |
Comandos SQL para unir consultas
Además de refinar el conjunto de resultados, es posible unir las consultas en varias tablas. Recuerda: un comando SQL SELECT retorna un conjunto de resultados. Por lo tanto, SQL contiene estos comandos que permiten unir dos conjuntos de resultados según las reglas de la teoría de conjuntos relacionales.
Para explicar en detalle los comandos SQL para unir consultas, son necesarios ejemplos más complejos con varias tablas ya definidas. Por ello, en este caso vamos a prescindir del código de ejemplo. Veamos las operaciones de conjunto más importantes:
Comando SQL | Explicación |
---|---|
UNION | Combina dos conjuntos de resultados; los conjuntos de resultados deben tener columnas del mismo tipo en el mismo orden. Sus filas están unidas. |
INNER JOIN | Filtra dos conjuntos de resultados según un criterio común |
LEFT JOIN | Vincula el conjunto de resultados de la consulta de la izquierda con los resultados coincidentes de la consulta de la derecha; los campos no coincidentes se fijan como NULL. |
RIGHT JOIN | Vincula el conjunto de resultados de la consulta de la derecha con los resultados que coinciden de la consulta de la izquierda; los campos que no coinciden se fijan como NULL. |
FULL OUTER JOIN | Combina el LEFT JOIN y el RIGHT JOIN |
Comandos SQL para guardar y repetir consultas
Como hemos visto, las consultas SQL pueden ser bastante complejas y, en la práctica, suele tener sentido repetir algunas consultas. En un principio, es posible guardar los comandos SQL correspondientes como código e importarlos cuando sea necesario. Sin embargo, esto no es muy eficaz. Afortunadamente existen comandos SQL especiales con los que se pueden guardar consultas complejas como una unidad directamente en el sistema de gestión de bases de datos (DBMS).
Veamos primero las vistas, “views” en inglés. Una vista en la base de datos corresponde aproximadamente a una consulta almacenada. Recordemos: una consulta retorna un conjunto de resultados en forma de tabla y, en lugar de descartarlos, los guardamos como una vista. Es por ello por lo que las vistas también se denominan “tablas virtuales”. Por regla general, una vista solo puede ser leída. Hay varios comandos SQL para trabajar con las vistas:
Comando SQL | Explicación | Ejemplo |
---|---|---|
CREATE VIEW | Crea una nueva vista | CREATE VIEW SpanishCustomers AS SELECT CustomerName, Email FROM Customers WHERE Country = "ES"; |
ALTER VIEW | Modifica una vista existente | ALTER VIEW SpanishCustomers AS SELECT * FROM Customers WHERE Country = "ES"; |
CREATE OR REPLACE VIEW | Crea una nueva vista o sustituye una vista existente, si procede. | CREATE OR REPLACE VIEW SpanishCustomers AS SELECT * FROM Customers WHERE Country = "ES"; |
SHOW CREATE VIEW | Muestra el comando SQL utilizado para crear una vista | SHOW CREATE VIEW SpanishCustomers; |
DROP VIEW | Elimina una vista existente | DROP VIEW SpanishCustomers; |
Además de las vistas de la base de datos, existen los “procedimientos almacenados” (Stored Procedures). Los procedimientos almacenados se utilizan para ejecutar consultas repetidamente y son más complejos que las vistas. Estos te permiten utilizar parámetros y unir consultas de forma dinámica. Además, un procedimiento almacenado permite tener acceso a escribir los datos en cuestión. A continuación, te ofrecemos un resumen de los comandos SQL más relevantes, sin ejemplos por razones de espacio:
Comando SQL | Explicación |
---|---|
CREATE PROCEDURE | Crea un nuevo procedimiento |
ALTER PROCEDURE | Modifica un procedimiento existente |
CREATE OR REPLACE PROCEDURE | Crea un nuevo procedimiento o sustituye un procedimiento existente, si procede. |
DROP PROCEDURE | Elimina un procedimiento existente |
CALL | Ejecuta un procedimiento almacenado |
El uso de procedimientos almacenados traslada el código del cliente al servidor. Esto implica una separación de responsabilidades que se traduce en una mayor seguridad y un mejor rendimiento. La desventaja puede ser que el “Business Logic” de un procedimiento almacenado se encuentra fuera del sistema de control de versiones. Dado que los procedimientos almacenados dependen en gran medida del DBMS que los contiene, un cambio de proveedor puede, en el peor de los casos, llevar a una pérdida de funcionalidad.
No hay que confundir los procedimientos almacenados con los conocidos Prepared Statements. Ambos mecanismos sirven para aumentar la seguridad. Sin embargo, los Prepared Statements se definen en la parte de la aplicación del cliente.
Comandos SQL para el control de acceso
Un único servidor de bases de datos puede contener varias bases de datos. Se utilizan mecanismos de control de acceso para gestionar las bases de datos de forma independiente. Por ejemplo, se puede definir para cada usuario los derechos con los que puede acceder a las bases de datos y a las tablas contenidas dentro de estas. Además, se pueden definir grupos de usuarios y adjudicarles usuarios concretos a estos. Principalmente se utilizan dos comandos SQL:
Comando SQL | Explicación | Ejemplo |
---|---|---|
GRANT | Asignar derechos | GRANT ALL ON SomeDB.* TO 'john'@'localhost'; |
REVOKE | Quitar derechos | REVOKE INSERT ON *.* FROM 'john'@'localhost'; |
Comandos SQL para controlar transacciones
Una de las ventajas de utilizar sistemas de gestión de bases de datos relacionales (RDBMS) es que se garantizan las propiedades “ACID”. En definitiva, esto garantiza que los datos estén siempre ordenados y bien definidos. A nivel técnico, se utilizan las llamadas transacciones, que son una “atomic operation” indivisible (“operación atómica”). Una transacción puede completarse íntegramente y sin errores, o bien producir un error que deshace individualmente todos los pasos anteriores para devolver el conjunto de datos a su estado inicial. Veamos los comandos SQL para el control de las transacciones:
Comando SQL | Explicación | Ejemplo |
---|---|---|
START TRANSACTION | Marca el inicio de una transacción | START TRANSACTION; |
COMMIT | Completa con éxito una transacción ya iniciada | START TRANSACTION; TRUNCATE TABLE Customers; COMMIT; |
ROLLBACK | Cancela una transacción previamente iniciada y devuelve el conjunto de datos a su estado inicial | START TRANSACTION; TRUNCATE TABLE Customers; ROLLBACK; |
SAVEPOINT | Crea un punto de guardado durante una transacción y le asigna un nombre | START TRANSACTION; SAVEPOINT BeforeAddData; |
ROLLBACK TO | Volver a un punto de guardado indicando su nombre | ROLLBACK TO BeforeAddData; |
Un resumen de las propiedades ACID mencionadas anteriormente:
Propiedad ACID | Equivalente en español | Explicación |
---|---|---|
Atomicity | Atomicidad | Las transacciones son “indivisibles”. Se ejecutan de forma completa o no se ejecutan en absoluto. Si se cancela una transacción atómica, el sistema se encuentra en el estado anterior al inicio de la transacción. |
Consistency | Consistencia | Tras ejecutar una transacción, el stock de datos vuelve a estar disponible de forma consistente. |
Isolation | Aislamiento | Las operaciones realizadas al mismo tiempo no deben influirse mutuamente. |
Durability | Durabilidad | Los efectos de una transacción deben quedar de forma permanente en el stock de datos. Los efectos de una transacción exitosa no deben perderse si, por ejemplo, el RDBMS se bloquea. |
Ancla el Digital Guide a tu barra de tareas de Windows. De este modo, siempre tendrás a mano nuestros artículos para poder consultarlos. Aquí te explicamos cómo hacerlo anclar una página de Internet a la barra de tareas de Windows en Windows 11.