SQL, o lenguaje de consulta estructurado, es un conjunto de comandos para gestionar operaciones de bases de datos relacionales como borrar, crear, actualizar, leer, etc.

SQL es el estándar internacional utilizado por las bases de datos relacionales desde 1987. Existen cuatro tipos de comandos SQL:

  • Lenguaje de definición de datos (DDL ) – Estos comandos definen la estructura de la base de datos. Por ejemplo, eliminar, renombrar, alterar y crear. Afectan a la estructura de la base de datos. Por ejemplo, crear una base de datos o renombrar una tabla.
  • Lenguaje de manipulación de datos (DML ) – Estos comandos se utilizan para trabajar con los datos. Por ejemplo, insertar, seleccionar, actualizar, eliminar. No afectan a las tablas ni a la estructura de la base de datos, sino a los datos presentes en las tablas. Por ejemplo, insertar una nueva fila o actualizar un valor de la fila.
  • Lenguaje de control de transacciones (TCL ) – Estos comandos controlan el procesamiento de transacciones en la base de datos. Por ejemplo, rollback, save, commit. Estos comandos tienen un impacto permanente en la base de datos. Por ejemplo, hacer retroceder toda la transacción al estado anterior aunque falle un proceso.
  • Lenguaje de control de datos (DCL ) – Los comandos de control de datos se utilizan para autorizar usuarios y conceder sólo los permisos necesarios a un usuario o grupo. Por ejemplo, un usuario puede tener permiso de sólo lectura, mientras que otro puede tenerlo de lectura y escritura. El control de acceso se realiza mediante los comandos grant, deny y revoke.

A continuación encontrará la hoja de trucos SQL que contiene los comandos más útiles. La hoja de trucos le ayudará a consultar rápidamente los comandos necesarios con la sintaxis correcta y el resultado esperado de una consulta. En esta hoja de trucos, nos centramos en los comandos DDL y DML, ya que los otros dos tipos son bastante sencillos de utilizar.

Consultas de definición y manipulación de datos

ComandoDescripciónEjemplo
AÑADIRAñade una columna o restricción (según se especifique) a la tabla existente.ALTER TABLE empleado ADD apellido_nombre varchar2(255); ALTER TABLE empleado ADD CONSTRAINT emp_det PRIMARY KEY (id, apellido_nombre);

ALTER TABLE empleado ADD apellido_nombre varchar2(255); ALTER TABLE empleado ADD CONSTRAINT emp_det CLAVE PRIMARIA (id, apellido_nombre);
ALTERAR TABLAAltera la tabla especificada para añadir, actualizar o eliminar la columna de una tabla.ALTER TABLE empleado ADD apellido_nombre varchar2(255);

ALTER TABLE empleado DROP COLUMNA apellido_nombre;
ALTER COLUMNACambie el tipo de datos de la columna. Por ejemplo, para cambiar el tipo de la columna join_date de la tabla employee de varchar2 a datetime.ALTER TABLE empleado ALTER COLUMN fecha_union datetime;
TODOOperador lógico utilizado con SELECT, WHERE y HAVING, y devuelve verdadero si todos los valores satisfacen la condición de la subconsultaSELECT nombre_empleado, fecha_unión from empleado WHERE id_empleado = ALL (select id_empleado from detalles_departamento WHERE departamento = 'I+D');
ANDOperador lógico que devuelve verdadero sólo cuando se cumplen todas las condiciones de la cláusula WHERE.SELECT nombre_empleado, salario from empleado WHERE ciudad = 'California' AND salario > 2000;
CUALQUIERAOperador lógico; devuelve verdadero si incluso uno de los valores de la subconsulta satisface la condición de la cláusula whereSELECT employee_id, employee_name from employee WHERE employee_id = ANY (select employee_id from department_details WHERE department = 'HR' OR department = 'R&D');
COMOCrea un alias para la tabla o columna hasta el momento de la ejecución de la consulta, útil cuando el nombre se utiliza varias veces, especialmente durante las uniones de tablasSELECT count(employee_id) AS empleados_de_houston from empleado WHERE ciudad = 'Houston';
ASCDevuelve los datos en orden ascendente, se utiliza con la cláusula ORDER BY. La propia cláusula ORDER BY ordena los resultados de forma ascendente por defecto.SELECT nombre_empleado, fecha_incorporación, salario from empleado ORDER BY nombre_empleado ASC;
ENTREPara seleccionar valores dentro de un intervaloSELECT nombre_empleado, fecha_incorporación, id_departamento from empleado WHERE salario ENTRE 40000 Y 100000;
CASOConsiste en un conjunto de sentencias; devuelve el valor de la sentencia que es verdadera, SI no se cumple ninguna de las condiciones, se ejecuta la condición en la parte ELSE. Si no hay ninguna otra, entonces devuelve NULL.SELECT importe_pedido, id_cliente, email_contacto CASE WHEN importe_pedido > 3000 THEN "Elegible para 40% de descuento" WHEN importe_pedido entre 2000 y 3000 THEN "Elegible para 25% de descuento" ELSE "Elegible para 5% de descuento" END FROM detalles_pedido;
CREAR BASE DE DATOSCrea una nueva base de datos con el nombre especificadoCREAR BASE DE DATOS movies_development;
CREAR TABLACrea una nueva tabla con el nombre de tabla y los nombres y tipos de columna especificadosCREAR TABLA movie_info (movie_name varchar2(255), release_date datetime, lead_actor varchar2(255), music_director varchar2(255));
DEFAULTEstablece un valor por defecto para la columna especificada, se utiliza con los comandos CREATE o ALTER TABLECREAR TABLA empleado (fecha_incorporación SET DEFAULT fecha_actual);

