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
Comando | Descripción | Ejemplo |
AÑADIR | Añ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 TABLA | Altera 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 COLUMNA | Cambie 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; |
TODO | Operador lógico utilizado con SELECT, WHERE y HAVING, y devuelve verdadero si todos los valores satisfacen la condición de la subconsulta | SELECT nombre_empleado, fecha_unión from empleado WHERE id_empleado = ALL (select id_empleado from detalles_departamento WHERE departamento = 'I+D'); |
AND | Operador 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; |
CUALQUIERA | Operador lógico; devuelve verdadero si incluso uno de los valores de la subconsulta satisface la condición de la cláusula where | SELECT employee_id, employee_name from employee WHERE employee_id = ANY (select employee_id from department_details WHERE department = 'HR' OR department = 'R&D'); |
COMO | Crea 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 tablas | SELECT count(employee_id) AS empleados_de_houston from empleado WHERE ciudad = 'Houston'; |
ASC | Devuelve 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; |
ENTRE | Para seleccionar valores dentro de un intervalo | SELECT nombre_empleado, fecha_incorporación, id_departamento from empleado WHERE salario ENTRE 40000 Y 100000; |
CASO | Consiste 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 DATOS | Crea una nueva base de datos con el nombre especificado | CREAR BASE DE DATOS movies_development; |
CREAR TABLA | Crea una nueva tabla con el nombre de tabla y los nombres y tipos de columna especificados | CREAR TABLA movie_info (movie_name varchar2(255), release_date datetime, lead_actor varchar2(255), music_director varchar2(255)); |
DEFAULT | Establece un valor por defecto para la columna especificada, se utiliza con los comandos CREATE o ALTER TABLE | CREAR TABLA empleado (fecha_incorporación SET DEFAULT fecha_actual); ALTER TABLE producto ALTER is_available SET DEFAULT true; |
BORRAR | Elimina los datos de la tabla especificada | DELETE from empleado where empleado_id = 345; |
DESC | Devuelve 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 COLUMNA | Elimina la columna especificada de la tabla especificada. | ALTER TABLE empleado DROP COLUMN nombre_empleado; |
DROP BASE DE DATOS | Elimina toda la base de datos | DROP DATABASE películas_desarrollo; |
DROP DEFAULT | Elimina el valor por defecto de la columna especificada | ALTER TABLE empleado ALTER COLUMN es_disponible DROP DEFAULT; |
DROP TABLE | Elimina la tabla especificada | DROP TABLE empleado; |
EXISTE | Comprueba 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'); |
DESDE | Especifica la tabla de la que deben seleccionarse o borrarse los datos | SELECT * FROM empleado; DELETE FROM empleado where empleado_id = 345; |
GROUP BY | Agrupa los datos según la columna especificada, se utiliza para funciones agregadas | Mostrar el número de empleados de cada paísSELECT 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; |
EN | Se utiliza para seleccionar varios valores a la vez en una cláusula WHERE en lugar de utilizar varias condiciones OR | SELECT nombre_empleado FROM empleado WHERE país IN ('India', 'Reino Unido', 'Singapur', 'Australia'); |
ÍNDICE | Los í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 EN | Añadir una nueva fila en una tabla | INSERT INTO employee (employee_id, employee_name, salary, core_skill) VALUES (451, 'Lee Cooper', 40000, 'Java'); |
ES NULO | Comprobación de valores nulos | SELECT empleado_id from empleado where nombre_empleado IS NULL; |
IS NOT NULL | Comprobación de valores no nulos | SELECT employee_id, core_skill from empleado where core_skill IS NOT NULL; |
LIKE | Devuelve todos los valores que coinciden con un patrón dado | SELECT employee_id, first_name, last_name where first_name LIKE '%tony'; |
NOT LIKE | Devuelve todos los valores que no coinciden con el patrón dado | SELECT employee_id, first_name, last_name where first_name NOT LIKE '%tony'; |
O | Devuelve verdadero si se cumple una de las condiciones de la cláusula where | SELECT * from empleado where país = 'India' OR país = 'Australia'; |
ORDENAR POR | Ordena 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; |
ROWNUM | Devuelve el número especificado de filas mencionadas en la cláusula WHERE de la consulta | SELECT * from empleado where ROWNUM <= 5; Esto devolverá las cinco primeras filas del conjunto de resultados. |
SELECT | Selecciona 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 INTO | Copia 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 SUPERIOR | Selecciona el número especificado de registros de la tabla | SELECT TOP 5 employee_id from employee where employee_rating = 5; |
SET | Establece el valor de una columna al nuevo valor especificado durante una operación UPDATE. | UPDATE empleado SET nombre = 'Tony' WHERE empleado_id = 345; |
ALGO | Devuelve 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 TABLA | Elimina los datos de la tabla – recuerde que la tabla no se borrará. | TRUNCATE TABLA log_info; |
UNION | Devuelve 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; |
UNIQUE | Añ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); |
ACTUALIZAR | Actualiza el valor de la columna especificada con un nuevo valor | UPDATE empleado SET nombre = 'Tony' WHERE empleado_id = 345; |
VALORES | Se utiliza con el comando INSERT para añadir una nueva fila de valores en la tabla | INSERT INTO empleado (employee_id, employee_name, salario, core_skill) VALUES (451, 'Lee Cooper', 40000, 'Java'); |
DONDE | Añade condiciones para filtrar el conjunto de resultados de una sentencia select | SELECT * from empleado WHERE salario > 20000; |
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ÓN | DESCRIPCIÓN | EJEMPLO |
AVG | Devuelve el valor medio de la columna especificada | SELECT AVG(notas) from alumnos where asignatura = 'Inglés'; |
MIN | Devuelve el valor más pequeño de la columna especificada | SELECT MIN(precio) from producto WHERE categoría_producto = 'zapatos'; |
MAX | Devuelve el mayor valor de la columna especificada | SELECT MAX(cantidad), nombre_producto from inventario; |
CONTAR | Devuelve el número de filas que satisfacen la consulta | Muestra el número total de registros de la tabla de empleadosSELECT COUNT(*) from empleado; Muestra el número de empleados cuyo salario es superior a 20000 SELECT COUNT(*) from empleado where salario > 20000; |
SUMA | Devuelve la suma de los valores de la columna numérica especificada | SELECT SUM(marks) from students where subject = 'Inglés'; |
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 JOIN | DESCRIPCIÓN | SINTAX | EJEMPLO |
Unión interna | Devuelve 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 izquierda | Devuelve todos los registros de la tabla izquierda y los registros que coinciden con los criterios de la tabla derecha | SELECT 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 derecha | Devuelve todos los registros de la tabla derecha y los registros que coinciden con los criterios de la tabla izquierda | SELECT 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; |
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
ProgrammingWithMosh: Hoja de trucos SQL