ALTER TABLE producto ALTER is_available SET DEFAULT true;
BORRARElimina los datos de la tabla especificadaDELETE from empleado where empleado_id = 345;
DESCDevuelve los datos en ordendescendente, se utiliza con la cláusula ORDER BY.SELECT nombre_empleado, fecha_incorporación, salario from empleado ORDER BY nombre_empleado DESC;
DROP COLUMNAElimina la columna especificada de la tabla especificada.ALTER TABLE empleado DROP COLUMN nombre_empleado;
DROP BASE DE DATOSElimina toda la base de datosDROP DATABASE películas_desarrollo;
DROP DEFAULTElimina el valor por defecto de la columna especificadaALTER TABLE empleado ALTER COLUMN es_disponible DROP DEFAULT;
DROP TABLEElimina la tabla especificadaDROP TABLE empleado;
EXISTEComprueba si existe o no un registro en la subconsulta y devuelve verdadero si se encuentra uno o más resultados.SELECT employee_id, contact_number FROM employee WHERE EXISTS (SELECT employee_id, department FROM department WHERE employee_id = 345 AND department = 'HR');
DESDEEspecifica la tabla de la que deben seleccionarse o borrarse los datosSELECT * FROM empleado; DELETE FROM empleado where empleado_id = 345;
GROUP BYAgrupa los datos según la columna especificada, se utiliza para funciones agregadasMostrar el número de empleados de cada país

SELECT COUNT(employee_id), country from empleado GROUP BY país;

Muestra la valoración media de los empleados de cada departamento

SELECT AVG(valoración), departamento from empleado GROUP BY departamento;
ENSe utiliza para seleccionar varios valores a la vez en una cláusula WHERE en lugar de utilizar varias condiciones ORSELECT nombre_empleado FROM empleado WHERE país IN ('India', 'Reino Unido', 'Singapur', 'Australia');
ÍNDICELos índices hacen que la consulta de datos sea más eficaz y rápida. Los índices suelen crearse sobre las columnas en las que más se busca.Crear índice:
CREAR ÍNDICE idx_empleado SOBRE empleado (nombre_apellido);

Cree un índice único en el que los valores no puedan duplicarse:
CREAR ÍNDICE UNICO idx_empleado SOBRE empleado (nombre_apellido);

Elimine el índice:
ALTER TABLE empleado DROP INDEX idx_empleado;
INSERTAR ENAñadir una nueva fila en una tablaINSERT INTO employee (employee_id, employee_name, salary, core_skill) VALUES (451, 'Lee Cooper', 40000, 'Java');
ES NULOComprobación de valores nulosSELECT empleado_id from empleado where nombre_empleado IS NULL;
IS NOT NULLComprobación de valores no nulosSELECT employee_id, core_skill from empleado where core_skill IS NOT NULL;
LIKEDevuelve todos los valores que coinciden con un patrón dadoSELECT employee_id, first_name, last_name where first_name LIKE '%tony';
NOT LIKEDevuelve todos los valores que no coinciden con el patrón dadoSELECT employee_id, first_name, last_name where first_name NOT LIKE '%tony';
ODevuelve verdadero si se cumple una de las condiciones de la cláusula whereSELECT * from empleado where país = 'India' OR país = 'Australia';
ORDENAR POROrdena los resultados en orden ascendente (por defecto) o en el orden especificado en la consulta(ascendenteo descendente)SELECT nombre_empleado, salario from empleado ORDER BY salario DESC;
ROWNUMDevuelve el número especificado de filas mencionadas en la cláusula WHERE de la consultaSELECT * from empleado where ROWNUM <= 5; Esto devolverá las cinco primeras filas del conjunto de resultados.
SELECTSelecciona las columnas mencionadas de la tabla en función de las condiciones dadas. Si se especifica *, se devuelven todos los valores de las columnas.SELECT employee_id from empleado; SELECT * from empleado;
SELECT INTOCopia los datos de la tabla de origen en otra tabla de destino. Puede seleccionar todas las columnas (*) o columnas específicas.SELECT * INTO new_employee_info FROM employee; SELECT employee_name, joining_date, core_skill INTO new_employee_info FROM employee;
SELECT SUPERIORSelecciona el número especificado de registros de la tablaSELECT TOP 5 employee_id from employee where employee_rating = 5;
SETEstablece el valor de una columna al nuevo valor especificado durante una operación UPDATE.UPDATE empleado SET nombre = 'Tony' WHERE empleado_id = 345;
ALGODevuelve verdadero si se cumple una de las condiciones de la subconsulta. SOME es similar al comando ANY.SELECT empleado_id, empleado_nombre from empleado WHERE salario > SOME (select salario from empleado WHERE departamento = 'RRHH');
TRUNCAR TABLAElimina los datos de la tabla – recuerde que la tabla no se borrará.TRUNCATE TABLA log_info;
UNIONDevuelve valores distintos de 2 o más tablas unidas. Para obtener también los valores duplicados, utilice UNION ALL.SELECT ciudad from empleado UNION SELECT ciudad from oficina_localizaciones;
UNIQUEAñade una restricción única a la columna especificada, lo que significa que la columna no puede tener valores duplicados. Puede utilizarse durante los comandos de creación o modificación de tablas.CREAR TABLA empleado (empleado_id int NOT NULL, UNIQUE(empleado_id));

ALTER TABLE empleado ADD UNIQUE(empleado_id);
ACTUALIZARActualiza el valor de la columna especificada con un nuevo valorUPDATE empleado SET nombre = 'Tony' WHERE empleado_id = 345;
VALORESSe utiliza con el comando INSERT para añadir una nueva fila de valores en la tablaINSERT INTO empleado (employee_id, employee_name, salario, core_skill) VALUES (451, 'Lee Cooper', 40000, 'Java');
DONDEAñade condiciones para filtrar el conjunto de resultados de una sentencia selectSELECT * from empleado WHERE salario > 20000;
Hoja de trucos de comandos SQL de consulta rápida

Funciones agregadas

Las funciones de agregado son comandos de manipulación de datos que trabajan sobre columnas numéricas como int, y float. Son útiles para filtrar y ordenar datos en el propio nivel de la base de datos. Algunas funciones agregadas de uso común son

FUNCIÓNDESCRIPCIÓNEJEMPLO
AVGDevuelve el valor medio de la columna especificadaSELECT AVG(notas) from alumnos where asignatura = 'Inglés';
MINDevuelve el valor más pequeño de la columna especificadaSELECT MIN(precio) from producto WHERE categoría_producto = 'zapatos';
MAXDevuelve el mayor valor de la columna especificadaSELECT MAX(cantidad), nombre_producto from inventario;
CONTARDevuelve el número de filas que satisfacen la consultaMuestra el número total de registros de la tabla de empleados

SELECT COUNT(*) from empleado;

Muestra el número de empleados cuyo salario es superior a 20000

SELECT COUNT(*) from empleado where salario > 20000;
SUMADevuelve la suma de los valores de la columna numérica especificadaSELECT SUM(marks) from students where subject = 'Inglés';
Funciones agregadas comunes

Uniones SQL

Las uniones SQL son muy importantes porque conectan y filtran datos de varias tablas. Las uniones son un poco complicadas y pueden dar resultados inesperados si no se ejecutan correctamente. La tabla siguiente le ayudará a consultar rápidamente los 4 tipos de uniones SQL:

TIPO DE JOINDESCRIPCIÓNSINTAXEJEMPLO
Unión internaDevuelve los registros que coinciden en las tablas unidas; es similar a una intersección.SELECT columna1, columna2… from tabla1 INNER JOIN tabla2 on tabla1.columnaN = tabla2.columnaN;select c.customer_id, o.order_id, c.customer_phone from customer c INNER JOIN order o on c.customer_id = o.customer_id;
Unión completa (externa)Devuelve todos los registros que tienen una coincidencia en cualquiera de los dos lados: izquierdo o derecho. Es similar a una unión.SELECT columna1, columna2… from tabla1 FULL OUTER JOIN tabla2 on tabla1.columnaN = tabla2.columnaN;select c.customer_id, o.order_id, c.customer_phone from customer c FULL OUTER JOIN order o on c.customer_id = o.customer_id;
Unión izquierdaDevuelve todos los registros de la tabla izquierda y los registros que coinciden con los criterios de la tabla derechaSELECT columna1, columna2… from tabla1 LEFT JOIN tabla2 on tabla1.columnaN = tabla2.columnaN;select c.country_id, c.country_name, l.location_name from country c LEFT JOIN locations l on c.country_id = l.country_id;
Unión derechaDevuelve todos los registros de la tabla derecha y los registros que coinciden con los criterios de la tabla izquierdaSELECT columna1, columna2… from tabla1 RIGHT JOIN tabla2 on tabla1.columnaN = tabla2.columnaN;select c.country_id, c.country_name, l.location_name from country c RIGHT JOIN locations l on c.country_id = l.country_id;
Tipos de uniones con sintaxis y ejemplo

Recursos adicionales

SQL es una herramienta importante tanto para desarrolladores de software como para científicos de datos y analistas. Una referencia práctica de comandos SQL en forma de hoja de trucos puede ahorrarle mucho tiempo y ayudarle a comprender el resultado esperado de cada palabra clave.

Para más información, consulte los siguientes recursos:

Tutorial SQL: Hoja de trucos SQL

Intellipaat: Hoja de trucos de comandos SQL

WebsiteSetup: SQL Cheat Sheet

ProgrammingWithMosh: Hoja de trucos SQL

Hoja de trucos PostgreSQL